美文网首页
Struts2笔记

Struts2笔记

作者: Kylin824 | 来源:发表于2018-02-11 13:14 被阅读0次

    3.1.1 - Model1和Model2

    Model1与Model2很不同,Model2基于MVC
    

    3.1.2 - MVC思想及其优势

    Model、View、Controller三个部分以最少的耦合协作,使应用具有较好的可扩展性和可维护性
    

    3.2 3.3 - 创建第一个struts2项目

    1. 下载Struts2包

    2. IDEA创建Struct2项目,将Struts2的lib文件夹下的几个必须的包复制到WEB-INF/lib路径下

    3. 编辑web.xml配置文件,配置Struts2的核心Filter,使拦截所有用户请求

      <filter>    
      <filter-name>struts2</filter-name>    
      <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
      </filter>
      
      <filter-mapping>    
      <filter-name>struts2</filter-name>    
      <url-pattern>/*</url-pattern>
      </filter-mapping>
      
    4. 创建登录的Action类:LoginAction

    5. 创建登录页面:login.jsp;登录成功页面:welcome.jsp

    6. 配置struts.xml,配置LoginAction来处理login.jsp的请求

    3.4.1 - 常量配置:

    Struts2按如下搜索顺序加载常量:

    struts-default.xml -> struts-plugin.xml -> struts.xml -> struts.properties -> web.xml ,这些配置文件中都可以配置struts常量

    struts2常量对整个应用起作用,也被称为struts2属性

    3.4.2 - 包含其他配置文件

    为避免struts.xml文件过于庞大,可分为多个配置文件,然后在struts.xml中通过include导入

    3.5.1 - action接口和actionsupport基类

    使用Action来封装HTTP请求参数,因此Action类中应包含与请求参数对应的属性,并为属性提供对应的setter和getter方法,Action类中的execute()方法用于处理用户请求并返回result

    struts2只提供了Action接口

    public interface Aciton
    {
      public static final String ERROR = "error";
      public static final String INPUT = "input";
      public static final String LOGIN = "login";
      public static final String NONE = "none";
      public static final String SUCCESS = "success";
      
      public String execute() throws Exception;
    }
    

    另外struts2为Action接口提供了一个实现类:ActionSupport,该类中提供了许多默认方法,自定义的Action类只需继承ActionSupport类,大大简化开发

    3..5.2 - Action访问Servlet API

    Struts2提供了ActionContext类,可通过该类访问Servlet API,获得request、session、application等对象

    3.5.3 - Aciton直接访问Servlet API

    除了通过ActionContext访问,Struts2还提供以下几个接口使直接访问Servlet API:

    ServletContextAware  实现该接口的Action可直接访问ServletContext实例
    ServletRequestAware  实现该接口的Action可直接访问HttpServletRequest实例
    ServletResponseAware 实现该接口的Action可直接访问HttpServletResponse实例
    

    3.5.4 - 使用ServletActionContext工具类访问Servlet API

    3.5.2的ActionContext需要实例化对象,3.5.3需要实现接口,通过ServletActionContext工具类不须实例化,直接调用对应方法获取API对象,更加简单

    3.6 - 配置Action

    在struts.xml中配置Action,目的是完成用户请求和Action之间的对应关系,让Struts2知道哪个Action处理哪个请求

        <package name="com" namespace="/lky" extends="struts-default">
            <action name="login" class="com.LoginAction">
                <result name="success">/welcome.jsp</result>
                <result name="login">/login.jsp</result>
                <result name="error">/error.jsp</result>
            </action>
        </package>
    

    3.6.1 - 包package 和 命名空间namespace

    Action必须放在包<package.../>定义下,每个package元素配置一个包

    通过为包指定namesapce属性为包下面的所有Action指定共同的命名空间,若没指定则处于默认包空间下

    命名空间主要为解决同名Action发生冲突,不同命名空间内可以有同名Action

    指定了命名空间后,Action处理的URL应变为 命名空间+Action名

    extends 继承 struts2源码中的struts-default抽象包,该包下包含了大量结果类型定义、拦截器定义、拦截器引用定义等,是配置普通Action的基础,开发者定义的package通常应该继承struts-default包

    3.6.2 - action的基本配置

    name属性:指定Action的名字,也代表Action所处理的请求的URL
    
    class属性:指定该Action的实现类,非必需,若不指定class则默认使用系统的ActionSupport类
    
    method属性:指定Action类中处理请求的方法,若不指定则默认使用execute()方法
    
    result元素:配置Action与视图资源(JSP)的关系,Action处理完请求后,将指定的视图资源呈现给用户,不同result对应不同视图,result中需指定name属性
    

    3.6.3 - 使用action的动态方法调用DMI

    作用:实现form表单提交到action的不同方法

    例子:原本<form action="login" method="post" >是提交到名为login的Action的默认方法处理,

    现在<form action="login!regist" method="post" >则可以提交到名为login的Action的regist()方法处理

    设置DMI应在struts.xml中配置以下属性

    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <global-allowed-methods>regist</global-allowed-methods>     
    

    3.6.4 - 指定method属性

    对于一个Action需要处理多个控制逻辑,可将Action配置成多个逻辑Action

    如下,第一个配置action默认使用execute()方法控制,第二个配置action使用regist()方法控制

    <action name="login" class="com.LoginAction" >
        <result name="success">/welcome.jsp</result>
        <result name="login">/login.jsp</result>
        <result name="error">/error.jsp</result>
    </action>
    <action name="login" class="com.LoginAction" method="regist">
        <result name="success">/welcome.jsp</result>
        <result name="login">/login.jsp</result>
        <result name="error">/error.jsp</result>
    </action>
    

    使用通配符

    以下的配置很大部分相同,代码冗余,使用通配符简化如下

    <action name="*Action" class="com.LoginAction" method="{1}">
        <result name="success">/welcome.jsp</result>
        <result name="login">/login.jsp</result>
        <result name="error">/error.jsp</result>
    </action>
    

    *Action定义为:只要用户请求的URL时*Action的模式,都可以使用该Action来处理,method属性{1}表示该值为name属性值中第一个*的值

    因此若用户请求form提交的url为loginAction,则调用Action类中的login()方法处理,若提交的action为registAction,则调用regist()方法处理

    除此之外,class、<result.../>也可以使用{N}来代表前面第N个星号(*)所匹配的子串

    3.6.5 - 配置默认Action

    通过<default-action-ref.../>元素配置,当用户请求找不到对应的Action时,默认的Action会处理用户请求

    3.6.6 - 配置默认Action的默认处理类

    通过<default-class-ref.../>元素配置,当用户请求找不到对应的Action时,默认的Action会执行定义的默认处理类来处理用户请求

    3.7.1 - 理解处理结果

    Action处理完用户请求后,并未直接将请求转发到具体的物理视图资源,而是返回一个逻辑视图(即一个普通字符串),由Struts2框架通过这个字符串去把请求转发给对应的视图资源

    3.7 2 - 配置结果

    为了完成Action返回的普通字符串与物理视图资源的映射,需要在struts.xml的<action.../>中配置<result.../>元素

    <result name="success" type="dispatcher">/welcome.jsp</result>
    

    <result.../>元素下有两个属性:

    • name:指定所配置的逻辑视图名,与Action返回的字符串对应,省略则默认为success

    • type:指定结果类型,省略则默认为dispatcher

    3.7.3 - struts2支持的结果类型(type)

    chain:Action链式处理
    dispatcher:-> 将请求forward到指定的视图资源,不会丢失请求参数
    freemarker:用于指定使用FreeMarker模板作为视图
    httpheader:用于控制特殊的HTTP行为
    redirect:-> 将请求redirect到指定的视图资源,重定向会丢失所有的请求参数、属性和Action处理结果
    redirectAction:-> 将请求redirect到指定的视图资源其他Action
    stream:用于向浏览器返回一个InputStream(一般用于文件下载)
    velocity:用于指定使用Velocity模板作为视图
    xslt:用于与XML/XSLT整合
    plainText:用于显示某个页面的原始代码(用得少)

    3.7.7 - 动态结果

    通过在<result.../>的name中使用表达式{N},可实现动态返回视图界面

    3.7.8 - action属性值决定物理视图资源

    3.7.9 - 全局结果

    <global-result>
        <result...>...</result>
    </global-result>
    

    全局结果对所有的Action对起作用

    3.7.10 - 使用PreResultListener:

    PreResultListener监听器可以在Action完成控制处理之后,系统转入实际的物理视图之前被回调

    添加PreResultListener监听器的方法:

    通过ActionIovocation(由ActionContext.getContext().getActionInvocation()方法获得)的addPreResultListener()方法完成

    相关文章

      网友评论

          本文标题:Struts2笔记

          本文链接:https://www.haomeiwen.com/subject/ilvktftx.html