天天看點

手動配置struts的全過程

java的struts架構的搭建,可以用工具自動的配置,雖然很友善.可是對于初學者而言,它隐藏了很多細節,不知道struts是如何遵循MVC模式的.

下面,我來給大家示範一下如何手動配置struts,希望能給大家一些幫助.

具體步驟:

1.先建立一個web工程

2.把struts開發包引入web工程(WEB-INF/lib)

3.編寫login.jsp,wel.jsp和err.jsp

4.編寫ActionForm(使用者表單)和Action

5.編寫struts-config.xml檔案,該檔案用于配置Action,ActionForm,對應關系,跳轉位置,一般将這個檔案放在/WEB-INF目錄下.

6.配置web.xml檔案,該檔案用于配置ActionServlet

7.測試.

流程圖如下:

手動配置struts的全過程

下面我在說說具體的實作細節

1.web應用的目錄如下

手動配置struts的全過程

2将struts的全部jar包導入到WEB-INF/lib目錄下

jar包在解壓後的struts檔案夾的lib下

手動配置struts的全過程

3.login.jsp,err.jsp和wel.jsp是在WEB-INF目錄下的,這樣桌的目的是,使檔案更安全.

login.jsp的代碼如下

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
    <form action="/strutsLogin/login.do" method="post">
    u:<input type="text" name="usename"><br>
    p:<input type="password" name="passwd"><br>
    <input type="submit" value="login">
    </form>
</body>
</html>
           

err.jsp的代碼如下

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
error
</body>
</html>
           

wel.jsp的代碼如下

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
welcome!
</body>
</html>
           

因為login.jsp是放在WEB-INF目錄下的,如何才能通路到呢?

在webroot下建立一個index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
    <jsp:include page="/WEB-INF/login.jsp"></jsp:include>
</body>
</html>
           

這樣通路index.jsp,就會跳轉到login.jsp檔案去了

.

4.編寫ActionForm(使用者表單)和Action

ActionForm表單是用來存儲資料的

UserForm.java的代碼如下

package com.hsp.forms;
//這是一個使用者表單,用于填充資料
import org.apache.struts.action.ActionForm;

public class UserForm extends ActionForm {
    //定義屬性[這裡有一個規範,我們定義屬性名字的時候]
    //應該和jsp頁面的控件名稱一樣.如果有人提出疑問
    //說表單的屬性名字一定和控件名字一樣,不一定,
    //隻要set方法和get方法的名字和控件一緻.
    private String usename;
    private String passwd;
    public String getUsename() {
        return usename;
    }
    public void setUsename(String usename) {
        this.usename = usename;
    }
    public String getPasswd() {
        return passwd;
    }
    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

}
           

LoginAction.java如下

package com.hsp.actions;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//這是一個action(表示小隊長,需要繼承action)
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.hsp.forms.UserForm;

public class LoginAction extends Action {

    //我們需要重寫一個方法:execute會被自動調用
    //有點類似servlet/service/doGet/doPost方法

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //把form轉成UserForm對象
        UserForm userForm=(UserForm)form;
        System.out.println("使用者名="+userForm.getUsename());

        //簡單驗證
        if("123".equals(userForm.getPasswd())){
            //如果密碼是123,就認為是合法使用者
            //跳轉到wel.jsp
            return mapping.findForward("ok");
        }else {
            return mapping.findForward("err");
        }
    }


}
           

5.編寫struts-config.xml檔案,該檔案用于配置Action,ActionForm,對應關系,跳轉位置,一般将這個檔案放在/WEB-INF目錄下.

struts-config.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- 配置form表單 -->
<form-beans>
<!-- name是表單名字,可以随意寫 建議取名規範,表單類名小寫-->
<!-- type用于指定表單類的全路徑 -->
<form-bean name="userForm" type="com.hsp.forms.UserForm"/>
</form-beans>
<!-- 配置action -->
<action-mappings>
<!-- 配置具體的一個action -->
<!-- path:表示将來通路該action的資源名:
http://localhost:8080/web/path? -->
<!-- name:用于關聯某個表單 -->
<!-- type:用于指定該action的全路徑 -->
<action path="/login" name="userForm" type="com.hsp.actions.LoginAction">
<!-- 這裡配置跳轉關系 -->
<!-- name:表示結果名稱 -->
<!-- path:表示轉發到那個頁面去 -->
<forward name="ok" path="/WEB-INF/wel.jsp"/>
<forward name="err" path="/WEB-INF/err.jsp"/>
</action>
</action-mappings>
</struts-config>
           

6.配置web.xml檔案,該檔案用于配置ActionServlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>strutsLogin</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <!-- 配置struts-config --> 
  <init-param>
  <param-name>config</param-name>
  <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  </servlet>
  <servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>
           

這樣就配置完成了.通路index.jsp.

當第二個輸入123時,就會跳轉到wel.jsp頁面

如果不是就會跳轉到err.jsp中去.