Strust2知识总结

strust2

Struts 2主要以WebWork为核心,采用拦截器的机制来处理用户的请求的mvc框架.Struts2作为控制器(Controller)来建立模型与视图的数据交互。(用于替代传统MVC模式中的servlet)

主要是就Action类.还有拦截器.代替以前的Servlet和过滤器

使用struts2时在控制器中现在要完成的三个事情?
1 设置请求参数
2 指定业务逻辑
3 指定导航路径

使用

1.导入jar包
2.配置web.xml (StrutsPrepareAndExcuteFilter)
3.编写Action类,继承ActionSupport 默认为execute方法,一般自定义名字()
4.web.xml配置或注解配置Action的导航

//访问时先包的名称,再访问Action
<package name="mypackage1" namespace="/" extends="struts-default">  
<action name="save" class="mypackage.simpleAction">  
       <result name="success" type="dispatcher">moo.jsp</result>
</action>  
</package>  
Struts使用ServletApi

Struts的一个特征就是可以解耦.

  • 解耦

通过ActionContext的方式获得

ActionContext context=new context();  
Map<String, Object> requestMap = (Map<String, Object>) context.get("request");  
Map<String, Object> sessionMap = context.getSession();  
Map<String, Object> servletContextMap = context.getApplication();  
//向三个Map对象中保存数据
requestMap.put("name", "XXX");  
sessionMap.put("name", "XXX");  
servletContextMap.put("name", "XXX");  
  • 耦合方式 1.在Action中采用ServletAcitionContext获得对象
 HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        ServletContext servletContext = ServletActionContext.getServletContext();
        HttpSession session = request.getSession();
传值方式
  • 利用上面的解耦或耦合方式,利用作用域传值.
  • Action提供的域模型或属性
    1.Action里面的属性就可以直接在视图中获得.但是必须要有get/set方法.
    2.定义一个类,继承序列化接口. Action里直接定义这个类即可.无需get/set方法
动态用方法,及动态导航.

动态方法:根据*号的,自动匹配方法,从而

<action  name="*Action" class="com.action.test"  
method="{1}">  

动态导航啊:直接在xml导航文件配El表达式

校验器
  • 手动校验
    Atction复写validate方法,执行时 都会导航到input上面
    validate方法 任何方法都会调用
    validateXxxx 调用Xxx方法
    addFiledError()用来传递错误信息,也可以用作用域来传递 el表达式接收,解耦 ActionContext.耦合 servletcontext都可以.
  • 验证框架配置
    Action类名-别名-validation.xml
    别名对应的是@Action配置中value属性的值
name="Action里面的值"  
type="struts的验证类型,提供了多种,也可以自定义"  
基于字节  

    <field name="goodsName">
            <!--必须输入字符串-->
              <field-validator type="requiredstring">
            <!--消除两边的空格-->
                      <param name="trim">true</param>
            <!--返回错误信息-->
                       <message>商品名称不能为空!</message>
        </field-validator>
    </field>
非字节

    <field-validator type="requiredstring">
        <param name="fieldName">goodsName</param>
        <param name="trim">true</param>
        <message>商品名称不能为空!</message>
    </field-validator>

jsp中用Struts的标签接收错误信息

<s:filedError filedName="goodsName" />  
  • 自定义校验类

继承FieldVlidatorSupport,复写validate方法 然后定义一个xml文件引用该类

<validators>  
    <validator name="myvalidate" class="com.test.validate.myvalidate"/>
</validators>

最后在验证框架里引用该type

    <field name="goodsName">
            <!--必须输入字符串-->
              <field-validator type="myvalidate">
            <!--消除两边的空格-->
                      <param name="qian">.peter</param>
            <!--返回错误信息-->
                       <message>必须为.peter后缀</message>
        </field-validator>
    </field>

Struts2 默认的校验配置是非短路的方式,即把一个字段所有的不符合要求的提示都提示用户,我们也可以配置以短路的方式提示用户,即当用户输入的条件不满足第一次校验的时候就返回提示信息,不再往下执行。这种配置方式只能是以字段为基础的校验器。只需要在 元素上加上 short-circuit="true" 即可

kxind

性别:男. 敢于尝试 爱折腾的死宅程序猿. https://github.com/kxinds