strusts2课堂总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、
1、struts2
struts2是mvc设计思想的一个实现,可以将项目低耦合,提高扩展性
2、struts2和struts1的区别
struts2不是struts1的升级,而是继承的下xwork的血统,它吸收了struts1和webwork 的优势。
struts2的action是原型,安全的,struts2的action是单例,非安全
3、步骤:
1、导入包
2、在web.xml文件中,加入struts2的核心拦截器
3、在src下放入struts2的xml struts.xml
4、url
http://localhost:8080/Struts2_01_HelloWorld/demo/hello.action
二、
1、默认值
2、转发和重定向的区别
转发:url显示的依然是上一个的url,共享上一次的请求
重定向:url显示的是下一个的url,不共享
3、url
http://localhost:8080/Struts2_02_Default/demo/hello.action
4、路径
http://localhost:8080/Struts2_02_Default/demo/a/b/c/hello.action
1、原路径找不到,http://localhost:8080/Struts2_02_Default/demo/a/b/hello.action
2、如果1找不到,http://localhost:8080/Struts2_02_Default/demo/a/hello.action
3、如果2找不到,http://localhost:8080/Struts2_02_Default/demo/hello.action
3、如果3找不到,http://localhost:8080/Struts2_02_Default/hello.action
三、
11、自定义action
继承ActionSupport
2、功能方法必须满足格式
public String 名字()throws Exception{
....
};
3、url
http://localhost:8080/Struts2_03_Action/demo/a.action
四、
1、如何给action传入参数
注意:赋值的必须有封装的set方法,通过el表达式获取的时候,必须有封装的get 方法
1、直接给单个参数赋值,在action里建立一个变量,名字与参数的名字一样
2、为对象的某个属性赋值,在action里建立一个对象,将参数改为对象名.属性的格式
五、
1、转发和重定向的区别
转发到下一次的时候,url依然是上一次的url,共享上一次的request
重定向到下一次的时候,url是下一次的url,不共享上一次的request
2、struts2的result的type
转发:共享上一次action
重定向:不共享上一次action
1、转发到下一个jsp,html:dispatcher
2、重定向到下一个jsp,html:redirect
3、转发到下一个action:chain
转到同一个包下的action
转发到不同包下的action
4、重定向到下一个action:redirectAction
转到同一个包下的action
转发到不同包下的action
六、
1、为了分模块开发,可以设置多个xmL文件。
最后综合到struts.xml
注意:路径和包名不能重复
七、
1、局部转换器,只对某一个action类起作用
1、新建一个类,继承 StrutsTypeConverter
2、在与action类中的同包下,新建一个文件,名字格式有要求:类名-conversion.properties
2、全局转换器
1、在src下新建一个文件,名字格式有要求:xwork-conversion.properties
3、url
http://localhost:8080/struts2_10_Conversion/login.jsp
八、
1、struts2核心功能就是使用拦截器实现的。
2、自定义拦截器(按照过滤器的思想来学习),用来拦截某个action
过滤器是根据url拦截器,拦截器是拦截指定的action
1、定义一个类,实现接口Interceptors
2、在struts.xml中定义拦截器
3、在需要拦截的action下,配置引用拦截器,并且注意最后要加上系统默认的拦截器
3、url
http://localhost:8080/Struts2_12_Interceptor/demo/delete.action
http://localhost:8080/Struts2_12_Interceptor/demo/update.action
加上session
http://localhost:8080/Struts2_12_Interceptor/setSession.jsp
清除session
http://localhost:8080/Struts2_12_Interceptor/clearSession.jsp
九、
1、上传
1、设置多功能表单和post提交方式
enctype="multipart/form-data"
method="post"
2、在action中定义一个file对象,名字和type=file的input的name属性一致,
如果要获取文件的名字,定义一个字符串,字符串的名字是:type=file的input 的name属性+FileName
3、处理路径文集
4、将上传的文件复制到目标文件中
2、url
http://localhost:8080/struts2_12_Upload/upload.jsp
3、可以使用配置xml的形式上传
struts2的核心功能就是使用的拦截器
<!-- 配置名字为fileUpload的拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型 -->
<param name="allowedTypes">image/bmp,image/png,image/gif,
image/jpeg,image/pjpeg,image/x-png</param>
<!-- 配置允许上传文件的大小(单位字节) -->
<param name="maximumSize">80000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 动态设置保存文件的路径 (Action的属性值)-->
<param name="savePath">/upload</param>
4、上传一般使用struts2+jquery的异步上传插件(uploadify)
在上传之前进行一些验证,如果不通过,不提交到服务器。
只有验证通过再发送的服务器
5、post和get的区别
post可以传输大数据,get只传输小数据,最大是4kb
post请求的时候,url没有参数,get请求的时候,url有参数
十、
1、下载
2、url
http://localhost:8080/Struts2_13_Load
3、result介绍
<result name="success" type="stream">
<!-- 这个流用来读取服务器上的文件 -->
<param name="inputName">imageInputStream</param>
<!-- 配置要下载的文件的mime类型 -->
<param name="contentType">${contentType}</param>
<!-- 配置处理文件的方式,有下载和阅览 -->
<param name="contentDisposition">${contentType}</param>
</result>
4、编码和解码
编码:看得懂--->看不懂
解码:看不懂--->看得懂
十一、
strusts2中的服务器验证,推荐使用js前端验证
1、xml配置验证
1、全局验证(验证所有与execute签名相同的方法)
在验证的action所在包下,建立一个xml文件格式:action的名字-validation.xml
2、部分验证(选择性的验证某些与execute签名相同的方法)
在验证的action所在包下,建立一个xml文件格式:action的名字-方法名-validation.xml
2、使用validate方法验证
1、全局验证(验证所有与execute签名相同的方法-struts2的功能方法)
1、重写ActionSupport的validate()方法,这个方法会验证所有与execute方法签名相同(public String methodName(){})的方法
2、如果不符合要求,调用addFiledError(错误的名字,错误的具体描述)
3、如果错误集合不为空(验证失败),会返回input视图
4、在要显示的页面使用EL表达式获取错误信息
2、部分验证(选择性的验证某些与execute签名相同的方法)
1、定义如下格式方法(其中的validateLogin是需要验证的public String login(){}方法)
public void validateLogin(){
}
2,3,4步骤同上
3、null和""区别?
4、验证器
以下是各类现场级和非现场验证在Struts2的列表:
日期验证器:
<field name="birthday">
<field-validator type="date">
<param name="min">01/01/1990</param>
<param name="max">01/01/2000</param>
<message>
Birthday must be within ${min} and ${max}
</message>
</field-validator>
</field>
double 验证器:
<field name="percentage">
<field-validator type="double">
<param name="minExclusive">0.123</param>
<param name="maxExclusive">99.98</param>
<message>
Percentage needs to be between ${minExclusive}
${maxExclusive} (exclusive)
</message>
</field-validator>
</field>
email 验证器:
<field name="myEmail">
<field-validator type="email">
<message>
Must provide a valid email
</message>
</field-validator>
</field>
表达式验证器:
A Non-Field Level validator that validates based on regular expression supplied.
<field-validator type="expression">
<param name="expression">....</param>
<message>
Failed to meet Ognl Expression ....
</message>
</field-validator>
int 验证器:
<field name="age">
<field-validator type="int">
<param name="min">5</param>
<param name="max">50</param>
<message>
Age needs to be between ${min} and ${max}
</message>
</field-validator>
</field>
正则验证器:
<field name="myStrangePostcode">
<field-validator type="regex">
<param name="fieldName">myStrangePostcode</param> <param name="expression">
<![CDATA[([aAbBcCdD][123][eEfFgG][456])]]>
</param>
</field-validator>
</field>
必须验证器:
<field name="username">
<field-validator type="required">
<message>
username must not be null
</message>
</field-validator>
</field>
requiredstring validator:
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>
username must not be null
</message>
</field-validator>
</field>
stringlength 验证器:
<field name="username">
<field-validator type="stringlength">
<param name="minLength">10</param>
<param name="maxLength">10</param>
<param name="trim">true</param>
<message>
Your username needs to be 10 characters long </message>
</field-validator>
</field>
url 验证器:
<field-validator type="url">
<param name="fieldName">myHomePageURL</param>
<message>
Invalid homepage url
</message>
</field-validator>
十二、
1、国际化
其实就是配置多个properties文件,根据不同的Locale值选择性的显示某个语言
2、
步骤
1、在src下新建一些properties文件,格式是有要求的。
基名是一样的
基名_国家的名字_语言的名字.properties
3、url
http://localhost:8080/struts2_17_I18N/test.action
十三、
1、防止表单重复提交
1、在提交的表单中加入一个token标签
2、在对应的action中引用token拦截器
3、如果表单重复提交,token拦截器会return "invalid.token"
所以一般可以配置到result中,例如:
<result name="invalid.token" type="redirect">/register.jsp</result>
十四、
1、struts2的json
步骤:
1、导入插件包
struts2-json-plugin-2.3.16.3.jar
2、如果某个action里属性需要序列化成json,那这个action所在的包必须继承json-default
3、在2的基础上,将那个action里的result的type属性设置为json
2、url
http://localhost:8080/Struts2_16_Json/f1.action
http://localhost:8080/Struts2_16_Json/f2.action
http://localhost:8080/Struts2_16_Json/f3.action
http://localhost:8080/Struts2_16_Json/f4.action
3、@Json,放在get方法头部
format:格式化显示的内容
serilize:是否序列化成json,如果设置为false,不转json。
功能和去掉get方法一样name:修改键的名字
十五、
1、url
http://localhost:8080/struts2_19_IndexAndException/bchy/login
2、path
http://localhost:8080/struts2_19_IndexAndException/bchy/a/c/b/login
1、http://localhost:8080/struts2_19_IndexAndException/bchy/a/c/b/login
2、如果1没有对应的action,http://localhost:8080/struts2_19_IndexAndException/bchy/a/c/login
3、如果2没有对应的action,http://localhost:8080/struts2_19_IndexAndException/bchy/a/login
4、如果3没有对应的action,http://localhost:8080/struts2_19_IndexAndException/bchy/logingg
5、如果4没有对应的action,http://localhost:8080/struts2_19_IndexAndException/login
6、如果5没有对应的action,404。