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

猜你喜欢

转载自blog.csdn.net/u014229282/article/details/51191139