文章标题

来源:互联网 发布:不得不说英文软件 编辑:程序博客网 时间:2024/05/22 11:44

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