Struts2开发手册马士兵Word文件下载.docx
- 文档编号:18783599
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:58
- 大小:313.16KB
Struts2开发手册马士兵Word文件下载.docx
《Struts2开发手册马士兵Word文件下载.docx》由会员分享,可在线阅读,更多相关《Struts2开发手册马士兵Word文件下载.docx(58页珍藏版)》请在冰豆网上搜索。
02Struts2-Result19
一、Result类型(type)19
二、全局结果集(GlobleResult)20
三、动态的结果集(dynamicresult)21
四、带参数的结果集21
五、Result总结22
六、项目经理:
22
03OGNL表达式语言23
04Struts2-Tags28
Struts2标签目录28
一、property标签28
二、set标签29
三、bean标签29
include>
标签-少使用29
五、Ifelseifelse30
六、Iterator标签31
七、Theme31
05设计约定(编码规定)32
06项目开发顺序32
07声明式异常处理33
08国际化35
一、国际化资源文件35
二、Java国际化35
三、Struts2国际化35
1、Action级别35
2、Package级别36
3、Application级别36
四、资源文件中的参数处理37
五、国际化-动态语言切换37
09自定义拦截器38
10类型转换38
Struts2总结39
Ø
Action
⏹简单数据校验
Result
常用配置文件
OGNL&
ValueStack
Tags
---------------------Project
⏹类型转换、上传与下载、interceptor、防止重复提交
MVC思想深入剖析
源码解读
其他话题
01Struts2-Action
将请求与结果分开
1、建立Web项目;
2、建立Struts2的配置文件(struts.xml);
将Struts2的空项目中的配置文件(struts.xml)复制到项目的src目录下。
配置如下:
<
!
--
struts.devMode:
是否设置为开发模式 true:
是开发模式,否则不是
注:
在开发模式下,修改Struts的配置文件后不需要重新启动Tomcat服务器即生效。
否则修改Struts配置文件后需要重新启动Tomcat服务器才生效。
-->
constantname="
struts.devMode"
value="
true"
/>
<
namespace:
对应与项目名称后面的"
/"
(例如St_0100_Introduction后面的"
)
(http:
//localhost:
8080/Struts2_0100_Introduction/)
<
packagename="
default"
namespace="
extends="
struts-default"
>
actionname="
hello"
result>
/hello.jsp
/result>
/action>
/package>
3、复制Struts2相应的jar包及第三方包。
将空项目中lib目录中的除junit和spring-test之外的所有文件复制到项目的WebRoot/WEB-INF/lib目录下
4、修改对应的web.xml,建立struts2的filter(参考struts自带的项目),添加如下配置:
filter>
filter-name>
struts2<
/filter-name>
filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
/filter-class>
/filter>
filter-mapping>
url-pattern>
/*<
/url-pattern>
/filter-mapping>
三、Namespace
Namespace决定了action的访问路径,默认为“”,可以接收所有路径的action,如果没有找到相应的namespace时,则使用namespace为空的action
Namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action、/xxx/index.action、或者/xxx/yyy/index.action.
Namespace最好也用模块来进行命名。
namespace:
(例如Struts2_0100_Introduction后面的"
标签
是用来解决重名的问题,例如当系统的前台和后台都有一个action名叫hello,这时就需要用package来区分。
前台<
front"
后台<
back"
struts2中的package与java的package是相同的作用的。
五、Action
具体视图的返回可以由用户自己定义的Action来决定
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容,有三种手段:
index"
class="
com.bjsxt.struts2.front.action.IndexAction1"
resultname="
success"
/ActionIntroduction.jsp<
注:
action>
标签中的class属性是表示action的对应的类(这个类是一个普通Java类),当访问这个action时会创建这个类成为一个对象,然后执行这个对象中的execute方法()(execute方法返回类型为String)。
第一种:
Action普通Java类
publicclassIndexAction1{
publicStringexecute(){
return"
;
}
}
当<
标签中class属性省略时,则默认执行com.opensymphony.xwork2.ActionSupport类中的execute方法,而这个方法返回一个字符串常量SUCCESS(常量值为:
”success”).
第二种:
Action实现com.opensymphony.xwork2.Action接口,这个接口中定义了一些常量和一个execute方法,我们重写execute()方法就可以了。
importcom.opensymphony.xwork2.Action;
publicclassIndexAction2implementsAction{
@Override
//return"
returnthis.SUCCESS;
//SUCCESS常量值为:
"
第三种:
Action继承com.opensymphony.xwork2.ActionSupport类,而这个类又实现了com.opensymphony.xwork2.Action接口,我们重写execute()方法就可以了。
importcom.opensymphony.xwork2.ActionSupport;
publicclassIndexAction3extendsActionSupport{
//SUCCESS常量值为:
注:
第三种Action是我们需要使用的方式,因为这个类不担实现了com.opensymphony.xwork2.Action接口,更重要的是它已经帮我封装了许多其它有用的方法。
六、路径问题的说明
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。
(在jsp中用request.getContextRoot方式来拿到webapp的路径)
或者使用myeclipse经常用的,指定basePath
还有另一种方式,就是在<
head>
标签中,指定<
base>
标签值,这样就使用统一绝对路径。
%
Stringpath=request.getContextPath();
//
StringbasePath=request.getScheme()+"
:
//"
+request.getServerName()+"
+request.getServerPort()+path+"
%>
basehref="
%=basePath%>
…………
标签:
当前页面中所有连接都会在前面加上base地址。
七、Action的动态调用方法
Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法:
1、方法一(通过methed属性指定执行方法):
可以在配置文件中配置Action的时候用method=来指定执行哪个方法
userAdd"
com.bjsxt.struts2.user.action.UserAction"
method="
add"
/user_add_success.jsp<
这样,只要在action的对象中有一个add的方法,并且返回类型为String就可以了。
如果没有method属性,则默认执行execute()方法。
publicclassUserActionextendsActionSupport{
publicStringadd(){
returnSUCCESS;
}
2、动态方法调用DMI(推荐)
可以在url地址中动态指定action执行那个方法。
Url地址如下:
http:
8080/Struts2_0500_ActionMethod/user/user!
add
方法:
action+!
+方法名
只要Action对象中有这个方法,并且返回类型为String就可以调用。
这样Struts.xml配置文件中不需要配置methed属性。
代码如下:
user"
Action类:
总结:
推荐使用第二种动态方法调用DMI,因为第一种需要大量的Action配置,后者可以在url中动态指定执行action中哪个方法。
八、Action通配符(wildcard)的配置
使用通配符,将配置量降到最低,不过,一定要遵守"
约定优于配置"
的原则
1、通配符
星号(*)表示所有
{数字} 表示第几个通配符
例如:
Student*那么{1}代表第一个星号(*)
*_*那么{1}代表第一个星号(*),{2}代表第二个星号(*)
2、实例
actions"
/actions"
Student*"
com.bjsxt.struts2.action.StudentAction"
{1}"
/Student{1}_success.jsp<
*_*"
com.bjsxt.struts2.action.{1}Action"
{2}"
/{1}_{2}_success.jsp<
--{0}_success.jsp-->
解释:
第一个Action的名称为name=”Student*”method=”{1}”,表示所有Action以Student开始的都会执行这个Action,并且执行Student后字符为方法名的方法,例如:
访问的Action为Studentadd,会执行这个Action(Student*),并且执行add的方法.因为{1}在这里代表add,并且返回/Studentadd_success.jsp页面。
第二个Action的名称name=”*_*”method=”{2}”class=”…action.{1}Action”表示所有Action中包含下划线(“_”)都会执行这个Action,例如:
Teacher_add,那么会执行这个Action,并且Action对应的类为TeacherAction,且执行Action中的add方法,返回结果页面为/Teacher_add_success.jsp,因为在这里的{1}表示Teacher,{2}表示add
3、匹配顺序
当匹配的Action有两个以上时,则会按匹配精确度高的那个Action,当有个相同的匹配精确度时,则按先后顺序进行。
九、Action的属性接收参数
Action中三种传递并接受参数:
1、在Action添加成员属性接受参数
例如请求的URL地址:
8080/Struts2_0700_ActionAttrParamInput/user/user!
add?
name=a&
age=8
其中传递了两个参数:
name和age,其值分别为:
a、8,此Action执行的是add()方法。
那我们只要在user这个Action对象中添加这两个成员属性并生成set、get方法。
privateStringname;
privateintage;
System.out.println("
name="
+name);
age="
+age);
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
this.name=name;
publicintgetAge(){
returnage;
publicvoidsetAge(intage){
this.age=age;
2、域模型(DomainModel)
就是利用对象域来进行传递和接受参数
8080/Struts2_0800_DomainModelParamInput/user/user!
user.name=a&
user.age=8
其中,访问的是namespace=”/user”action的name=”user”Action所执行的方法method=”add”
利用对象域user来传递参数,为对象的属性赋值(user.name=auser.age=8)
注:
需要一个对象user 并且这个对象需要有两个成员属性,且具有get、set方法。
然后在Action中添加一个User对象的成员属性。
并且有get、set方法,就可以了。
//User对象
publicclassUser{
//Action类
publicclassUserActionextendsActionSupport{
privateUseruser;
//privateUserDTOuserDTO;
+user.getName());
+user.getAge());
publicUsergetUser(){
returnuser;
publicvoidsetUser(Useruser){
this.user=user;
3、ModelDriven接收参数
使Action实现com.opensymphony.xwork2.ModelDriven<
User>
(在实现接口时需要使用泛型,否则使用时需要转型)中利用其getModel()方法返回对象模型,从而获得传入的参数。
例如URL如下:
8080/Struts2_0900_ModelDrivenParamInput/user/user!
其:
访问的是namespace=”/user”action的name=”user”Action所执行的方法method=”add”,其传入了两个参数:
name=a,age=8。
参数被传入至Action后,会被ModelDriven对象根据参数名自动赋值给User对象相应的属性而生成User对象,并且由getModel()返回。
那么我们在Action中就可以利用这个对象了。
注意:
传入的参数名需要与对象模型中的成员属性一致。
对象模型User:
Action对象
importcom.opensymphony.xwork2.ModelDriven;
publicclassUserActionextendsActionSupportimplementsModelDriven<
{
privateUseruser=newUser();
publicUsergetModel(){
}}
一十、Action属性接收参数中文问题
如果表单提交数据中有中文时,尽量使用post方式。
需要在Struts.xml配置文件中加入一个常量配置,如下:
struts>
struts.i18n.encoding"
GBK"
--internationalization-->
/user"
action
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts2开发手册 马士兵 Struts2 开发 手册 士兵