• Struts2小结


    一 Struts2内容简介:

    2.struts2的应用

    3.拦截器Interceptor的工作原理

    4.校验

    5.Struts2的执行过程

    二 Struts2的应用

    1.安装JDK,Tomcat与Eclipse

    2.建立web项目:Dynameic Web Project

    导入Struts2需要的jar包:struts2-core-2.x.x.jar,xwork-core-2.x.x.jar,ognl-2.6.x.jar,freemarker-2.3.x.jar,commons-fileupload-1.2.1.jar

    配置Tomcat服务器:点击window->Preferences->Server->Runtime Environments->add

    web项目添加Tomcat:右键项目->Build Path->Configure Build Path->Add Libaray->Server Runtime,选择Tomcat添加

    3.web.xml中配置Struts2的核心Filter

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation
    ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>webTest01</display-name> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <!-- 添加struts2过滤器 --> <filter> <filter-name>struts2</filter-name> <filter-class> <!-- 添加核心Filter --> 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.在src里建立struts.xml(必须是这个名字),配置Action类(约定优于配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
       "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
       "http://struts.apache.org/dtds/struts-2.0.dtd">
       
    <struts>
    <constant name="webTest01" value="true" />
    <!-- 所有Action都定义在package下 -->
       <package name="gusixue" namespace="/" extends="struts-default">
    <!--    *为通配符,{1}为取*得值,jsp定位使用.action -->
          <action name="*_status" 
                class="com.nsu.web.action.UserAction" 
                method="{1}">
    <!-- 定义两个逻辑视图和物理资源之间的映射 -->  
                <result name="success">/welcome.jsp</result>
                <result name="fail">/login.jsp</result>
           </action>
       </package>
    </struts>

    三 拦截器Interceptor的工作原理

    1.内置拦截器配置:

    在struts.xml文件下添加

    <interceptors>
        <interceptor name="拦截器名1" class="拦截器类1"></interceptor>
        <interceptor name="拦截器名2" class="拦截器类2"></interceptor>
        ...
        <interceptor name="拦截器名n" class="拦截器类n"></interceptor>
    </interceptors>
    
    <action name="Action名" class="Action类">
        <interceptor-ref name="defaultStack"></interceptor-ref>
        <interceptor-ref name="拦截器1"></interceptor-ref>
        <interceptor-ref name="拦截器2"></interceptor-ref>
    </action>

      一旦继承了struts-default包(package),所有Action都会默认调用拦截器栈 ---defaultStack。但是当在Action配置中加入“<interceptor-ref name=”..“ />”则会覆盖defaultStack,所以在action中写拦截器引用时,需要显示引用defaultStack(而且最好在第一句)。

    2.自定义拦截器:

      1)实现方法

    • 实现Interceptor接口
    • 继承AbstractInterceptor类
    • 继承MethodFilterInterceptor类

      2)拦截器必须是无状态的,换句话说,在拦截器类中不应该有实例变量。这是因为struts2对每一个Action的请求使用的是同一个拦截器实例来拦截调用,如果拦截器有状态,在多个线程(客户端的每个请求将由服务器端的一个线程来服务)同时访问一个拦截器实例的情况下,拦截器的状态将不可预测。

    3.其他:在struts2的工作原理下

    四 校验

    1.校验:

      1)输入校验分为客户端校验和服务器端校验

      2)服务器端校验分为:手工校验和配置校验,但是都必须要继承ActionSupport类

      3)手工校验:

        方式一:重写validate()方法: validate()方法会校验action中所有与execute方法签名相同的方法。

        方式二:重写validateXxx()方法:validateXxx()只会校验action中方法名为Xxx的方法。

        

        当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport )

        如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。

       4)校验框架:

        校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName(struts.xml中的action的name)-validation.xml,其中ActionClassName为action的简单类名,-validation为固定写法

        当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件:
        先检查全Action的AconClassName-validation.xml再检查某个方法的ActionClassName-ActionName-validation.xml;如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则;当 action继承了另一个action,父类action的校验文件会先被搜索到。

         

    2.自定义类型转换:

      1)建立一个新类

    • 实现ognl.TypeConverter接口
    • 继承DefaultTypeConverter类(一般使用这个)
    • 继承StrutsTypeConverter类

        类中添加转换判断与转换过程

      2)特定类型转换器:只有特定的Action才可以使用

         注册方法:在Action所在的包中建立properties文件,文件名格式:Action类名-conversion.properties,内容如下:要转换的Action类的属性名=类型转换器全限定名

      3)全局类型转换器:所有Action都可以使用

        注册方法:在classpath下建立名为xwork-conversion.properties的文件,内容如下:目标类型(全限定名)=类型转换器全限定名

    五 Struts的执行过程

    1. 首先jsp传递参数并发出请求
    2. 根据请求名在Struts.xml中找到Action
    3. 在Actin中根据传递出来的名字找到对用的set方法,检查是否有有自定义类型转换
    4. 从配置文件中找到要转换的属性极其转换类
    5. 进入转换类判断转换方向,将字符串转换为给定类类型
    6. 如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入下一步
    7. 系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。再调用action中的validate()方法。(此为输入校验)
    8. 如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
  • 相关阅读:
    css 父层 透明 子层不透明Alpha
    ecshop循环foreach,iteration,key,index
    ecshop变量介绍
    ecshop 获取某个商品的 所有订单信息 或者销量
    echosp 销量排行 新增实际价格
    ecshop后台模板设置中将非可编辑区改为可编辑区
    ecshop 影响全局的标量lib_main.php
    个人js
    fixed的left:50%,漂浮
    js返回顶部
  • 原文地址:https://www.cnblogs.com/zhuanzhuruyi/p/6642917.html
Copyright © 2020-2023  润新知