struts2快速入门全Word下载.docx
- 文档编号:19056403
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:14
- 大小:22.12KB
struts2快速入门全Word下载.docx
《struts2快速入门全Word下载.docx》由会员分享,可在线阅读,更多相关《struts2快速入门全Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
}
步骤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"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- struts2 快速 入门