springmvc文件上传和拦截器
文件上传
用到这两个包
配置视图解析器:springmvc配置文件配置
<!-- id必须要是“multipartResolver” --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- maxUploadSize文件上传的最大值,单位是byte --> <property name="maxUploadSize" value="1024000000"></property> </bean>
Form.jsp
<form action="test/toPerson8.do" method="post" enctype="multipart/form-data"> name:<input name="name" type="text"><br/> age:<input name="age" type="text"><br/> address:<input name="address" type="text"><br/> birthday:<input name="birthday" type="text"><br/> pic:<input type="file" name="pic"><br/> <input type="submit"><br/> </form>
新建文件夹 upload在webroot下;存放上传的文件;
提交表单:
@RequestMapping(value="/toPerson8.do")
public String toPerson8(Person person,HttpServletRequest request) throws Exception{
//第一步转化request
MultipartHttpServletRequest rm = (MultipartHttpServletRequest) request;
//获得文件
CommonsMultipartFile cfile = (CommonsMultipartFile) rm.getFile("pic");
//获得文件的字节数组
byte[] bfile = cfile.getBytes();
String fileName = "";
//获得当前时间的最小精度
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
fileName = format.format(new Date());
//获得三位随机数
Random random = new Random();
for(int i = 0; i < 3; i++){
fileName = fileName + random.nextInt(9);
}
//获得原始文件名
String origFileName = cfile.getOriginalFilename();
//XXX.jpg
String suffix = origFileName.substring(origFileName.lastIndexOf("."));
//拿到项目的部署路径
String path = request.getSession().getServletContext().getRealPath("/");
//定义文件的输出流
OutputStream out = new FileOutputStream(new File(path+"/upload/"+fileName+suffix));
out.write(bfile);
out.flush();
out.close();
return "jsp/index";
}
重启tomcat
http://localhost:8080/springmvc-2/test1/toForm.do
选择一个文件 提交,成功;
多了一个图片
在tomcat下:
D:\java\apache-tomcat-6.0.37\webapps\springmvc-2\upload
拦截器:
新建包:cn.edu.hqu.interceptor
类:MyInterceptor implements HandlerInterceptor;
三个方法分别对应前面图三个拦截,
Perihandle前置拦截:最多的是对权限的拦截
/**
* 执行时机:在执行controller之前来执行
* 返回值类型:boolean:true代表放行可以访问controller,
* false表示不可以访问controller
*/
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
return false;
}
}
Posthandle后置拦截:
/**
* 执行时机:controller执行完,视图解析器没有把视图解析成页面
* 对视图做统一的修改,主要提现的Model上
*/
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView mv) throws Exception {
}
最终拦截:
/**
* 执行时机:视图已经被解析完毕,类似try catch 后的finally
*/
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
}
在每个方法输出一句话:
System.out.println("afterCompletion...");
System.out.println("postHandle...");
System.out.println("preHandle...");
将前置拦截改成true;
配置拦截器:在springmvc配置文件配置
<mvc:interceptors> <mvc:interceptor> <!-- 对所有的请求都拦截,使用/**,对某个模块下的请求做拦截/模块名/* --> <mvc:mapping path="/**"/> <bean class="cn.edu.hqu.interceptor.MyInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
重启tomcat 访问
http://localhost:8080/springmvc-2/test/toForm.do
控制台输出:
preHandle...
postHandle...
afterCompletion...
将前置拦截改成false
访问
http://localhost:8080/springmvc-2/test/toForm.do
无法进行跳转;控制台输出:
preHandle...
前置拦截 改成true
输出拦截器的test
后置拦截:
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView mv) throws Exception {
System.out.println("postHandle...");
Map<String, Object> map = mv.getModel();
map.put("test", "addpend something by Jerome");
}
Jsp/index.jsp
加 <h5>${test}</h5>
重启tomcat 访问
http://localhost:8080/springmvc-2/test/toPerson5.do
输出:
…
addpend something by Jerome
模拟异常:
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception ex) throws Exception {
System.out.println("afterCompletion...");
ex.printStackTrace();
System.out.println("===========");
}
在页面输出 :jsp/index.jsp下面加 <%=1/0 %>
访问:http://localhost:8080/springmvc-2/test/toPerson5.do
异常:控制台
拦截器里面方法的输出;这捕捉到异常可以做日志监控方面的工作;
补充:
加载配置文件,我们配置文件一般放在config下,名字也可以自己取;
只要在web.xml配置
<!-- springmvc的中央控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet>
初始化配置文件;
源码下载:http://pan.baidu.com/s/1mg3GcLq
springmvc文件上传和拦截器的更多相关文章
- 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2 spring-mv ...
- 2017/2/12:springMVC的简单文件上传跟拦截器
1.写文件上传的界面jsp代码如下重点为文件上传标签的类型 2.写登录成功跟失败的界面:成功自己写 3.写springMVC的文件上传的controller的方法 4.最后一步配置spring-ser ...
- struts2之多文件上传与拦截器(8)
前台jsp <s:form action="uploadAction" enctype="multipart/form-data" method=&quo ...
- struts2 基础3 文件上传、拦截器
文件上传: 1.将头设置为enctype=”multipart/form-data” <form action="${pageContext.request.contextPath } ...
- springMVC文件上传大小超过限制的问题
[转自]https://my.oschina.net/ironwill/blog/646762 springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便. 我们通过下面的配置来 ...
- springmvc文件上传AND jwt身份验证
SpringMVC文件上传 思路:1.首先定义页面,定义多功能表单(enctype=“multipart/form-data”)2.在Controller里面定义一个方法,用参数(MultipartF ...
- SpringMVC文件上传和下载
上传与下载 1文件上传 1.1加入jar包 文件上传需要依赖的jar包 1.2配置部件解析器 解析二进制流数据. <?xml version="1.0" encoding=& ...
- springmvc文件上传下载简单实现案例(ssm框架使用)
springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...
- 18 SpringMVC 文件上传和异常处理
1.文件上传的必要前提 (1)form 表单的 enctype 取值必须是:multipart/form-data(默认值是:application/x-www-form-urlencoded) en ...
随机推荐
- 常用linux命令备忘
备忘: 关闭防火墙:# systemctl stop firewalld 查看防火墙状态:# systemctl status firewalld 停止防火墙:# systemctl disabl ...
- Mysql之触发器的操作:
触发器的操作: 1.触发器的创建: (1).创建包含一条语句的触发器 create trigger trigger_name before|after trigger_event on table_n ...
- 实验吧_登陆一下好吗(骚注入)&你真的会PHP吗?(代码审计)
登陆一下好吗 首先看到两个输入框,分别对应账号密码,随手输个admin,admin进去,提交后发现有回显,既然题目说了过滤了一切,那就先看看过滤了些啥 经过一波测试,发现服务器过滤了union,sel ...
- [测试题]神在夏至祭降下了神谕(oracle)
Description 我们村子在过去的 400 年中, 断绝与下界的接触, 过着自给自足的生活.夏至祭是一场迎接祖灵于夏季归来, 同时祈求丰收的庆典.村里的男人会在广场上演出夏之军和冬之军的战争. ...
- [Codeforces 448C]Painting Fence
Description Bizon the Champion isn't just attentive, he also is very hardworking. Bizon the Champion ...
- 计蒜客NOIP模拟赛4 D1T2小X的密室
小 X 正困在一个密室里,他希望尽快逃出密室. 密室中有 N 个房间,初始时,小 X 在 1 号房间,而出口在 N 号房间. 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条 ...
- ●BZOJ 1416 [NOI2006]神奇的口袋
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1416题解: Pòlya瓦罐模型: 给定罐子里每种颜色的球的个数A[i],按题目要求随机操作若 ...
- 【bzoj4011 hnoi2015】落忆枫音
题目描述 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂......我们也不可能再 ...
- MySQL数据库将多条记录的单个字段合并成一条记录
原SQL AND acc.id = accRole.acc_id) AND accRole.role_id = T_PM_ROLE.id ORDER BY acc.id 结果,有一个人有两个角色,如果 ...
- 使用pscp实现Windows 和 Linux 服务器间的远程拷贝文件
在工作中,每次部署应用时都需要从本机Windows 服务器拷贝文件到Linux 上,有时还将Linux 上的文件拷到本机,这些操作都是可以使用pscp实现的.下文将详细描述如何使用: PSCP (Pu ...