MVC框架之Struts2总结笔记

一、struts1
Bean需要继承ActionForm,Struts1会给你封装form,而且需要配置到struts1的配置文件中。<form-beans></form-beans>,还需要在action中引用,<action name=”usr”>

继承DispatchAction可以自己编写自己的方法,在配置文件中加个paramter,可指定方法名的字段

步骤:
1. 导包
2. 配置web.xml,配置ActionServlet,设置初始化参数config value=struts-config.xml
3. 编写实现了Action的类
4. 编写继承Action的类。重写其方法或自己写方法。编写domain,需继承ActionForm
5. 配置struts-config.xml
a) 配置bean
b) 配置action
多方法请求,继承DispatcherAction,此类在strut1的扩展包中.

二、struts2
Struts2的request
Struts2会将属性信息放到值栈 中去。而且页面中获取的request对象已经经过struts2包装。类似与在Tomcat中,访问的jsp页面取出的request是被tomcat包装过。Struts2的实现是经过struts2的核心过滤器后,重新包装了它的request


Struts2不是把Action的属性放在request中,而是直接把自己的Action放进去,然后在自己get
1、通过属性驱动来封装对象
2.2.3可以把未初始化的对象自动初始化。
2、通过模型驱动
在Action中实现ModelDriver接口,重写getMode方法,先初始化接收的对象

3、可获得原生的ServletAPI
1.通过ServletActionContext.getRequest()/ getSession()
2.可通过注入方式获取,需实现ServletRequestAware/ServletSessionAware
4、非IOC方式,实现RequestAware,实现的方法返回map
可通过ActionContext.getContext().getParameters()

Result结果类型


plantText注意IE必须设置头
redirect 参数可以由${name}取出 默认从request中取<param name=”xxx” > ${xx}</parma>
,而#{session.xx}是获取非根对象
Redirect与redirectAction的区别:
redirectAction继承redirect参数不一样

redirectAction:参数
actionName
namespace
supressEmptyParamters控制空参数
dispatch:必须是一个JSP或html资源
chain:必须转发到一个action资源,共享属性值
参数:actionName :
namespace : /xxx


异常的处理。
<exception-mapping />


Struts2的类型转换
自动转换

COS上传下载(见徐文海文件上传下载)

Struts2自带上传
1. 声明一个File类型的成员变量,需要与字段名相同img
2. 必须实现保存功能.在execute中利用FileUtils.copyFile
3. 必须要再实现另一个变量来转梦保存文件名 imgFileName
4. 必须再实现一个变量来获得文件类型 imgContentType

Struts2的get方式乱码解决方式:
写过滤器,重写request的getPramaterMap();


多文件上传: 都是数组类型也可以使List
1. 声明文件 File[] file;
fileFileName
fileContextType
文件下载
Result类型stream
参数
inputName 作为action的属性
contentType image/jpeg
contentDisposition attachment/filename=”xx.pdf”
contentSize 缓冲大小

拦截器
一、步骤
1. 书写实现Interceptor接口的类
2. 实现interceptor方法,返回值
3. 配置文件中配置
4. 配置哪个action拦截
<Interceptors> Minterceptor name=”fist” class=””>
b) 在Action配置中使用拦截器
5. 获取session
ActionContext.getContext().getSession()
Invocation.getInvocationContext().getSession();

二、配置了拦截器的影响:默认拦截器失效将会失效(例如:参数获取不到)
影响的解决:引用系统的拦截器。如果需要上传,则引用系统的上传拦截器,等等。

三、 配置默认拦截器:即使不引用也可以执行的拦截器。配置default-interceptor-ref 会对本包的action起作用。
四、 配置拦截器栈:可包含多个拦截器。
<interceptors>
<interceptor name=”first” class=”” />
<interceptor-stack name=”complex”>
<interceptor-ref name=”first” />
<interceptor-ref name=”defaultStack” />”
</interceptor>
</interceptors>

Interceptor 的实现方法
Public String interceptor(ActionInvocation invo) {

}

五、 拦截器栈会创建一次拦截器的默认构造,另外每配置的action都会创建一次,如果把拦截器放在栈中,则只会创建一次。


六、拦截方法的拦截器: MethodFilterInterceptor
·使用param标签设置excludeMethods过滤排除某方法不拦截
includeMethods谁配置谁起作用,includeMethods优先


Struts2的标签,OGNL表达式
1.OGNL以某个对象作为根
2.%不是脚本的变为脚本 ,类似js的eval
<s:url value=”%{#request.url}” />
3.$表示 用在xml
4. @调用静态的方法,默认为java.lang.Math配合 struts.ognl.allowStaticMethodAccess 为true
5.#号
1.用于其他范围内的取,
2.声明Map或List。{{‘a’,’b’,c}},#{‘a’:’AAA’,’b’:’BBB’}
3.投影过滤{#{’name’:’wj’,’age’:40},#{’name’:’other’,’age’:99}} #a1.{?this.age>90}
^#第一个 $#最后一个
标签
Uri=”/struts-tags”
<s:property value=”xxxx” /> àJSTL 里的<c:out/>
<s:a action=”xxx” />
<s:iterator value=”xxx” var==”x” /> à <c:forEach />
<s:action name=”xx.action”/>包含action资源



struts2处理json
1、布置JSON插件
2、继承json-default包
3、修改result 的Type=json
4、使用注解@JSON(NAME=”XXX”)改名,@JSON(serialized=fasle)不输出
注意循环调用
使用JsonConfig jc = new JsonConfig();
Js.setExcludes(new String[]{“addr”,”addr.user”});
JsonObect o = JsonObject.from(u,jc);

自定义类型转换器
两种方式:局部和全局,局部为某个Action
1. 继承父类的opensym. DefaultTypeConvertor
可双向转换
2. 配置
a). 局部的
需在Action所在的包中放置XXXAction-convertion.properties,然后配置文件 这个Action的属性birthday=DateTypeConverter.,这样就转换好了
b). 全局类型转换器
将上述的properties放在classpath根下,更名为xwork-conversion.propertis.
将上面的字段换成需转换的类型如java.util.Date

输入校验
方式:
1. 手工编写方式
XML配置方式
校验内容:
Action所有方法
Action中某个方法
步骤:
1. 继承ActionSuppor类
2. 重写validate方法
3. 在方法在判断如果不符合,使用addFieldError方法输出信息(对所有方法进行验证),此操作会往fieldErrors集合中添加错误信息,如果集合中包含错误信息,会请求转发input的result
4. 第3步的输出可在input的转发页面上使用struts2的标签输出<s:fielderror/>
5. 如果想对某个方法进行校验,可以修改第三步的validate为validateXxx方法,其他的步骤一样。
XML验证:
1. 继承ActionSupport类
2. 新建XXXAction-validation.xml,放在action所在的包
3. 配置xml, <validators><field name=”username>
<field-validator type=”requiredstring”>//必须 的,是校验器
<param name=”trim”>true</parrm>
<message>用户名不能为空</message>
</field-validator>
</field>
/validators>

4. 校验器是在struts的包中,校验器:
Regex expiress <![CDATA[^1[358]\d{9}$]]>
requiredstring trim必填
required不能为null
stringlength maxLength/minLength 符合长度
int 整型 min max
double 双精度浮点 min max
fieldexpression OGNL表达示
email
url网址
date min max
conversion 类型转换校验器
visitor 校验复合属性
expression OGNL
5. 对Action的方法校验:ActionClassName-ActionName-validation.xml

验证的流程:
1. 获得参数,进行类型转换,封装到Action的属性中去。
2. 在类型转换期间如果发生异常,则把异常信息保存到ActionContext中,conversionError拦截器会把它添加到fieldErrors里,不管类型转换是否成功,都会进入下一步。
3. 系统通过反射调用action中的validateXxx方法。
4. 再调用action中的validate方法
5. 如果fieldErrors中有值,则进入input视图,否则执行action中的视图
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值