struts2快速入门全Word下载.docx

上传人:b****5 文档编号:19056403 上传时间:2023-01-03 格式:DOCX 页数:14 大小:22.12KB
下载 相关 举报
struts2快速入门全Word下载.docx_第1页
第1页 / 共14页
struts2快速入门全Word下载.docx_第2页
第2页 / 共14页
struts2快速入门全Word下载.docx_第3页
第3页 / 共14页
struts2快速入门全Word下载.docx_第4页
第4页 / 共14页
struts2快速入门全Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

struts2快速入门全Word下载.docx

《struts2快速入门全Word下载.docx》由会员分享,可在线阅读,更多相关《struts2快速入门全Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

struts2快速入门全Word下载.docx

}

步骤4:

配置Action,编写src/struts.xml

packagename="

package名"

extends="

struts-default"

>

actionname="

action路径"

class="

action类"

method="

action方法名"

/action>

/package>

步骤5:

配置视图

action...>

resultname="

视图名"

jsp的实际路径<

/result>

视图名与action方法的返回值对应

3.如何接受请求参数

1)利用工具类获取request,等对象

HttpServletRequestrequest=ServletActionContext.getRequest();

2)实现ServletRequestAware来获取request对象

privateHttpServletRequestrequest;

publicvoidsetServletRequest(HttpServletRequestrequest){

this.request=request;

}

3)利用struts的方法来解决如何获取请求参数(*)

关键点:

将请求参数名与Action"

属性名"

相匹配即可,struts会帮助进行类型转换

String,Integer,Double,BigDecimal,Date,自定义实体类,List,List<

自定义实体类>

例如:

+-----------------------------------------------------------------------------------------------------+

|属性类型和名称|请求参数格式|

|Studentstudent(内部有id,name属性)|student.id=1&

student.name=zhangsan|

|List<

String>

list|list=值1&

list=值2...或?

list[0]=值1&

list[1]=值2...|

|String[]list|list=值1&

Student>

listlist[0].id=1&

list[0].name=zhang&

list[1].id=2&

list[1].name=lisi|

|Map<

Integer,String>

map|map[1]=北京&

map[2]=上海|

+----------------------------------------------------------------------------------------------------+

4.传值与数据显示

让学生认为struts会将action的属性作为request作用域中的变量进行传递

5.作业

通讯录项目,完成登录功能,做的快的可以完成查询所有联系人功能

==============Day2================

1.值栈ValueStack,作用范围:

仅局限于一次请求

作用:

类似与web中的作用域,用来传值

2.值栈的组成:

Root区域->

栈结构,后进先出

Context区域->

Map结构,键值对

3.Root区域的存取值

Struts会将Action压入值栈,然后在页面上可以利用<

s:

propertyvalue="

/>

value="

top"

或不写value表示取得栈顶对象

[下标]"

[0]"

->

代表整个栈的list[String,Student,Student,Action,DefaultTextProvider]

[1]"

->

代表list的子集,从下标1开始[Student,Student,Action,DefaultTextProvider]

[2]"

代表list的子集,从下标2开始[Student,Action,DefaultTextProvider]

[2].name从子集里由上至下查找name属性

4.显示值

property/>

或<

直接显示栈顶对象(toString形式)

->

从栈中由上至下查找对象符合的属性,找到第一个匹配后,返回属性值

iteratorvalue="

list集合属性名"

!

--每次循环开始时,将集合中对象压入栈顶-->

利用<

标签显示对象或对象的属性

--每次循环结束时,栈顶对象移除-->

/s:

iterator>

iftest="

条件"

if>

else>

/else>

5.Context区域的存取值,数据结构是一个大map

keyvalue

request小map

session小map

application小map

attr小maprequest->

session->

application查找某个属性名

parameters小mapkey->

请求参数名,value->

String[]

<

#session"

6.Request的包装

修饰模式decorator替换了原有的HttpServletRequest对象的实现为:

StrutsRequestWrapper

${requestScope.属性}

根据此属性名先找原始的Request作用域中内容,找不到,再到ValueStack的root区域去找

7.作业

通讯录项目,完成查询所有联系人功能,做的快的完成分页

==========================================Day3==========================================

1.跳转

action...

..."

type="

dispatcher"

jsp地址<

+--------------------------------------------------------------------------------------------------------------+

|跳转方式原理限制|

|dispatcherforward只能跳转至jsp|

|redirectredirect可以跳转到jsp,也可以跳转到Action|

|redirectActionredirect只能redirect至Action|

|chainforward只能forward至Action|

例子:

success"

(*)

paramname="

location"

目标路径<

/param>

redirect"

(*)

redirectAction"

actionName"

action名字<

chain"

2.重定向传参:

方法1:

使用session,注意及时清理

方法2:

使用重定向时拼接get请求参数

请求参数名"

请求参数值<

...

其中请求参数值可以是写死的,也可以是${ognl表达式},此ognl表达式可以从root或context获取内容

+--------------------------------------------------------------------------------------------------------------+

|使用session|使用拼接get请求参数|

|占用服务器内存多,应及时清理|不会占用服务器内存|

|比较简单|稍微复杂,对汉字参数需要小心|

|不能跨应用传参|可以跨应用,跨服务器|

3.package

package...namespace="

/命名空间"

加了namespace属性后,action的访问地址:

namespace值+action名

可以根据项目模块或功能的不同,将action分别放入不同的package进行管理

有了命名空间后,不同包下的action要进行跳转,要考虑namespace的取值,如:

/n2/a2.action<

name"

${name}<

pass"

123<

a2<

namespace"

/n2<

默认命名空间

package...不加namespace属性>

"

/"

其他命名空间下,如果查找不到某个action,最后还会到默认命名空间下找一次。

特别注意:

/n1/a/b/c/d/hello.action

将最后一个斜杠之前的内容当成命名空间,与自己定义的命名空间做startWith的匹配,选取一个最接近的

/n1

/n1/a(会匹配)

4.action路径的匹配方式

每发一次请求都会创建一个新的action实例,因此struts2action内的成员变量不会有线程安全问题(*)

同一个action类可以定义多个action方法。

简化action配置:

可以使用*通配符配合{1},{2}...来简化action配置

DynamicMethodInvocationDMI动态方法调用,struts不推荐使用,会带来安全隐患

5.常量值的配置:

struts.enable.DynamicMethodInvocation=true|false表示是否启用DMI

struts.i18n.encoding=字符编码

struts.multipart.parser=jakarta上传文件的实现类commons-fileupload

struts.multipart.maxSize=上传文件的大小限制

struts.custom.i18n.resources=testmessages,testmessages2=国际化资源文件位置

struts.action.extension=action,,用来修改action后缀

6.作业

通讯录项目,尝试完成分页功能。

完成新增联系人操作

==========================================Day4==========================================

1.讲解分页练习

2.struts中的拦截器

亮点,体现了AOP面向切面编程的思想

1)自定义拦截器:

public拦截器类implementsInterceptor{

publicStringintercept(ActionInvocationinvocation)throwsException{

//调用了invocation.invoke()表示放行,会调用下一个拦截器或action

//没有调用,则表示操作被拦截

returninvocation.invoke();

package...>

interceptors>

<

interceptorname="

拦截器名"

拦截器类"

interceptor-stackname="

拦截器栈名"

<

interceptor-refname="

...

/interceptor-stack>

/intercepters>

拦截器名|拦截器栈名"

result...>

拦截器执行的先后顺序,是根据拦截器栈内定义的先后顺序来执行

2)系统提供的拦截器有:

autowiring->

跟spring整合时使用

chain->

action之间使用chain方式进行跳转时的处理

exception->

处理异常的

fileUpload->

处理文件上传

i18n->

处理国际化

params->

处理请求参数的

servletConfig->

用来处理...Aware接口的注入

token->

产生令牌,解决重复提交<

token>

validation->

请求参数的验证处理

workflow->

如果验证出现错误,由此拦截器跳转至input视图

3)可以为整个包指定一个默认拦截器栈引用,如果action内使用了<

interceptor-ref>

标签,则会覆盖默认拦截器栈引用

4)例子:

登录检查拦截器的实现,要点:

a)拦截器如果没放行,那么拦截器的返回值也对应一个视图名

b)定义视图时,用到一个全局视图定义:

global-results>

login"

/login.jsp<

/global-results>

根据视图名查找视图时,action内的视图优先级高优先查找,找不到,则会查找全局视图中的定义

==========================================Day5==========================================

1.Struts表单验证

1)直接在action方法内执行验证

2)action类要继承ActionSupport父类,重写父类的validate方法

a.经过params拦截器

执行了参数的类型转换和赋值操作

b.经过validation拦截器

就会调用validate方法进行验证,将验证出现的错误信息放入父类fieldErrors(map)

c.经过workflow拦截器

检查fieldErrors集合是否为空,如果不为空,转发到名为input的视图

3)使用xml文件进行声明式验证,action类要继承ActionSupport父类

2.Struts国际化

1)准备资源文件

资源文件名_语言代码_国家(地区)代码.properties

2)在Struts中配置一组资源文件

constantname="

struts.custom.i18n.resources"

message"

/constant>

3)页面中使用资源文件

textname="

资源文件中的key"

text>

4)action中使用资源文件

ActionSupport中的方法:

getText("

如果资源文件中需要显示动态内容,也可以利用${ognl表达式}来获取值栈中的值

原理:

对于action:

如果请求参数中存在一个名为request_locale的参数,则以它的值优先作为语言国家代码,并存储至Session

否则会以Session中一个变量WW_TRANS_I18N_LOCALE的值作为语言国家代码

如果以上都没有,根据浏览器请求头中的Accept-Language的值作为语言国家代码

对于jsp:

根据浏览器请求头中的Accept-Language的值作为语言国家代码

3.文件上传

1)准备表单

formaction="

post"

enctype="

multipart/form-data"

inputtype="

file"

name="

参数名"

...

submit"

上传"

/form>

2)Action接受文件请求参数

publicclass文件上传Action{

privateFile参数名;

privateString参数名FileName;

//上传文件的原始名

privateString参数名ContentType;

//上传文件的类型,如:

image/jpeg,image/png,text/plain,text/html

...

publicStringexecute(){

//1.处理文件存储路径

//2.处理保存文件名的唯一性(选讲)

//3.另存文件

//4.返回文件在服务器URI路径

3)上传文件的大小和类型限制

a.总开关,限制文件的大小

struts.multipart.maxSize"

b.在每个action限制大小以及类型、扩展名:

通过给action配置拦截器实现:

fileUpload"

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

当前位置:首页 > 求职职场 > 面试

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

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