本文对Struts2进行简略梳理,基础的内容请看参考部分。
开发流程
Struts2的开发流程为:1.Jar包添加到项目的classpath当中,web项目就是添加到WEB-INF的lib目录下。2.配置StrutsPreparedAndExecuteFilter过滤器和过滤器。3.源码目录下新建Struts.xml文件,在其中定义Action对象,这些配置信息需要位于一个继承自struts-default的包中。4.创建返回结果页面。
Action对象
Action用于对Http请求进行处理,他是一个接口,我们一般不直接实现这个接口,而是继承自ActionSupport。表单提交的数据会自动注入到Action对象中相对应的属性,只要属性有Setter方法。查找返回页面时,根据方法返回的字符串来匹配result标签中定义的name名即可,如果不指定,name默认为success。静态Action默认执行方法的execute方法,动态Action可以定义多个方法,使用ActionName!funName的方法调用。可以使用通配符*\来匹配0个或者多个字符,\是转义符。
Struts2的开发模式
和ServletAPI的交互:Struts2提供了Map类型的request、session、application等对象,其访问使用方法为:
对象 |
获取方法 |
备注 |
ActionContext |
getContext() |
|
Request |
ActionContext.getContext.get(“request”) |
|
Session |
ActionContext的get方法和直接获取方法getSession() |
|
Application |
ActionContext的get方法和直接获取getApplication |
|
域模型:域模型是将某一领域的实体封装成实体对象,http请求参数可以注入到实体对象的属性中。使用表单字段名为user.name这样的方法来进行注入。
驱动模型:Action实现了ModelDriven接口后,可以用方法getModel获取实体模型,进而对其进行操作,省去了域模型中的注入方法。
OGNL表达式
OGNL表达式是一种表达式语言,他能访问JavaWeb中的数据。OGNL的上下文中存放多种元素,根元素可以直接访问,其他元素使用#开头访问。例如#user.name或者book.name等。值栈是OGNL的上下文,值栈及其他值获取及使用方法为:
对象 |
获取 |
代码 |
值栈 |
直接获取 |
${user.name} |
Application中对象 |
#application.name |
|
Request中对象 |
#request.name |
|
Session中对象 |
#sesssion.name |
|
Parameters |
#parameters.name |
|
不指定范围的att |
#attr.name |
|
访问静态方法属性 |
@com.a.bean@name; @com.a.bean@getName(); |
需要配置开发模式,在struts.xml下:<const name=”struts.devMode” value=”true”/>
|
访问数组 |
List、set、map集合 |
List[0]、map.key、map.keys、map.values |
投影与选择 |
List.{name}投影name列 List.{?#this.age>20}选择 |
其中?号代表所有元素,^代表满足条件的第一个元素,$代表满足条件的最后一个条件。 |
Struts2的标签库
OGNL结合Struts2标签库才能使用,下面列出Struts2的标签(数据,控制,表单)。Struts2使用默认样式输出Struts2标签的表现,可以修改配置文件使其使用更为使用的模板输出html表现。
标签 |
作用 |
实例 |
数据标签property、set、a、param、action、push、date、include、url |
Action用于执行action请求。Push用于将值压入栈中。 url用于映射Action的URL地址。 |
<s:set var=”name” value=”value” scope=”request”></s:set> <s:property default=”null” value=”#request.name”/>
|
控制标签if、elseif、else、iterator、 |
|
<s:if test=”true”>aa</s:if> <s:elseif test=”true”></s:elseif> <s:else></s:else> |
表单标签form、hidden、textfield、password、radio、select、textarea、checkbox、checkboxlist、submit、reset |
|
|
拦截器类似Servlet的过滤器,其在Action调用处理前调用处理。数据验证机制用于对数据进行自动验证。
参考文章
1. Struts的简单使用
2. Struts+Spring+Hibernate整合的简单实例
3. 理解Struts
4. Struts2工作流程理解
5. Struts2的配置-1.关于package和action
6. Struts2的配置-2.配置异常、视图、拦截器、验证器