struts2 拦截器
来源:互联网 发布:安卓超牛数据恢复软件 编辑:程序博客网 时间:2024/06/17 19:00
了解拦截器
拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.
自定义拦截器
/** * 创建一个普通类继承 AbstractInterceptor,实现抽象方法intercept * */public String intercept(ActionInvocation invocation) throws Exception { System.out.println("执行动作方法之前"); //放行:如果有下一个拦截器,就前往下一个拦截器,如果没有了,就到达动作方法 String invoke = invocation.invoke();//结果视图名称 System.out.println("执行动作方法之后"); return invoke; }}
struts.xml注册拦截器
<!--声明拦截器--><interceptors> <interceptor name="interceptorOne" class="inerceptor.InterceptorOne"></interceptor> </interceptors> <action name="funOne" class="web.IterceptorAction" method="demoFunctionOne"> <!--使用拦截器--> <interceptor-ref name="interceptorOne"></interceptor-ref> <result name="success">/index.jsp</result> </action>
执行顺序
执行动作方法之前2017-06-19 15:23:10,554 action方法2017-06-19 15:23:10,561 执行动作方法之后
检查登录拦截器
public String intercept(ActionInvocation arg0) throws Exception { Object user = ServletActionContext.getRequest().getSession().getAttribute("user"); if(user!=null){ return arg0.invoke(); }else { return "login"; } }
当我们使用了自定义拦截器之后,默认的拦截器栈就不再工作了
<package name="default" extends="struts-default"> <interceptors> <interceptor name="checkLoginInterceptor1" class="interceptor.CheckLoginInterceptor1" /> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="checkLoginInterceptor1"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref> <global-results> <result name="input">/login.jsp</result> </global-results> <action name="login" class="web.action.Demo2Action" method="login"> <interceptor-ref name="myDefaultStack"> <!-- 在引用自定义拦截器栈的时候,给指定的拦截器注入参数。方式就是:拦截器名称.属性名称 --> <param name="checkLoginInterceptor1.excludeMethods">login</param> </interceptor-ref> <result type="redirectAction">showMain</result> </action> <action name="showMain" class="web.action.Demo2Action" > <result>/main.jsp</result> </action> <action name="showOther" class="web.action.Demo2Action" > <result>/otherpage.jsp</result> </action> </package>
文件上传拦截器
表单
<s:from action="fileUpload" enctype="multipart/from-data"><s:file name="photo" lable="照骗"></s:file><s:submit value="提交"></s:submit>
Action
private File photo; //上传文件名 写法:上传字段名称+FileName private String photoFileName; private String photoContext; public String upload(){ String path = ServletActionContext.getServletContext().getRealPath("WEB-INF/Files"); File file=new File(path); if(file.exists()){ file.mkdirs(); } photo.renameTo(new File(file,photoFileName)); return null; }
struts.xml
设置文件上传大小
<constant name="struts.multipart.maxSize" value="123456"></constant>
<action name="fileUpload" class="web.action.UploadAction" method="upload"> <param name="fileUpload.maximumSize">31457280</param>--> <interceptor-ref name="defaultStack"> <!-- 限制上传文件的MIME类型。 如果有多个,使用逗号分隔 --> <param name="fileUpload.allowedTypes">image/jpg,image/pjpeg,image/png</param> </interceptor-ref> <result name="input">/upload1.jsp</result> </action> <action name="upload1" class="web.action.UploadAction1" method="upload"> <result name="input">/upload2.jsp</result> </action>
上传失败错误信息提示
解决办法:用国际化消息资源包,把对应的key取值改为中文即可。
文件下载
//注意:在给InputSteam指定名称时,不能使用in private InputStream inputStream; //创建一个文件名的属性 private String filename; public String download()throws Exception{ //1.找到文件的存储路径 String filePath = ServletActionContext.getServletContext().getRealPath("/WEB-INF/files/5.jpg"); //2.把文件读到一个InputStream中 inputStream = new FileInputStream(filePath); //在返回之前,给filename赋值 filename="照片.jpg"; //3.返回一个成功 return SUCCESS; //4.由一个叫做stream的结果类型为我们把剩下的事情做完。 }
<action name="download" class="web.action.DownloadAction" method="download"> <result name="success" type="stream"> <!-- 给stream的结果类型注入参数:Content-Type --> <param name="contentType">application/octet-stream</param> <!-- 告知客户浏览器以下载的方式打开 <param name="contentDisposition">attachment;filename=photo.jpg</param> --> <!-- 使用OGNL表达式,来动态获取文件名 ${@java.net.URLEncoder@encode(filename,"UTF-8")} 把${}中间的内容当成一个OGNL表达式来看待 --> <param name="contentDisposition">attachment;filename=${@java.net.URLEncoder@encode(filename,"UTF-8")}</param> <!-- 注入字节输入流 :取值要写动作类中set方法的名称,首字母改成小写--> <param name="inputName">inputStream</param> </result> </action>
阅读全文
0 0
- 【Struts2】Struts2中拦截器
- struts2拦截器
- Struts2拦截器
- struts2.0拦截器
- struts2.0 拦截器
- struts2拦截器学习
- struts2 拦截器
- Struts2拦截器(Interceptor)
- struts2.0拦截器
- 用上struts2拦截器
- struts2拦截器简介
- Struts2:拦截器概述
- Struts2拦截器(Interceptor)
- struts2 拦截器
- 关于struts2拦截器
- Struts2的拦截器
- struts2拦截器
- Struts2拦截器总结
- ffmpeg-avplayer-for-ios
- 串口终端如何加上登陆名和密码
- Android 采用广播接收者实现短信应用
- 竞品分析思维导图
- Python os模块
- struts2 拦截器
- Ubuntu 16.04 编译全志6.0Android源码
- Linux基础(四)
- java httpsession强制用户下线
- 【0004】安装win10后,正确删除掉C盘的Windows.old文件夹
- Android车机启动后判断是否存在USB存储设备
- 适配器与Activity之间相互传值
- 解决srcollview嵌套recycleview冲突
- PHP 中对MySql 数据库的增删改查