struts2系统知识
Struts2
第一篇:Struts2入门
1。概念:Struts2是一个雅致的,可扩展的,用来建立企业级java web 应用程序的框架
2. struts2应用的平台要求:
* java 5
* servlet API 2.4
* JSP API 2.0
3.struts2必备的架包:
struts2框架的核心类库:struts2-core-2.x.x.jar
xwork类库:xwork-2.x.x.jar
ognl-2.x.x.jar:对象图导航语言,Struts2框架使用的一种表达式语言
freemarker-2.xx.jar:struts2的ui标签的模板使用freemarker编写
commons-logging-1.1.x.jar:asf出品的日志包
commons-fileupload.jar和common-io.jar:文件上传包
4。struts2的环境配置:
4.0 添加struts2必须的架包
4.1 在web.xml中配置启动struts2框架的过滤器
此Filter的init()方法中会读取classpath下的struts.xml(默认配置文件)完成初始化操作。
struts2默认只处理后缀为.action的请求
4.2 提供struts2核心配置文件struts.xml到classpath下,主要用来配置action映射,result映射,拦截器,常量等
4.3 修改struts2的配置文件
创建action类
4.4 创建jsp页面
第二篇:Struts2的Action类配置和使用
1。概念: Action类用来封装客户提交的请求数据,调用业务逻辑类处理请求并返回一个string类型的结果码
2。对action类的要求:继承ActionSupport
ActionSupport类实现的接口
Validateable接口:提供了一个validate()方法用于校验表单数据。
ValidationAware接口:提供了一些消息处理的方法。
LocaleProvider接口:提供一个getLocale()方法获取语言/地区信息。
TextProvider接口:提供一系列的getText()方法来获取国际化信息资源。
3。 概念:Struts2框架是通过拦截器来提取请求参数数据,并将数据封装到相应的action实例中
3.1 action中的两种传递方式:
值传递Field-driven:直接在Action中定义各种Java基本类型(String,Date类型的属性),这些属性名和页面表单输入域的名字一一对应
模型驱动传递Model-driven:通过领域模型javaBean来进行数据传递,把页面表单的数据直接封装到这个javaBean中
3.2 一个action多个请求处理方法:
a.每个请求配置一个action
<action name="user_login" class="" method="login">
b。使用通配符针对同一类型的请求配置一个action
用*来匹配0到多个字符
<action name="user_*" class=".action" method={1}>
c.动态方法调用
3.3 action 与jsp 之间的动态调用方法:
jsp传递数据到action中:jsp页面中的参数数据经过拦截器时,会自动封装到action中相应名称的属性中
Action传递数据到jsp页面中:ActionContext类提供了几个常用的方法获取三个Map对象,这三个Map对象分别用来替代HttpServletRequest.HttpSession.ServletContext.相当于操作三个Servlet对象
3.4 Action类访问Servlet ApI:Struts2中提供了ServletActionContext用来访问Servelt API
4.result的配置:
4.1 一些概念性知识点的使用:a.com.opensymphony.xwork2.Result接口代表Action执行后的结果,每一个action都返回一个String类型的结果码,用于从配置 文件struts2中配置的result元素列表中选择对应的result
b.Struts2提供了多种Result类型的实现:
ServletDispatcherResult:servlet转发,默认使用
ServletRedirectResult:servlet重定向
ServletActionRedirectResult:重定向到另一个action中
FreemarkerResult:用FreeMarker模板引擎呈现视图
4.2 Strut2通过《result>标记来配置逻辑视图名和物理视图资源之间的映射关系
a. <result>的常用属性:name:指定result的逻辑名,不指定时,默认为success
type:指定result的类型,默认是请求分派器
redirect(重定向),
redirectAction(重定向到另一个action)
freemarker(使用freemarker呈现视图)
b.
局部result和全局result;
<result />作为<action....>元素的子元素配置,只对当前action有效
全局result
<result..../>作为<global-rsults....>元素的子元素配置,对当前package内的所有Action有效
代码提示:
<package>
<!--全局变量-->
<global-results>
<result name="index>/index.jsp</result>
<global-results>
<!--局部变量-->
<action name="user_*" class="com.entity.userAction">
<result name="success">success.jsp</result>
</action>
</package>
c。在result中配置参数;
<result name="toUpdate">/user/login?password=${password}</result>
d.从一个action跳转到另一个action;
d1:在同一个包下面:<result type="redirectAction">user_add.action</result>
d2:不在同一个包下面:<result type="redirectAction">
<param name="actionName">user_add.action</param>
<param name="namespace">/user</param>
<param name="id">${id}</param> <!--传递参数--> <!--记得此参数必须在action里面有get,set方法-->
</result>
5。异常的处理:
struts2通过拦截器(ExceptionMappingInterceptor)对action中抛出的异常进行捕获,拦截器在捕获到异常后,会将exception和exceptionStatck两个对象保存到值栈中
6。为应用指定多个配置文件:(团队开发时很有用处)
struts2中可以将一个配置文件分解成多个配置文件,那么必须在struts。xml中包含其他配置文件
<struts>
<include file="struts_user.xml"></include>
<include file="struts_book.xml"></include>
</struts>
7.基于注解的action配置(没用过)
7.1使用注解要在classpath中添加如下插件包:struts2-convention-plugin-2.1.8.1.jar
7.2常用注解:
Namespace:指定命名空间。
ParentPackage:指定父包。
Result:提供了Action结果的映射。
Results:“Result”注解列表
ResultPath:指定结果页面的基路径。
Action:指定Action的访问URL。
Actions:“Action”注解列表。
ExceptionMapping:指定异常映射。
ExceptionMappings:
InterceptorRef:拦截器引用。
InterceptorRefs:
7.3注解例子:
@Namespace("/account")
@ParentPackage("struts-default")
@Results({
@Result(name="success",location="/success.jsp"),
@Result(name="error",location="/error.jsp")})
public class LoginAction extends ActionSupport {
@Action("login")
public String login() throws Exception{
if("test".equals(loginname)){
return SUCCESS;
}else{
return ERROR;
}
}
第三篇 OGNL和标签库
1。Struts2中的OGNL:首先要映入标签:<%@taglib uri="/struts-tags" prefix="s"%>
a.概念:是一种功能强大的表达式语言,通过一种语法,遍历整个对象的结构图,实现对象属性类型的转换等功能
b. 使用方式:ongl上下文实际上就是一个map对象,由ognl.OgnlContext类表示,里面存放很多个JavaBean对象,它有一个上下文根对象
struts2的标签库都是使用ongl表达式来使用的
<s:property value=""/>
c.工作原理:struts2将ActionContext设置为ongl上下文,并将值栈作为ognl的根对象放置到actionContext中
struts2总是把action实例放置在栈顶,所以ongl在引用action中的属性时可以不加
d.调用方法法:
d1. 调用普通方法
对象名.方法()
d2. 调用静态方法和静态属性:
添加如下常量配置
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
@class@field
@class@method(args)
@@max(2,5) 访问java.lang.Math类中的静态方法
d3.调用构造方法
new java.util.ArrayList()
e.Struts2的其他对象
Struts2还提供了一些命名对象,这些对象没有放置在值栈中,而是直接直接放置在ActionContext中(须使用#来访问),这些对象都是Map类型
名称 作用 例子
parameters 包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameter("id")
request 包含当前HttpServletRequest的属性(attribute)的Map #request.userName相当于request.getAttribute("userName")
session 包含当前HttpSession的属性(attribute)的Map #session.userName相当于session.getAttribute("userName")
application 包含当前应用的ServletContext的属性(attribute)的Map #application.userName相当于application.getAttribute("userName")
attr 用于按pageContext > request > session > application顺序访问其属性(attribute)
2。Struts2常用标签
常用标签:用于控制和执行页面呈现
a.数据标签:
property 用于输出值栈中的对象的属性值。
set 将一个值赋给指定范围内的变量。
push 把一个值压入值栈。
param 为其它标签提供参数。用作其它标签的子标签。
bean 用于实例化一个JavaBean对象。
action 在JSP页面直接调用action
include 用于包含一个其它资源。相当于JSP的<jsp:include>
url 用于创建一个URL。类似于JSTL的<c:url>
i18n 用于将指定的基名资源包放入到值栈中。
text 用于从资源包中获取指定key的文本消息。
date 格式化输出日期值。
debug 用于调试。输出值栈中的内容。
b.控制标签:
if/elseif/else 用于逻辑控制
iterator 用于迭代一个集合,集合可以是:Collection、Map、Enumeration、Iterator或数组。
status属性:它是一个IteratorStatus实例。它的有用方法:getCount()、getIndex()、isEven()、isOdd()、isFirst()、isLast()
append 将不同的迭代器组合在一起,使一个迭代器完成后转移到下一个迭代器中继续迭代。
merge 合并迭代器
generator 根据separator属性指定的分隔符,将val属性值进行拆分,生成一个迭代器,压入值栈的栈顶。
subset 截取一个迭代器的子集。
sort 根据comparator属性指定的比较器对集合进行排序。
UI标签:用于构建用户界面,使用一个UI标签时必须指定标签的主题,struts2内置了4个主题:simple、xhtml、css_xhtml、ajax
a.表单标签:
form 表单
textfield 文本框
password密码框
textarea 文本域
select 列表框
optgroup 作为select标签的子标签使用,用于创建选项组。
radio 一组单选按钮
checkbox 单个复选框
checkboxlist 一系列的复选框
doubleselect 级联的列表框
combobox 一个文本输入控件和一个列表框的组合
optiontransferselect 选项转移列表组件
updownselect 带有上下移动按钮的列表框
hidden 隐藏表单元素
sumbit 提交按钮。
name属性可以使用前缀:method、action、redirect、redirect-action
reset 重置按钮
label lable标签
token 输出两个隐藏表单字段,用于防止表单的重复提交。
file 文件选择框
head 输出对应主题的head部分的内容。
b.非表单UI标签:
component 组件(自定义)
a 超链接
actionerror 输出错误消息
actionmessage 输出一般消息
fielderror 输出字段的错误消息
<s:fielderror/> 输出所有字段的错误消息
<s:fielderror><s:param value="'field2'"/></s:fielderror> 特定字段
c.Ajax标签:
第四篇:struts2拦截器
1。概念:拦截器:在AOP中用于某个方法或字段被访问之前,进行拦截,然后再之前或之后加入某些操作,拦截是aop的一种实现策略
Struts2拦截器的原理:
拦截器的设计原理,实际上是一个典型的任链模式的应用:首先将整个执行划分成若干相同类型的元素,每个元素具备不同的逻辑责任,并将他们纳入到一个链式的数据结构中(堆栈结构也看作是一个递归的链式结构),而每个人又有责任负责链式结构中下一个元素的执行调用
struts2 拦截器 拦截器2 Action result
| | | | |
| | |
| _走_> | ——走——> | —走———> |
| | | |
| | | |
| | |
| | <__回__ |
| | |
| |
| | ——————————走—|————————————》|
| |
| 《 ————————回———————————————
| 《———————回————— |《———————回———
| |
|
2。使用Struts2内置的拦截器
Struts2已经为您提供丰富多样的、功能齐全的拦截器实现。
可以至struts2-core包内的struts-default.xml查看关于默认的拦截器与拦截器栈的配置
3。使用自定义拦截器
在struts.xml配置中有两个步骤:
通过<interceptor …>元素来定义拦截器。
通过<interceptor-ref …>元素来使用拦截器
第五篇:国际化
步骤:
1。加载全局资源文件:
在struts.xml中配置struts.custom.i18n.resources常量的值来指定资源文件的基本名:
<struts>
<constant name="struts.custom.i18n.resources" value="msgs" />
</struts>
2.在classpath下添加国际化资源文件:(具体事例见工程)
msgs.properties
msgs_zh_CN.properties
msgs_en_US.properties
3。访问国际化主要有三种方式:
a.jsp页面中:可以在struts2提供的<S:text......./>标签,用name属性指定一个国际化资源文件中的key
b.action类中:可以使用actionSupport类的getText(String aTextName)方法,aTextName指定一个国际化资源文件的key
c。表单元素的label:以为该表单标签指定一个key属性,它指定一个国际化资源文件中的key
4。Struts2中提供了两种方式来填充消息字符串中的占位符:
JSP页面:通过在<s:text …>标签中使用多个<s:param…>标签来填充占位符。第一个<s:param…>标签指定第一个占位符值,依此类推。
Action类:通过调用ActionSupport类中的getText(String aTextName, List args)或getText(String aTextName, String[] args)方法来填充占位符
第六篇:文件上传和下载
文件上传:
struts2并未提供自己的文件上传请求解析器,只是在其它第三方文件上传请求解析器做了一些封装,从而更进一步简单了文件上传
步骤:
1 页面表单的设置:
要求。
表单数据的编码方式要为multipart/form-data
数据提交方式使用POST
通过<input type=“file”/>来选择要上传的文件
2在Action中处理上传请求:
Struts2针对表单中名为xxx的文件域,在对应的Action类中使用3个属性来封装该文件域信息:
类型为java.io.File的xxx属性:封装上传文件的内容对象。
类型为String的xxxFileName属性:封装上传文件的文件名。
类型为String的xxxContentType属性:封装上传文件的内容类型。
在Action类中使用IO流来操作File就可以获取上传的文件内容了。
.3。
文件上传失败信息提示
通过<s:fielderror/>标签来显示错误信息
错误信息国际化
文件下载:
1。首先写好action类中的方法
2。然后在struts.xml中配置好action
注意:配置stream类型的结果时,无需指定实际要显示的物理资源位置,但需要配置以下几个参数
contentType 内容类型,和互联网MIME标准中的规定类型一致
inputName 下载文件的来源流,对应着action类中某个类型为InputStream的属性名
例:取值为inputStream的属性需要编写getInputStream()方法
contentDisposition 文件下载的处理方式。
包括内联(inline)和附件(attachment)两种方式。附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。
例:attachment;filename="struts2.txt",表示文件下载的时候保存的名字应为struts2.txt
bufferSize 下载缓冲区的大小
第七篇:输入校验
1输入校验简介。
客服端校验:客服端校验主要是阻止正常的用户的误操作提交到服务器,降低服务器负担,主要通过javascript代码完成
服务器校验:服务器校验时防止非法数据进入程序,导致程序异常,底层数据库异常。它是整个应用程序阻止非法数据的最后防线,主要通过在应用程序中编程实现
2。校验框架原理:
将请求的参数转换为bean的属性
是否存在异常 是 将其保存到actionContext
拦截器将其加入fieldError
否
通过反射调用ValidationXXx()方法
调用validation()
是否存在fieldError() 是 结束
否
调用action() 方法
结束
3.编程式校验
在Action类中重写validateXxx()方法来编写输入校验代码(具体实例见struts2_validate.rar)
xxx为某个业务处理方法
4.使用校验框架
校验框架只校验Action中指定方法:
只为Action中的指定方法指定验证配置文件,配置文件命名为
ActionName-alias-validation.xml
alias:要校验的方法对应的Action标签的name属性值
如:UserAction-user_add-validation.xml<PIXTEL_MMI_EBOOK_2005>10 </PIXTEL_MMI_EBOOK_2005>
浙公网安备 33010602011771号