zoukankan      html  css  js  c++  java
  • struts2

    struts2请求流程
    1.用户发出请求,请求会先通过web.xml配置的核心的过滤器,判断请求是否符合过滤要求
    2.满足就把请求交给strurs2处理。struts会先根据请求的路径解析要访问的Action,
    规则:根据namespace+actionName寻找到对应的action类,并且执行默认的execute方法
    (:如果开启了动态方法访问就访问指定的方法)
    3.在Action的方法执行完成后返回一个字符串,在action配置中寻匹配的result并且跳转到
    对应的资源位置( 根据result的type属性来决定:可能是页面、流、json等等)

    struts2在访问一个action的时候支持字段和模型驱动。就是通过反射的原理给Action类
    中提供了get和set方法的属性进行赋值和取值的方式

    获得ServletAPI
    1.解耦,不依赖ServletAPI的接口
    使用ActionContext来获得,request,session和application都被封装成map的形式
    ActionContext ac = ActionContext.getContext();
    ac.get("request") ac.getSession() ac.getApplication()
    2.耦合的方式
    使用ActionContext的子接口 ServletActionContext.getXX()方法获得
    ServletActionContext.getRequest()...

    动态方法的访问:Action默认执行execute,每一个方法都要编写新的Action,如何在一个
    类中编写多个方法,对应着多种请求。使用struts的动态方法,动态方法的访问方式
    actionName!methodName.后缀 ,但是安全性不高,一般建议关闭

    使用method属性来指定方法的访问,在action配置上添加method属性,但是缺陷是配置过多
    每个方法都会对应着一个action,method属性寻找方法有两种方式匹配
    1.完全对应着方法名的大小写
    2.会寻找do开头方法名首字母大写 login doLogin

    通配符 * {下标}
    通配符用来匹配符合路径的字符串内容,然后{1}表示取得第一个*匹配的内容

    默认action配置,访问不存在的action时会抛出404异常、可以使用默认action来改变
    访问的结果.可以自定义返回的404页面
    通过default-action-ref 配置,这个配置会指向一个自定义的action,当访问的action
    不存在就访问这个ref引用的action
    action如果没有给class,默认访问ActionSupport,这个类中只有一个execute方法,并且
    方法内没有代码,默认返回一个success
    result如果没有给name,默认就是success

    ResultType:dispatcher、redirect、redirectAction、chain、stream...
    dispatcher:默认的,表示转发,和jsp转发概念相同,会附带请求的参数到指定的资源位置
    redirect:重定向,重定向不会带参数,可以重定向到页面或者其他的action中,如果访问
    action要加后缀,并且可以跳转到其他namespace下的action
    redirectAction: 和redirect不同的是只能重定向到其他的action,同时只能是同一个namespace
    下的action,所以可以省略后缀
    chain: 和dispatcher相似,chain相当于把多个action的访问关联在一起,使用同一个
    ActionContext

    拦截器:(interceptor),struts和核心功能。拦截器可以在Action和result被执行前后
    进行一些处理。同时拦截器利用AOP机制可以让我们把通用的业务代码重用为组件的方式
    切入在程序的任何一个可执行点,Struts中的多个功能都是拦截器完成的。

    拦截器和过滤器是有区别的
    1.拦截器基于java反射机制,以及AOP实现,过滤器基于函数的回调
    2.过滤器依赖Servlet容器,拦截器
    3.过滤器过滤所有的请求,拦截器只会拦截action
    4.拦截器可以访问ActionContext,过滤器不能

    struts提供的拦截器只负责struts的功能,用户可以自定义编写拦截器实现特定的功能
    比如日志的记录,事务的管理,登录的验证等等
    如何实现拦截器
    1.编写一个类,继承AbstractInterceptor,实现拦截方法
    2.在struts自定义包中配置拦截器,配置拦截器栈的顺序,然后让想使用这个拦截器的
    所有action所在的package继承自定义包的name,不再是继承struts-default

  • 相关阅读:
    枚举enum
    C# 位运算符
    运算符&和&&以及|和||区别比较
    LINQ TO JSON
    LINQ 随机排序
    .NET Core LinQ
    CSharp笔记>>>多线程
    3D旋转
    CSharp 之CSkin的使用教程
    CSharp笔记>>>多语言,注册,模态对话框返回值
  • 原文地址:https://www.cnblogs.com/beiluoL/p/10668528.html
Copyright © 2011-2022 走看看