1.拦截器栈可以放多个拦截器
<interceptor-stack name="">
<interceptor-ref name=""></interceptor-ref>
</interceptor-stack>
默认的拦截器栈:不需要调用,默认自己调用了.
<default-interceptor-ref></default-interceptor-ref>
2.拦截器中的观察者模式
PreResultListener 在execute之后,拦截器结束之前执行
3.拦截器实现权限验证
Map map=invocation.getInvocationContext().getSession();
if(null==map.get("user"))
{没有登录返回到登录界面视图
return Action.LOGIN; 一般返回到全局的Login Action,默认的是请求转发
}
else
{
return invocation.invoke();
}
4.全局结果,所有Action都可以使用的.
<global-result>
<result name="login" type="redirect">/login.jsp</result>
</global-result>
防止请求重复提交有两种方式:1,重定向 redirect
2.token(令牌):服务器和客服端各有一个相同的字符串,第一次相同,可以进行处理,然后客服端的字符串改变,第二次提交比对的时候,确认是重复提交.
5.struts的异常处理机制
首先定义自定义处理的异常类,
<exception-mapping result="Invalid" exception="处理类">
全局的异常处理
<globle-exception-mappings>
<exception-mapping result="Invalid" exception="处理类"></globle-exception-mappings>
6.文件上传
注意两点:方法为post,enctype="multipart/form-data"
Action类中注意的:注意引入struts的io包
private File file;//上传的文件
private String fileFileName;//文件的名字
execute()
{
InputStream is=new FileInputStream(file);
OutputStream os=new FileOutputStream("c:\\"+fileFileName);
byte[] buffer=new byte[1024];
int length=0;
while(-1!length==is.read(buffer))
{
os.write(buffer,0.length);
}
os.close();
is.close();
}