Struts2 学习笔记Word文档下载推荐.docx

上传人:b****6 文档编号:17631641 上传时间:2022-12-07 格式:DOCX 页数:56 大小:313.09KB
下载 相关 举报
Struts2 学习笔记Word文档下载推荐.docx_第1页
第1页 / 共56页
Struts2 学习笔记Word文档下载推荐.docx_第2页
第2页 / 共56页
Struts2 学习笔记Word文档下载推荐.docx_第3页
第3页 / 共56页
Struts2 学习笔记Word文档下载推荐.docx_第4页
第4页 / 共56页
Struts2 学习笔记Word文档下载推荐.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

Struts2 学习笔记Word文档下载推荐.docx

《Struts2 学习笔记Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Struts2 学习笔记Word文档下载推荐.docx(56页珍藏版)》请在冰豆网上搜索。

Struts2 学习笔记Word文档下载推荐.docx

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:

对应与项目名称后面的"

/"

(例如Struts2_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:

标签

是用来解决重名的问题,例如当系统的前台和后台都有一个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"

actio

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1