Struts2 学习笔记
1)Strust2是以WebWork为核心,采用拦截器的机制对用户请求进行处理。
2)Struts2框架结构:
3)简单来看整个Struts2的处理过程可以简单的理解为
- 用户的请求发送给对应的Action
- Action接收到请求,执行对应的函数,返回相应的字符串
- Action根据返回的字符串再Struts.xml中找到相应的跳转目录
- Action跳转到对应的显示视窗
即
3)Strust2的控制器组件是Struts2整个框架的核心,由两部分组成:
- 核心控制器SturtsPrepareAndExecuteFilter
- 业务控制器Action
4)核心控制器SturtsPrepareAndExecuteFilter实际上是一个Servlet过滤器,需再Web.xml中配置。
5)Action是由用户定义的业务控制器,由三种实现方式:
- 普通的POJO类,通常包含一个无参数的execute()方法,返回值为字符串类型
- 继承ActionSupport类(含有一个execute()方法和Validate()方法)
- 实现Action接口
6)Struts2使Action不再与任何Servlet API耦合,该框架可以通过ActionContext类来访问Servlet API。
ActionContext提供了读写Servlet API中
- HttpServletResquest
- HttpSession
- ServletContext
中的数据的方法
同时Struts框架还提供了能直接访问Servlet API的接口:
- ServletContextAware--->ServletContext
- ServletRequestAware---->ServletRequest
- ServletResponseAware--->ServletResponse
7)Struts 2配置文件使用package来组织Action,Struts2配置文件中的包就是由多个Action,多个拦截器,过个拦截器的引用组成的集合。
package含有name、extends、namespace、abstract三个属性
- 关于继承(extends):定义包时通常应该继承struts-default包。
- 关于抽象包(abstract=true):该包中不能包含Action定义。
注意:struts.xml是从上往下解析的,所以父包应该再子包的前面定义,如果再同一个包中配置了两个name相同的Action,则后一个会覆盖前一个。
- 关于命名空间(namespace):同一个命名空间不能由同名的Action,不同的命名空间可以由同名的Action,以解决同一个包下多个同名Action的问题。
若没有指定命名空间(namespace="/"),则默认为默认的命名空间。
配置命名空间后,Strust2会按如下的顺序搜索Action:
指定的命名空间----->默认的命名空间-------->报错
8)Struts方法的动态调度:
使用动态方法调用的前提:
struts.xml中配置<constant name="struts.enbale.DynamicMethodInvocation" value="true"/>
actionName!methodName.action
例如:
<a href="product!edit.action?productID=1001"></a>
表示调用productAction下的edit方法来处理请求,并传递一个参数,参数名为productID,值为1001
9)通配符的使用
假若声明如下action:
<package name="product" extends="struts-default" namespace="/">
<action name="*product" class="action.ProductAction" method="{1}">
<result>/{1}.jsp</result>
</action>
</package>
若用户的请求URL为delproduct.action,则匹配模式中的第1个*为del,因此调用的方法为该action下的del方法,返回的页面为del.jsp。
10)根据result元素再struts.xml文件中的位置不同,可以将result分为
- 局部result---->将元素作为<action>元素中的一员
- 全局result---->将元素作为<global-results>元素中的一员
如果一个Action包含了与全局result同名的局部result,则局部会覆盖全局。
搜索顺序:指定Action局部——————>全局
11)result中含有两个属性:name、type。name默认为success、type默认为dispacher。
type常用的类型:
- dispatcher:用于整合JSP技术
- redirect:用于重定向到其他URL、与dispatcher的区别是转发和重定向的区别。redirect属于重定向。Action处理的结果会丢失。
- redirectAction:采用ActionMapperFactory提供的ActionMapper进行重定向,重定向到另一个Aciton
配置redirectAction类型需要actionName、namespace两个参数
12)Struts依靠配置<exception-mapping>元素捕获异常:需指定两个属性:exception和result。
例如:
<action name="login" class="action.loginAction">
<exception-mapping result="error" exception="java.lang.Exception"/>
<result>/ok.jsp</result>
<result name="error">/error.jsp</result>
</action>
则需要在login Action中throw 相关的Exception,则会跳转到error.jsp页面。
异常映射也分全局和局部,分别是
局部:<exception-mapping>元素作为<action>元素的子元素。
全局:<exception-mapping>元素作为<global-exception-mapping>元素的子元素。
同样,前者会覆盖同名的后者。
Struts2 学习笔记的更多相关文章
- Struts2学习笔记⑧
今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...
- Struts2学习笔记①
Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
- Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)
Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...
- Struts2 学习笔记(概述)
Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...
- struts2学习笔记 ⑤
拦截器初探 昨天临睡觉之前看了看拦截器,也在昨天的学习笔记里面胡诌诌了几句,今天就来好好的会会拦截器这个东西.实际上拦截器是一种模块实现的机制<起码我是这么体会的>(至于说书里面说体现了A ...
- [struts2学习笔记] 第二节 使用Maven搞定管理和构造Struts 2 Web应用程序的七个步骤
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40303897 官方文档:http://struts.apache.org/releas ...
- struts2学习笔记之二:基本环境搭建
学习struts2有一段时间了,作为一个运维人员学习的时间还是挺紧张的,写这篇文件为了方便以后复习时使用 环境: MyEclipse 10 tomcat6 jdk1.6 首先建立一个web项目,并 ...
- 【Struts2学习笔记-4】包含其他配置文件
包含其他配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLI ...
- 【Struts2学习笔记-3】常量配置
Struts2常量 配置Struts2常量值有3个地方,1)在struts.properties文件中配置常量:2)在web.xml文件中配置FileterDispatcher指定初始化参数来配置常量 ...
- struts2学习笔记(4)——数据类型转换
回过头来看昨天的那个例子. 在昨天的例子中,只转换了一个Point类,如果想转换多个Point类怎么办呢?在昨天的例子上面做一个小的修改. 首先在input.jsp页面中修改几个输入框. <s: ...
随机推荐
- 【P3398]】仓鼠找sugar
暴力lca 题目 有一种情况肯定不行 较深得lca深度比浅的两个点还深,直接不行 如果可能存在解 则解一定是介中情况 较深的lca一定在另一个lca路径上. 判读呢? 就是用深的lca和浅的lca的两 ...
- 深入理解JVM类加载机制 classloader
转自https://www.cnblogs.com/ygj0930/p/6536048.html
- C/C++获取本机名+本机IP+本机MAC
本机名.IP.MAC都是一些比较常用网络参数,怎么用C/C++获取呢? 研究了两三个小时... 需要说明的都在代码注释里 #include <stdio.h> #include <W ...
- Oracle客户端安装配置
Oracle客户端安装配置.绿色版Oracle客户端配置使用PLSQL 安装Oracle客户端 准备工作,首先下载对应Oracle版本的客户端,这个可以去Oracle官网下载,加压完目录如下: 点击s ...
- lvs+ipvsadm负载均衡
使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均 ...
- 小游戏banner广告流量量主指引
小程序导航 https://wq.xmaht.top
- PHP 输出控制
一.前言 说到PHP输出控制, 在很多框架里面,比如说TP,Yii和Laraval的模版引擎里面都有输出控制函数的阴影,输出控制也叫输出缓冲,说到它的作用有以下几点. 二.内容 1. 输出模版 $va ...
- 【异常】The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
异常错误:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone ...
- openwrt(三) 固件的烧录
导航: 方法1: tftp: 方法2: 在线升级 方法3: BIOS烧录 方法1:TFTP 这应该是最万能的一种方法了.TFTP是一种依靠网口传送数据的一种通信协议,没错,只是传输数据,并不是烧录,所 ...
- Android 使用RxJava实现一个发布/订阅事件总线
1.简单介绍 1.1.发布/订阅事件主要用于网络请求的回调. 事件总线可以使Android各组件之间的通信变得简单,而且可以解耦. 其实RxJava实现事件总线和EventBus比较类似,他们都依据与 ...