文章标题
来源:互联网 发布:不得不说英文软件 编辑:程序博客网 时间: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>
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- BZOJ4337: [BJOI2015] 树的同构(Hash)
- 剑指offer:二叉树中和为某一值的路径
- 图论题目集
- QSS海军蓝色皮肤
- SVN的安装和使用
- 文章标题
- 工厂模式浅述
- virtualbox中ubuntu和windows共享文件夹设置
- @Temporal使用
- Linux系统常用命令
- 菜鸟程序员的自我思想工作-jsp之servlet入门(2)
- ThreadLocal
- SSL2756 2017年10月5提高组T1 独立集(最长上升子序列+二分)
- 二叉树相关面试题总结