文件上传

用到这两个包

配置视图解析器: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文件上传和拦截器的更多相关文章

  1. 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

     1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mv ...

  2. 2017/2/12:springMVC的简单文件上传跟拦截器

    1.写文件上传的界面jsp代码如下重点为文件上传标签的类型 2.写登录成功跟失败的界面:成功自己写 3.写springMVC的文件上传的controller的方法 4.最后一步配置spring-ser ...

  3. struts2之多文件上传与拦截器(8)

    前台jsp <s:form action="uploadAction" enctype="multipart/form-data" method=&quo ...

  4. struts2 基础3 文件上传、拦截器

    文件上传: 1.将头设置为enctype=”multipart/form-data” <form action="${pageContext.request.contextPath } ...

  5. springMVC文件上传大小超过限制的问题

    [转自]https://my.oschina.net/ironwill/blog/646762 springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便. 我们通过下面的配置来 ...

  6. springmvc文件上传AND jwt身份验证

    SpringMVC文件上传 思路:1.首先定义页面,定义多功能表单(enctype=“multipart/form-data”)2.在Controller里面定义一个方法,用参数(MultipartF ...

  7. SpringMVC文件上传和下载

    上传与下载 1文件上传 1.1加入jar包 文件上传需要依赖的jar包 1.2配置部件解析器 解析二进制流数据. <?xml version="1.0" encoding=& ...

  8. springmvc文件上传下载简单实现案例(ssm框架使用)

    springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...

  9. 18 SpringMVC 文件上传和异常处理

    1.文件上传的必要前提 (1)form 表单的 enctype 取值必须是:multipart/form-data(默认值是:application/x-www-form-urlencoded) en ...

随机推荐

  1. hive中No space left on device问题或者Java HotSpot(TM)64-Bit Server VM warning:Insufficient space for shared memory

  2. django 表单过滤与查询

    7.1 表的查询 查询 Person.objects.all() Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存 Person.object ...

  3. 2-XOR-SAT

    [题目描述]SAT(Satisfiability,可满足性)问题是著名的 NP 完全问题,它的内容是:判断由有限个布尔变量及其“非”用“或”操作连接起来的表达式组是否可以都为 TRUE.2-SAT 问 ...

  4. APIO dispatching

    题目描述 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增 ...

  5. [BZOJ]3532: [Sdoi2014]Lis

    Time Limit: 10 Sec  Memory Limit: 512 MB Description 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci.请删除若干项,使得4的最长上升子序 ...

  6. 【luoguP4006 清华集训2017】小Y和二叉树

    题目描述 小 Y 是一个心灵手巧的 OIer,她有许多二叉树模型. 小 Y 的二叉树模型中,每个结点都具有一个编号,小 Y 把她最喜欢的一个二叉树模型挂在了墙上,树根在最上面,左右子树分别在树根的左下 ...

  7. Simpson积分(BZOJ2178)

    lrj的代码常数太大T了QAQ,改了一下. #include <cstdio> #include <cmath> #include <algorithm> usin ...

  8. A neural chatbot using sequence to sequence model with attentional decoder. This is a fully functional chatbot.

    原项目链接:https://github.com/chiphuyen/stanford-tensorflow-tutorials/tree/master/assignments/chatbot 一个使 ...

  9. A TensorBoard plugin for visualizing arbitrary tensors in a video as your network trains.Beholder是一个TensorBoard插件,用于在模型训练时查看视频帧。

    Beholder is a TensorBoard plugin for viewing frames of a video while your model trains. It comes wit ...

  10. java中的构造,封装

    今天给大家讲一下面向对象中的构造,封装: 构造:构造方法有以下几个特点:1.方法名和类名一致.2.无返回类型.接下来的几种构造样式,直接上代码吧: //这是一个宠物类 有一个属性:名字(name) p ...