1、搭建一個簡單的Struts2應用

 

具體爲一下幾個步驟:

1、引入Struts 2工程所需運行庫文件。

2、創建並配置web.xml文件

3、創建一個Action類

4、創建並配置struts.xml文件。

引入工程所需運行庫文件

目前我用到的Struts版本爲2.1.8.1 GA。

把以下幾個運行庫文件複製到工程的WEB-INF下的lib文件夾中。

 

 

在web.xml中配置FilterDispatcher

配置WEB-INF下的web.xml文件

01<?xml version="1.0" encoding="UTF-8"?>
02<web-app version="2.5" 
05    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
07    
08    <filter>
09        <filter-name>struts2</filter-name>
10        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
11    </filter>
12  
13    <filter-mapping>
14        <filter-name>struts2</filter-name>
15        <url-pattern>/*</url-pattern>
16    </filter-mapping>
17      
18</web-app>
  1. Struts2的核心控制器FilterDispatcher被設計成了過濾器,通過<filter></filter>標籤引入。
  2. <url-pattern>/*</url-pattern>說明所有客戶端請求都經由FilterDispatcher處理,並把過濾後的請求交給Struts2進行處理。

 

編寫Action

  1. Struts2直接使用Action來封裝HTTP請求參數,因此Action類應該包含與請求相對應的屬性,併爲該屬性提供對應的setter和getter方法。
  2. 爲Action類裏增加一個execute方法,因爲Struts2框架默認會執行這個方法。這個方法本身並不做業務邏輯處理,而是調用其他業務邏輯組件完成這部分工作。
  3. Action類返回一個標準的字符串,該字符串是一個邏輯視圖名,該視圖名對應實際的物理視圖。

我們現在要實現的是一個用戶登錄驗證,因此Action中提供用戶名和密碼兩個屬性。如果正確返回success否則返回error

01package wwfy.action.user;
02  
03public class UserAction {
04  
05    private String username;
06    private String password;
07  
08    public String getUsername() {
09        return username;
10    }
11  
12    public void setUsername(String username) {
13        this.username = username;
14    }
15  
16    public String getPassword() {
17        return password;
18    }
19  
20    public void setPassword(String password) {
21        this.password = password;
22    }
23  
24    public String execute() throws Exception {
25        // 只有用戶名爲wwfy,密碼爲123456方可成功登陸
26        if (username.equals("wwfy") && password.equals("123456")) {
27            return "success";
28        } else {
29            return "error";
30        }
31    }
32}

Action有一下特點:

  • Struts2框架中Action是一個POJO,沒有被代碼污染。
  • Struts2中的Action的execute方法不依賴於servlet API,改善了Struts1中耦合過於緊密,極大方便了單元測試。
  • Struts2的Action無須用ActionForm封裝請求參數。
  • 相對Struts1框架而言,Struts2的邏輯視圖不再是ActionForward對象,而是一個普通的字符串,利於分離和複用。

配置struts.xml

Struts2框架的核心配置文件就是struts.xml,該文件主要負責Struts2應用中各Action的具體實現邏輯。struts.xml會根據不同請求找到具體的Action,然後根據Action返回的邏輯視圖名找到具體的物理視圖。

在WEB-INF/classes文件夾下創建struts.xml

01<?xml version="1.0" encoding="UTF-8"?>
02<!DOCTYPE struts PUBLIC
03    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
05  
06<struts>
07    <package name="wwfy" extends="struts-default">
08        <action name="loginUser" class="wwfy.action.user.UserAction">
09            <result name="success">/jsp/error.jsp</result>
10            <result name="error">/jsp/error.jsp</result>
11        </action>
12    </package>
13</struts>
  1. 該文件發佈的時候必須放置在WEB-INF/classes路徑下,當程序運行的時候會自動在該目錄下搜索struts.xml。
  2. 在action標籤中定義了name和class。name屬性對應的是用戶URL請求中的action名,比如在本應用中,用戶請求爲http://localhost:8080/Struts2/loginUser.action,那麼name屬性就應該爲loginUser。class屬性是處理請求的實現類(注意:要包含完整路徑),本應用的實現類是wwfy.action.user.UserAction。
  3. result標籤定義邏輯視圖和物理視圖之間的映射,在我們的Action中,如果返回的字符串是"success”則由對應的success.jsp頁面進行處理;如果返回的字符串是"error”則由error.jsp頁面進行處理。

編寫視圖資源

1、登陸頁面login.jsp

01<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
02<%@ taglib prefix="s" uri="/struts-tags" %>
03<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
04<html>
05  <head>
06    <title>登陸頁面</title>
07  </head>
08    
09  <body>
10    <center>
11        <s:form action="loginUser">
12                <s:textfield name="username" label="用戶名"></s:textfield>
13                <s:password name="password" label="密碼"></s:password>
14                <s:submit value="確定"/>
15                <s:reset value="重置"/>
16        </s:form>
17    </center>
18  </body>
19</html>

 

2、登陸成功頁面success.jsp

01<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
02<%@ taglib prefix="s" uri="/struts-tags" %>
03<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
04<html>
05  <head>
06    <title>成功頁面</title>
07  </head>
08    
09  <body>
10    <p align="center">登陸成功!!!您的用戶名是<s:property value="username"></s:property></p>
11  </body>
12</html>

3、登陸失敗頁面error.jsp

01<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
02  
03<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
04<html>
05  <head>  
06    <title>失敗頁面</title>
07  </head>
08    
09  <body>
10    <p align="center">登陸失敗!!!</p>
11  </body>
12</html>

頁面中很多以s:開頭的標籤,這些是Struts2框架獨有的標籤庫.

 

整個應用的目錄結構是

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章