Struts 2配置详解

Struts 2配置详解

Struts 2基本架构

  • 核心控制器

    • 需要在web.xml中进行配置

    • 对框架进行初始化,以及处理所有的请求

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

      Struts 2.0版本的核心控制器为org.apache.struts2.dispatcher.FilterDispatcher

  • Action

    • 创建Action

      • 实现Action接口
      • 继承ActionSupport类
    • Result

      • 实现对结果的调用
      • result元素的值指定对应的实际资源位置
      • name属性表示result逻辑名

      配置Action和Result

      ...
      <struts>
          <package name="default" namespace="/" extends="struts-default">
              <action name="login" class="cn.houserent.action.LoginAction">  
                  <result name="success">/page/manage.jsp</result>
                  <result name="input">/page/login.jsp</result>
                  <result name="error">/page/error.jsp</result>
              </action>
          </package>
      </struts>

Struts 2配置文件

  • struts.xml

    • 核心配置文件,主要负责管理Action

    • 通常放在WEB-INF/classes目录下,在该目录下的struts.xml文件可以被自动加载

      ...
      <struts>
      	<constant name="" value=""/>
          	<package name="" namespace="" extends="">
          		<action name="" class="">
              		<result name=""></result>
              	</action>
          	</package>
      </struts>
    • constant元素

      • 配置常量,可以改变Struts 2框架的一些行为

      • name属性表示常量名称,value属性表示常量值

        ...
        <struts>
        	<constant name="struts.i18n.encoding" value="UTF-8"/>
            	<package name="" namespace="" extends="">
            		<action name="" class="">
                		<result name=""></result>
                	</action>
            	</package>
        </struts>
    • package元素

      • 包的作用:简化维护工作,提高重用性

      • 包可以“继承”已定义的包,并可以添加自己包的配置

      • name属性为必需的且唯一,用于指定包的名称

      • extends属性指定要扩展的包

      • namespace属性定义该包中action的命名空间,可选

        ...
        <struts>
        	<constant name="" value=""/>
        	<package name="default" namespace="/" extends="struts-default">
        	    	<action name="" class="">
        	        	<result name=""></result>
        	        </action>
            	</package>
        </struts>
    • struts-default.xml

      • Struts 2默认配置文件,会自动加载
      • struts-default包在struts-default.xml文件中定义
    • struts-plugin.xml

      • Struts 2插件使用的配置文件
    • 加载顺序

      1. struts-default.xml
      2. struts-plugin.xml
      3. struts.xml

Struts 2 Actino

  • Action的作用

    • 封装工作单元

    • 数据转移的场所

    • 返回结果字符串

      public class HelloWordAction implements Action{
          private String name="";
          private String message="";
          public String execute(){
              this.setMessage("Hello,"+this.getName()+"!");
              return SUCCESS;
          }
          //...省略getter、setter方法
      }
    • method属性

      • 实现Action中不同方法的调用

      • 特点

        • 避免动态方法调用的安全隐患
        • 导致大量的Action配置
        <action name="login" class="cn.hoserent.action.UserAction" method="login">
        	......
        </action>
        <action name="register" class="cn.hoserent.action.UserAction" method="register">
        	......
        </action>
      • 动态方法调用

        • 作用:减少Action数量

        • 使用:actionName!methodName.action

        • 禁用:将常量 struts.enable.DynamicMethodInvocation设置为false

          /user!login.action --> 调用UserAction的login()方法

          public class UserAction implements Action{
              ...
              public String login(){...}
              public String register(){...}
          }
          <action name="user" class="cn.hoserent.action.UserAction">
              <result name="login">/page/manage.jsp</result>
          	......
          </action>
    • 通配符(*)

      • 作用:另一种形式的动态方法调用

        <action name="*User" class="cn.hoserent.action.UserAction" method="{1}">
        	<result>/page/{1}_success.jsp</result>
            <result name="input">/page/{1}.jsp</result>
        </action>
        <!--示例-->
        页面表单-->/loginUser.action
        struts.xml-->
        	method-->method="login"
        	/page/login_success.jsp
        	/page/login.jsp
    • 配置默认Action

      • 没有Action匹配请求时,默认Action将被执行

      • 通过< default-action-ref …/>元素配置默认Action

        <struts>
        	<default-action-ref name="defaultAction"/>
           	<package name="default" extends="struts-default">
                	<!--省略class属性,将使用ActionSupport类-->
            		<action name="defaultActon">
                    	<!--如果请求的Action不存在,页面跳转到error-->
                		<result>error.jsp</result>
                	</action>
            	</package>
        </struts>

Result常用结果类型

  • 常用结果类型

    • dispatcher类型

      • 默认结果类型,后台使用RequestDispatcher转发请求
    • redirect类型

      • 后台使用的sendRedirect()将请求重定向至指定的URL
    • redirectAction类型

      • 主要用于重定向到Action
      <action name="*User" class="cn.houserent.action.UserAction" method="{1}">
      	<result name="success" type="dispatcher">/page/{1}_success.jsp</result>
          	<result name="input">/page/{1}.jsp</result>
          	<result name="error">/page/error.jsp</result>
      </action>

Result配置动态结果

  • 动态结果

    • 配置时不知道执行后的结果是哪一个,运行时才知道哪个结果作为视图显示给用户

      public class UserAction extends ActionSupport{
          private String nextDispose;
          public String login(){
              ...
              if(user.isManager()){
                  nextDispose = "manager";
              }else{
                  nextDispose = "common";
              }
              return SUCCESS;
          }
          public Stirng getNextDispose(){
              return nextDispose;
          }
          ...
      }
      <struts>
          <package name="default" extends="struts-default">
          	<action name="login" class="cn.hoserent.action.UserAction" method="login">
                  <!--${nextDispose}表示调用Action中的getNextDispose方法,获取导航信息-->
      		<result type="redirectActino">${nextDispose}</result>
                 	<result name="error">/page/error.jsp</result>
      	</action>
              <action name="common" class="cn.hoserent.action.CommonUserAction">
              ...
              </action>
              <action name="manage" class="cn.hoserent.action.ManagerAction">
              ...
              </action>
          </package>
      </struts>

全局结果

  • 全局结果

    • 实现同一个包中多个action共享一个结果

      <struts>
          <default-action-ref name="defaultAction"/>
          <package name="default" extends="struts-default">
              <global-results>
              	<result name="error">/page/error.jsp</result>
              	<result name="login" type="redirect">/page/login.jsp</result>
              </global-results>
          </package>
      </struts>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值