一、Struts2入门
1. 概念
什么是Struts2
Struts2 是一个用来开发 MVC 应用程序的框架.
它提供了 Web 应用程序开发过程中的一些常见问题的解决方案:
对页面导航活动进行管理
对来自用户的输入数据进行合法性验证
统一的布局
可扩展性
国际化和本地化
支持 Ajax
表单的重复提交
Struts2 VS Struts1
Struts2与Struts1 相比,在体系结构方面更优秀,具体表现在类更少,更高效,扩展更容易等。
struts2 不是从 Struts1 扩展而来的, 说它是一个换了品牌标签的 WebWork 更合适。
2. 程序
Struts2 核心就是一个 Filter,该Filter会对所有的请求进行拦截(/*)
StrutsPrepareAndExecuteFilter
StrutsPrepareFilter + StrutsExecuteFilter
Struts2 将所有的请求拦截下来,具体去访问哪个java类的方法需要读取配置文件 l
l 文件需位于工程的类路径下
实现一个 Struts 的 HelloWorld 程序
1) 将 %struts2-blank例子%\WEB-INF\lib 目录下所有jar包拷贝至 webproject\WEB-INF\lib 中
2) 将%struts2-blank例子%\WEB-INF\l 中的配置
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
拷贝至webproject/l 中
3) %struts2-blank例子%\将WEB-INF\classes 下的l 文件拷贝至工程src下
清空 <struts></ struts> 标签之间的内容
4) 新建 Action 实例, HelloWorldAction.java
Action可以不必是实现任何接口,它是一个普通java类(pojo),从这点可以看出 Struts2 是非侵入式设计,Action可以不依赖struts和Servlet 而独立存在
Action中至少需要定义一个方法,且方法的返回值类型必须为String
public String sayHello() {
return "success";
}
5) 在l 对 Action进行配置
<struts>
<!—package 用户配置action的组织包名,用于对Action进行归类 -->
<package name="first" namespace="/first" extends="struts-default">
<!—配置当前action 访问路径,以及对应的action类和调用的方法 -->
<action name="HelloWorld"
class="cn.itcast.action.HelloWorldAction"
method="sayHello" >
<!— 配置处理结果,继承struts-default包,默认结果处理类型为 dispatcher -->
<result name="success">/WEB-INF/hello.jsp</result>
</action>
</package>
</struts>
6) 在 WEB-INF 下新建jsp页面hello.jsp
hello
动手练习: 用 struts2 实现最简单的mvc
二、Struts2 细节
1. package 元素
配置action的组织包
name: 配置包名,用于被继承
namespace: 配置访问路径
以 /a/b/c/action 为例 搜索action的顺序为 /a/b/c -- /a/b -- /a -- /
extends: 指定继承的包
2. action 元素
1) name属性
配置action的访问名称 后缀默认为 action和”” 可以通过常量进行配置
<constant name="sion" value="do"></constant>
2) class属性
配置action对应的java类,必须为完整类名
如果继承struts-default 包,默认class 为ActionSupport,该类的 execute方法默认返回 success
我们在写 Action 类时通常会选择继承ActionSupport,也就自动继承了 execute 方法,同时可以使用父类定义的常量 SUCCESS、ERROR 等
3) method属性
配置action的访问方法名,默认访问execute方法
4) 通配符映射
一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系
通配符的映射规则
● 若到多个匹配, 没有通配符的那个将胜出
● 若指定的Action不存在, Struts 将会尝试把这个URI与任何一个包含着通配符 * 的Action名及进行匹配
● 若 Struts 到的带有通配符的匹配不止一个, 最后一个匹配将胜出
● 被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…
{0} 匹配整个 URI
● * 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / el表达式获取map的值字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.
例:
<action name="*_add" class="cn.itcast.action.Girl" method="add"></action>
匹配路径 Boy_add.action Girl_add.action
<action name="Boy_*_*" class="cn.itcast.action.Boy" method="{1}">
<result name="success">
<param name="location">/WEB-INF/jsp/{2}.jsp</param>
</result>
</action>
Boy_add_delete 会调用 Boy的add方法, 转发给 delete.jsp
5) 动态方法调用
通过 url 动态调用 Action 中的方法
<action name="Boy" class="cn.itcast.action.Boy">
/strutsdemo/Boy!add.action 会调用Boy类的add方法
默认情况下, Struts 的动态方法调用处于激活状态, 若想禁用该功能, 则可以在 l 文件中配置常量
3. Action 类
概念:
action: 应用程序可以完成的每一个操作(用户的一个动作) 例如: 显示一个登陆表单,保存商品信息
Action类:Struts2中的Action是pojo(Plain Old Java Objects一个普通的java类)的,可以定义属性和方法,但需要遵循一些规则:
● 属性的名字必须遵守与 JavaBeans 属性名相同的命名规则. 属性的类型可以是任意类型. 从字符串到非字符串(基本数据库类型)之间的数据转换可以自动发生
● 必须有一个不带参的构造器
● 至少有一个供 struts 在执行这个 action 时调用的方法,方法的返回值为String类型(即视图名称)
● 同一个 Action 类可以包含多个 action.
● Struts2 会为每一个 HTTP 请求创建一个新的 Action 实例
4. result 元素
配置 action 的执行结果
name: 配置result结果名称,根据action执行方法的返回值决定那个 result
默认为 success
type: result 结果类型,默认为 dispatcher 类型
常用的result类型
● dispatcher
dispatcher 结果类型是最常用的结果类型, 也是 struts 框架默认的结果类型
用于将控制权转发给web应用中的其他资源
默认参数:location 用于指定转发的资源路径,通常为一个jsp页面
● redirect
用于将响应重定向到另一个资源
参数:
location : 指定重定向的资源路径
parse : 指定是否将location的值视为一个 OGNL 表达式来解析 默认值为true
● redirectAction
用于将响应重定向给另一个Action
参数:
actionName : 指定目标action, 该属性为默认属性
namespace : 指定目标 action 所在的 package
● chain
用于构成一个 Action 链,前一个action将控制权转发给下一个action,并且前一个action的状态在后一个action中继续保持
参数:
actionName : 指定目标action, 该属性为默认属性
namespace : 指定目标 action 所在的 package
method :指定调用action的方法 , 默认调用 execute 方法
● httpheader
用于将把一个 HTTP 状态发送到浏览器
默认参数 status : 指定状态码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论