Struts2——簡單登錄處理

下面爲Strut2Demo應用增加一個簡單的登錄處理流程:
loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><s:text name="loginPage"/></title>
</head>
<body>
<s:form action="login">
    <s:textfield name="username" key="user"/>
    <s:textfield name="password" key="pass"/>
    <s:submit key="login"/>
</s:form>
</body>
</html>

Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- 指定全局國際化資源文件 -->
    <constant name="struts.custom.i18n.resources" value="mess"/>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    <constant name="struts.devMode" value="true" />
    <!-- 所有的Action定義都應該放在package下 -->   
    <package name="crazyit" namespace="/" extends="struts-default">
        <action name="login" class="com.yd.action.LoginAction">
            <!-- 定義三個邏輯視圖和物理資源之間的映射 -->
            <result name="error">/WEB-INF/content/error.jsp</result>
            <result name="success">/WEB-INF/content/welcome.jsp</result>
        </action>
        **<action name="*">
            <result>/WEB-INF/content/{1}.jsp</result>
        </action>**
    </package>
</struts>

注意:
/WEB-INF/content/{1}.jsp

上面的配置文件指定國際化文件的base名爲mess,所以要爲該應用提供一個mess_zh_CN.properties
mess_zh_CN.properties

loginPage=\u767B\u5F55\u9875\u9762
errorPage=\u9519\u8BEF\u9875\u9762
succPage=\u6210\u529F\u9875\u9762
failTip=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u4E0D\u80FD\u767B\u5F55\uFF01
succTip=\u6B22\u8FCE\uFF0C{0},\u60A8\u5DF2\u7ECF\u767B\u5F55\uFF01
user=\u7528\u6237\u540D
pass=\u5BC6  \u7801
login=\u767B\u5F55

接下來讓我們看看在action如何這登錄驗證

LoginAction

package com.yd.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    // 定義封裝請求參數的username和password成員變量
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    // 定義處理用戶請求的execute方法
    public String execute() throws Exception {
        // 當username爲admin password爲pass時即登錄成功,模擬從數據庫得到數據
        if (getUsername().equals("admin") && getPassword().equals("pass")) {
            ActionContext.getContext().getSession().put("user", getUsername());
            return SUCCESS;
        }
        return ERROR;
    }
}

另外兩個簡單提示頁面
welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title><s:text name="succPage"/></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <s:text name="succTip">
        <s:param>${sessionScope.user}</s:param>
    </s:text><br/>
</body>
</html>

error.jsp

<%@page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title><s:text name="errorPage"/></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <s:text name="failTip"/>
</body>
</html>

既然本應用採用的MVC是Struts,那麼我對此應用的開發過程進行總結:

Struts 2應用的開發步驟:
1. 在web.xml文件定義核心Filter來攔截用戶請求,故在開發Struts 2應用第一步在配置web.xml

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <!-- 讓Struts 2的核心Filter攔截所有請求 -->
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2.如果需要post方式提交請求,則定義包含表單數據的JSP頁面。只是get方法請求,則忽略。
3.定義處理用戶請求的Action類
這部分爲MVC框架中的C部分(控制器),負責調用Model裏的方法來處理請求。控制器實際上由兩個部分組成的,即攔截所有用戶的請求,處理請求的通用代碼有核心控制器完成,而實際的業務控制則由Action來處理。
4.配置Action。
現在Struts 2的Convention 插件借鑑Rails框架的優點,開始支持“約定優於配置”的思想,就是採用約定方式來規定用戶請求地址和Action之間的對應關係。

<action name="login" class="com.yd.action.LoginAction"
...
</action>

5.配置處理結果
當Action處理用戶請求結束,通常會返回一個處理結果

<!-- 定義多個邏輯視圖和物理資源之間的映射 -->
            <result name="error">/WEB-INF/content/error.jsp</result>
            <result name="success">/WEB-INF/content/welcome.jsp</result>

6.編寫視圖資源。如果Action要把一些數據傳給視圖資源,則藉助於OGNL表達式

經過上面6個步驟,即可基本上完成一個Struts 2處理流程的開發,也就是執行一次完整的請求/響應過程

概括:這是一個簡單Struts2簡單的對登錄驗證的處理,其中國際化資源,也使用了Struts2標籤庫,本應用的提升有一定的昇華,比如English國際化,後臺提示輸入格式錯誤等等。

May-The-Good-Luck-Be-With-You

發佈了50 篇原創文章 · 獲贊 52 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章