• 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>

    发布

  • 相关阅读:
    python 函数function
    安装python 第三方库遇到的安装问题 microsoft visual studio c++ 10.0 is required,Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
    Pandas库入门
    pyplot基础图表函数概述
    Matplotlib库介绍
    Numpy数据存取与函数
    NumPy库入门
    css3知识
    HTML标签marquee实现滚动效果
    JQuery导航选择特效
  • 原文地址:https://www.cnblogs.com/zjfjava/p/6601662.html
Copyright © 2020-2023  润新知