Struts2框架 学习笔记1.docx

上传人:b****0 文档编号:18099571 上传时间:2023-08-13 格式:DOCX 页数:68 大小:342.97KB
下载 相关 举报
Struts2框架 学习笔记1.docx_第1页
第1页 / 共68页
Struts2框架 学习笔记1.docx_第2页
第2页 / 共68页
Struts2框架 学习笔记1.docx_第3页
第3页 / 共68页
Struts2框架 学习笔记1.docx_第4页
第4页 / 共68页
Struts2框架 学习笔记1.docx_第5页
第5页 / 共68页
Struts2框架 学习笔记1.docx_第6页
第6页 / 共68页
Struts2框架 学习笔记1.docx_第7页
第7页 / 共68页
Struts2框架 学习笔记1.docx_第8页
第8页 / 共68页
Struts2框架 学习笔记1.docx_第9页
第9页 / 共68页
Struts2框架 学习笔记1.docx_第10页
第10页 / 共68页
Struts2框架 学习笔记1.docx_第11页
第11页 / 共68页
Struts2框架 学习笔记1.docx_第12页
第12页 / 共68页
Struts2框架 学习笔记1.docx_第13页
第13页 / 共68页
Struts2框架 学习笔记1.docx_第14页
第14页 / 共68页
Struts2框架 学习笔记1.docx_第15页
第15页 / 共68页
Struts2框架 学习笔记1.docx_第16页
第16页 / 共68页
Struts2框架 学习笔记1.docx_第17页
第17页 / 共68页
Struts2框架 学习笔记1.docx_第18页
第18页 / 共68页
Struts2框架 学习笔记1.docx_第19页
第19页 / 共68页
Struts2框架 学习笔记1.docx_第20页
第20页 / 共68页
亲,该文档总共68页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Struts2框架 学习笔记1.docx

《Struts2框架 学习笔记1.docx》由会员分享,可在线阅读,更多相关《Struts2框架 学习笔记1.docx(68页珍藏版)》请在冰点文库上搜索。

Struts2框架 学习笔记1.docx

Struts2框架学习笔记1

目录

01Struts2-Action5

一、Struts作用:

5

二、搭建Struts2的运行环境:

5

三、Namespace6

四、标签6

五、Action6

六、路径问题的说明8

七、Action的动态调用方法8

八、Action通配符(wildcard)的配置9

九、Action的属性接收参数10

1、在Action添加成员属性接受参数10

2、域模型(DomainModel)10

3、ModelDriven接收参数11

十、Action属性接收参数中文问题12

十一、简单数据验证12

十二、访问Web元素14

一、方法一:

ActionContext方式15

二、方式二:

Ioc(控制反转)—推荐使用15

三、方式三:

获取原类型16

四、方式四:

获取原类型-控制反转17

十三、Struts2配置文件模块化包含(include)17

十四、默认的Action18

十五、Action总结18

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

四、标签-少使用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

一、Struts作用:

将请求与结果分开

二、搭建Struts2的运行环境:

1、建立Web项目;

2、建立Struts2的配置文件(struts.xml);

将Struts2的空项目中的配置文件(struts.xml)复制到项目的src目录下。

配置如下:

--

struts.devMode:

 是否设置为开发模式 true:

是开发模式,否则不是

注:

在开发模式下,修改Struts的配置文件后不需要重新启动Tomcat服务器即生效。

  否则修改Struts配置文件后需要重新启动Tomcat服务器才生效。

-->

--

namespace:

对应与项目名称后面的"/"(例如Struts2_0100_Introduction后面的"/")

(http:

//localhost:

8080/Struts2_0100_Introduction/)

-->

/hello.jsp

3、复制Struts2相应的jar包及第三方包。

将空项目中lib目录中的除junit和spring-test之外的所有文件复制到项目的WebRoot/WEB-INF/lib目录下

4、修改对应的web.xml,建立struts2的filter(参考struts自带的项目),添加如下配置:

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

三、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后面的"/")

(http:

//localhost:

8080/Struts2_0100_Introduction/)

四、标签

是用来解决重名的问题,例如当系统的前台和后台都有一个action名叫hello,这时就需要用package来区分。

前台后台

struts2中的package与java的package是相同的作用的。

五、Action

具体视图的返回可以由用户自己定义的Action来决定

具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容,有三种手段:

/ActionIntroduction.jsp

注:

标签中的class属性是表示action的对应的类(这个类是一个普通Java类),当访问这个action时会创建这个类成为一个对象,然后执行这个对象中的execute方法()(execute方法返回类型为String)。

第一种:

Action普通Java类

publicclassIndexAction1{

publicStringexecute(){

return"success";

}

}

标签中class属性省略时,则默认执行com.opensymphony.xwork2.ActionSupport类中的execute方法,而这个方法返回一个字符串常量SUCCESS(常量值为:

”success”).

第二种:

Action实现com.opensymphony.xwork2.Action接口,这个接口中定义了一些常量和一个execute方法,我们重写execute()方法就可以了。

importcom.opensymphony.xwork2.Action;

publicclassIndexAction2implementsAction{

@Override

publicStringexecute(){

//return"success";

returnthis.SUCCESS;//SUCCESS常量值为:

"success"

}

}

第三种:

Action继承com.opensymphony.xwork2.ActionSupport类,而这个类又实现了com.opensymphony.xwork2.Action接口,我们重写execute()方法就可以了。

importcom.opensymphony.xwork2.ActionSupport;

publicclassIndexAction3extendsActionSupport{

@Override

publicStringexecute(){

//return"success";

returnthis.SUCCESS;//SUCCESS常量值为:

"success"

}

}

注:

第三种Action是我们需要使用的方式,因为这个类不担实现了com.opensymphony.xwork2.Action接口,更重要的是它已经帮我封装了许多其它有用的方法。

 

六、路径问题的说明

struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。

虽然可以用redirect方式解决,但redirect方式并非必要。

解决办法非常简单,统一使用绝对路径。

(在jsp中用request.getContextRoot方式来拿到webapp的路径)

或者使用myeclipse经常用的,指定basePath

还有另一种方式,就是在标签中,指定标签值,这样就使用统一绝对路径。

<%

Stringpath=request.getContextPath();//

StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";

%>

"/>

…………

注:

标签:

当前页面中所有连接都会在前面加上base地址。

七、Action的动态调用方法

Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法:

1、方法一(通过methed属性指定执行方法):

可以在配置文件中配置Action的时候用method=来指定执行哪个方法

/user_add_success.jsp

这样,只要在action的对象中有一个add的方法,并且返回类型为String就可以了。

如果没有method属性,则默认执行execute()方法。

importcom.opensymphony.xwork2.ActionSupport;

publicclassUserActionextendsActionSupport{

publicStringadd(){

returnSUCCESS;

}

}

2、动态方法调用DMI(推荐)

可以在url地址中动态指定action执行那个方法。

Url地址如下:

http:

//localhost:

8080/Struts2_0500_ActionMethod/user/user!

add

方法:

action+!

+方法名

注:

只要Action对象中有这个方法,并且返回类型为String就可以调用。

这样Struts.xml配置文件中不需要配置methed属性。

代码如下:

/user_add_success.jsp

Action类:

publicclassUserActionextendsActionSupport{

publicStringadd(){

returnSUCCESS;

}

}

总结:

推荐使用第二种动态方法调用DMI,因为第一种需要大量的Action配置,后者可以在url中动态指定执行action中哪个方法。

八、Action通配符(wildcard)的配置

使用通配符,将配置量降到最低,不过,一定要遵守"约定优于配置"的原则

1、通配符

星号(*)表示所有

{数字} 表示第几个通配符

例如:

Student*那么{1}代表第一个星号(*)

*_*那么{1}代表第一个星号(*),{2}代表第二个星号(*)

2、实例

/Student{1}_success.jsp

/{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地址:

http:

//localhost:

8080/Struts2_0700_ActionAttrParamInput/user/user!

add?

name=a&age=8

其中传递了两个参数:

name和age,其值分别为:

a、8,此Action执行的是add()方法。

那我们只要在user这个Action对象中添加这两个成员属性并生成set、get方法。

publicclassUserActionextendsActionSupport{

privateStringname;

privateintage;

publicStringadd(){

System.out.println("name="+name);

System.out.println("age="+age);

returnSUCCESS;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

}

2、域模型(DomainModel)

就是利用对象域来进行传递和接受参数

例如请求的URL地址:

http:

//localhost:

8080/Struts2_0800_DomainModelParamInput/user/user!

add?

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{

privateStringname;

privateintage;

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

}

//Action类

publicclassUserActionextendsActionSupport{

privateUseruser;

//privateUserDTOuserDTO;

publicStringadd(){

System.out.println("name="+user.getName());

System.out.println("age="+user.getAge());

returnSUCCESS;

}

publicUsergetUser(){

returnuser;

}

publicvoidsetUser(Useruser){

this.user=user;

}

}

3、ModelDriven接收参数

使Action实现com.opensymphony.xwork2.ModelDriven(在实现接口时需要使用泛型,否则使用时需要转型)中利用其getModel()方法返回对象模型,从而获得传入的参数。

例如URL如下:

http:

//localhost:

8080/Struts2_0900_ModelDrivenParamInput/user/user!

add?

name=a&age=8

其:

访问的是namespace=”/user”action的name=”user”Action所执行的方法method=”add”,其传入了两个参数:

name=a,age=8。

参数被传入至Action后,会被ModelDriven对象根据参数名自动赋值给User对象相应的属性而生成User对象,并且由getModel()返回。

那么我们在Action中就可以利用这个对象了。

注意:

传入的参数名需要与对象模型中的成员属性一致。

对象模型User:

publicclassUser{

privateStringname;

privateintage;

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

}

Action对象

importcom.opensymphony.xwork2.ActionSupport;

importcom.opensymphony.xwork2.ModelDriven;

publicclassUserActionextendsActionSupportimplementsModelDriven{

privateUseruser=newUser();

publicStringadd(){

System.out.println("name="+user.getName());

System.out.println("age="+user.getAge());

returnSUCCESS;

}

@Override

publicUsergetModel(){

returnuser;

}}

一十、Action属性接收参数中文问题

如果表单提交数据中有中文时,尽量使用post方式。

需要在Struts.xml配置文件中加入一个常量配置,如下:

--internationalization-->

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2