struts学习笔记(三)

本文深入探讨Struts框架的Token机制,介绍如何通过Token防止重复提交及恶意破坏,并讲解Struts的异常处理方式、动态Form的配置与使用,以及动态校验的实现方法。
Struts的Token(令牌)机制

Struts使用Token机制,来防止恶意的破坏和重复提交问题,也就是点击后退后在再提交,这是Struts无法发现的,
在form中生成一个token码,在session中也报村有一个同样的token码,当表单提交后,判断两个token码向等后,
就会改变session中的这个token码,当然在用回退后,form的token码是不会变的,在提交,
还会判断两个token码是否相等,如果不等就会抛出异常,证明这是过时的垃圾数据。

void saveToken(HttpServletRequest request)方法用于将在客户端生成的token码,保存在session中。
void resetToken(HttpServletRequest request)方法用于重置token码,生成新的token码。
boolean isTokenValid(HttpServletRequest request,boolean reset)判断token码是否相等,并且是否重置token码。
reset是设定是否重置token码,一般设为true。

设置token码
public ActionForward toadd(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)throws Exception
{
saveToken(request);
return mapping.findForward("next");
}

验证token码
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)throws Exception
{
if(isTokenValid(request, true)){
request.setAttribute("message", "contratulation!");
} else {
request.setAttribute("message", "sorry");
}
return mapping.findForward("next");
}


Struts的异常处理

Struts只处理action的异常,
配置struts的异常处理
全局的异常处理

<global-exceptions>
<exception key="error" path="xxx/xxx" type="xxx.xxx.Xxxx">
</global-exceptions>

<action path="xxx/xxx" type="xxx.xxx.Xxxx">
....
<exception key="xxx" path="xxx/xxx" type="xxx.xxx.Xxxx">
</action>
在exception标签中的key,也就是在出现异常时会封装在ActionErrors中,也就是可以在页面中使用。
ActionError(String key, Object value0),可以通过在构造ActionError时,指定不同的key值来对异常进行分类,
并且在html:error标签的

自己构造ActionErrors并使用下面的方法发送

void saveErrors(HttpServletRequest request,ActionErrors errors)这个方法用以把封装了异常的ActionErrors的key存储到request中。

Struts动态Form

DynaActionForm,动态的ActionForm,动态的form不需要去写特定的ActionForm类,只需要在配置文件中配置好form
中的属性名和属性类型。以,Struts会自动的封装成动态的Form。

<form-bean name="xxx" type="org.apache.struts.action.DynaActionForm">
<from-property name="xxx" type="xxx.xxx.xxx">
<from-property name="xxx" type="xxx.xxx.xxx">
...
...
</form-bean>
动态的ActionForm的使用上和普通的ActionForm相同。
在Struts中的Form要是粗粒度的,不要写太多的Form,要根据情况确定Form的多少。

Struts的动态校验

Struts可以通过继承DynaActionForm,并覆盖validate()方法来打倒校验的目的。也可以通过配置校验规则来进行动态
Form的校验实质上就是翻译成javasctipt代码。
使用校验规则来进行动态校验时需要写validation.xml,validator-rules.xml
还需要对struts-config.xml进行配置

validation.xml

<form-validation>
<formset>
<form name="/token/add">
<field property="name" depends="required,minlength, maxlength">
<arg0 key="token.name" />
<arg1 name="minlength" key="${var:minlength}" resource="false"/>
<arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>5</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>8</var-value>
</var>
</field>
</form>
</formset>
</form-validation>

struts-config.xml

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值