zoukankan      html  css  js  c++  java
  • 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>

    发布

  • 相关阅读:
    遗传算法(Genetic Algorithm, GA)及MATLAB实现
    CCF CSP 201809-2 买菜
    PAT (Basic Level) Practice (中文)1008 数组元素循环右移问题 (20 分)
    PAT (Basic Level) Practice (中文)1006 换个格式输出整数 (15 分)
    PAT (Basic Level) Practice (中文)1004 成绩排名 (20 分)
    PAT (Basic Level) Practice (中文)1002 写出这个数 (20 分)
    PAT (Advanced Level) Practice 1001 A+B Format (20 分)
    BP神经网络(原理及MATLAB实现)
    问题 1676: 算法2-8~2-11:链表的基本操作
    问题 1744: 畅通工程 (并查集)
  • 原文地址:https://www.cnblogs.com/zjfjava/p/6601662.html
Copyright © 2011-2022 走看看