struts2入门——登陆验证熟悉struts2部署

Posted 雪山上的蒲公英

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2入门——登陆验证熟悉struts2部署相关的知识,希望对你有一定的参考价值。

0.了解
Struts(支柱、支干)是什么? Struts是流行和成熟的基于MVC设计模式的Web应用程序框架。使用它能帮助我们减少在运用MVC设计模型来开发Web应用时间。


为什么2.1.3之后用StrutsPrepareAndExecuteFilter而不用AdapterFilter,因为前者可以做到在action之前,过滤器之后写自己的过滤器

在Struts2框架中的处理大概分为以下几个步骤
1 .首先客户端通过HttpServletRequest向Servlet容器(例如Tomcat)提交一个请求。
2 .这个请求经过一系列的过滤器(Filter)。(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)。
3 .接着Struts2的核心控制器FilterDispatcher(或最新的过滤器StrutsPrepareAndExecuteFilter(2.1.3版本以后))被调用,被核心控制器所过滤到以后,核心控制器FilterDispatcher
访问ActionMapper来决定用户是否要请求某个Action。 4 .如果ActionMapper决定需要调用某个Action,Struts2中的核心控制器FilterDispatcher会将控制权委派给ActionProxy(即Action代理)。 5 .ActionProxy通过对象ConfigurationManager(配置管理器)来加载Struts2核心配置文件struts.xml,找到需要调用的Action。 6 .ActionProxy会创建一个ActionInvocation的实例,ActionInvocation实例使用命名模式来调用配置中定义的Action,在调用Action的过程前后,还需要调用非常多的拦截器(Intercepter)。 7.依次执行完一系列拦截器(1,2,3...)后, 就执行Action,它会调用Action中的业务处理方法进行业务处理,同时这个业务处理方法会返回一个结果Result,实际会返回一个字符串,我们根据这个
字符串去调度我们的视图(Template),去匹配result。一般会返回一个JSP页面或者FreeMarker的模版,或者会调用另外一个Action链。 8.当返回视图(Template)以后,还需要将之前执行过的拦截器再依次反向执行一遍(3,2,1...),当这些拦截器被反向执行完以后,才会进行最终的请求的响应,通过HttpServletResponse去响应
客户端的请求。
 工作流程
1、客户端浏览器发出HTTP请求.
2、根据web.xml配置,该请求被FilterDispatcher接收
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面


以简单登录验证项目练习一下

 


1.建立一个Java Web项目UserManager
2.导入Struts相关jar包
commons-fileupload(上传下载包)
commons-io(输入输出包)
commons-lang 3-3.2(基础包)
commons-logging(日志包)
freemarker(模板引擎,通过模板生成文本输出的通用工具)
structs2-core(核心包)
xwork-core(一些类基于xwork)
ognl(表达式)
javassist-3.11.0.GA.jar(解析java类文件的一个包)

3.在web.xml文件中添加Struts2的过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>UserManager</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 添加过滤器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>

4.建立Action类

package dps.action;

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

public class UserAction extends ActionSupport{

    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;
    }
    
     @Override
    public String execute() throws Exception{
        //定义返回值变量
        String strReturn =INPUT;
        //业务逻辑判断
        if(this.username.equals("abc")&&this.password.equals("123")){
            strReturn=SUCCESS;
        }else{
            ActionContext.getContext().getSession().put("tip", "登录失败!");
        }
        return strReturn;
    }
    
    
}

5.搭建前台jsp页面

     5.1 登录页面login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>用户登录页面</title>

</head>
<body>
<center>
${tip}
<form action="login.action" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="pasword"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</center>
</body>
</html>

      5.2 登录成功页面loginSuccess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>登录成功</title>
</head>
<body>
<h1>用户登录成功!!</h1>
</body>
</html>

6.src目录下添加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> <!-- 设置struts对web页面的解码方式 --> <constant name="struts.i18n.encoding" value="UTF-8" /> <package name="myPackage" extends="struts-default"> <!-- 定义登录的Action --> <action name="login" class="dps.action.UserAction"> <result>loginSuccess.jsp</result> <result name="input">login.jsp</result> </action> </package> </struts>

7.运行结果

修改web.xml文件,将起始页改为login.jsp

 <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>

发布

 

以上是关于struts2入门——登陆验证熟悉struts2部署的主要内容,如果未能解决你的问题,请参考以下文章

Struts2连接数据库实现登陆(验证码)注册

《Java从入门到放弃》入门篇:Struts2的常用验证方式

《Java从入门到放弃》入门篇:Struts2的常用验证方式

struts2 登陆时怎样在本页面提示密码输入错误啊??(用验证框架),望给出例子!!

《Java从入门到放弃》入门篇:Struts2的常用基本标签

《Java从入门到放弃》入门篇:Struts2的常用基本标签