文章标题

一、struts2 简介

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

二、工作原理

客户端通过HttpServletRequest向Servlet容器提交一个请求,这个请求会经过一系列的过滤器,最终被struts核心过滤器StrutsPrepareAndExecuteFilter过滤。核心过滤器过滤以后,调用访问ActionMapping,决定是否调用某一Action,如果用户请求的是jsp页面或者是其他静态资源,不会调用某Action,否则ActionMapping会将控制权委派给ActionProxy,也叫Action代理,此时Action代理会通过一个ConfigurationManager也就是配置管理器对象加载struts核心配置文件,也就是struts.xml。如果在struts.xml找到需要创建的Action,ActionProxy会创建一个Action Invocation实例,Action Invocation包括一系列的拦截器和Action,先顺序执行一些列的拦截器,然后执行Action处理,返回一个结果,通过Result返回一个视图或者调用另外某个Action。当返回这个视图以后,将之前执行过的拦截器反向执行一遍,然后通过response响应客户端的请求。

三、操作步骤

1、在pom.xml中引入如下依赖

<!-- struts2 mvc -->
<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-core</artifactId>
  <version>2.3.32</version>
</dependency>

2、配置WEB-INF/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>

3、创建一个struts.xml文件,src/main/resources 目录下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
  <package name="default" extends="struts-default">
    <!-- 请求 index.action 跳转到 index.jsp -->
    <action name="index">
      <result>/index.jsp</result>
    </action>

    <!-- 请求 hello.action 访问HelloAction#execute 跳转到sucess.jsp -->
    <!--
    action节点method属性      默认值 execute
    action节点class属性       默认值 com.opensymphony.xwork2.ActionSupport
    result节点name属性        默认值 success
    result节点type属性        默认值 dispatcher
    -->
    <action name="hello" class="com.mipo.controller.HelloAction" method="execute">
      <result name="success" type="dispatcher">/success.jsp</result>
    </action>
  </package>
</struts>

3.1、常规方式配置让一个Action处理多个请求

    <!-- General Method -->
    <action name="savePersonAction" class="com.mipo.controller.PersonAction" method="savePerson">
      <result name="save" type="dispatcher">/person/save.jsp</result>
    </action>
    <action name="modifyPersonAction" class="com.mipo.controller.PersonAction" method="modifyPerson">
      <result name="modify" type="dispatcher">/person/modify.jsp</result>
    </action>
    <action name="removePersonAction" class="com.mipo.controller.PersonAction" method="removePerson">
      <result name="remove" type="dispatcher">/person/remove.jsp</result>
    </action>
    <action name="triggerExceptionAction" class="com.mipo.controller.PersonAction" method="triggerException" />

3.2、通配符方式配置让一个Action处理多个请求

    <!-- Wildcards Method -->
    <action name="*PersonAction" class="com.mipo.controller.PersonAction" method="{1}Person">
      <result name="{1}" type="dispatcher">/person/{1}.jsp</result>
    </action>

3.3、动态方法(DMI)调用方式配置让一个Action处理多个请求

    ……
    <!-- 启用动态方法调用 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
    ……
    <package strict-method-invocation="true">
    ……
    <!-- Dynamic Method Invocation -->
    <action name="personController" class="com.mipo.controller.PersonAction" method="execute">
      <result name="success" type="dispatcher">/person/success.jsp</result>
      <result name="save" type="dispatcher">/person/save.jsp</result>
      <result name="modify" type="dispatcher">/person/modify.jsp</result>
      <result name="remove" type="dispatcher">/person/remove.jsp</result>
      <allowed-methods>savePerson, modifyPerson, removePerson, triggerException</allowed-methods>
    </action>

4、Result 的几种方式

4.1、dispatcher(默认值)

转发到某具体JSP页面,此处只能是JSP路径,不能是action地址。

<result>/main.jsp</result>

4.2、redirect

重定向到某具体JSP页面,此处可以是JSP页面,也可以是action地址。

<result type="redirect">/main.jsp</result>

4.3、chain

转发到某action

<result type="chain">
    <param name="actionName">savePersonAction</param>
</result>

4.4、redirectAction

重定向到某action

<result type="redirectAction">
    <param name="actionName">savePersonAction</param>
</result>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值