1. 程式人生 > >springmvc檔案上傳和攔截器

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

相關推薦

SSM框架——springmvc檔案攔截

檔案上傳 1.檔案上傳前提 form表單的enctype取值必須是:mutipart/form-data(預設值是:application/x-www-form-urlencoded) method屬性取值必須是Post 提供一個檔案選擇域 2.使用 Commo

springmvc檔案攔截

檔案上傳 用到這兩個包 配置檢視解析器:springmvc配置檔案配置 <!-- id必須要是“multipartResolver” --> <bean id="multipartResolver" class="org.springframewo

Java框架(十五)之springMVC檔案攔截

一、jackson @RequestBody/ @ResponseBody處理Json資料 作用: @RequestBody註解用於讀取http請求的內容(字串),通過springmvc提供的HttpMessageConverter介面將讀到的內容轉換為json

SpringMVC檔案下載

1. 檔案上傳 SpringMVC通過MultipartResolver來實現檔案上傳,預設沒有裝配,使用MultipartResolver需要加上commons-fileupload這個jar包。 1.1 配置MultipartResolver <!--配置上傳檔案控制元

springmvc請路徑引數,springmvc-json-ajax使用,springmvc檔案,springmvc檔案下載,springmvc攔截(內容較多)

按照操作,絕對都可以實現,親測。。。。。(專案所有檔案和目錄結構全都放上去了) idea工具,建立maven專案 第一步: 放置各種配置檔案: pom.xml <?xml version="1.0" encoding="UTF-8"?> <p

springMVC整理04--文件 & 攔截 & 異常處理

1.2 cli 啟用 錯誤頁 ini val con 捕獲 錯誤頁面 1. 文件上傳 SpringMVC 的文件上傳非常簡便,首先導入文件上傳依賴的 jar: 1 <!-- 文件上傳所依賴的 jar 包 --> 2 <dependency>

SpringMVC框架中實現檔案下載

首先在springmvc.xml中配置檔案上傳的屬性 <!-- 檔案上傳的屬性值 --> <bean id="multipartResolver" class="org.springframework.web.multi

SpringMVC檔案下載

    SpringMVC會根據請求方法簽名的不同,將請求訊息中的資訊以一定的方式轉換並繫結到請求方法的引數中。在請求訊息到達真正呼叫處理方法的這段時間內,SpringMVC還會完成很多其他的工作,包括請求訊息轉換、資料轉換、資料格式化以及資料校驗。一:SpringMVC實現

使用springMVC實現檔案下載之檔案下載

接上一篇,檔案下載需要獲取下載檔案的儲存路徑,這裡只是手動填入,如果是在具體專案中,可以把檔名和上傳後的儲存路徑儲存在資料庫中。然後增加一個檔案列表的頁面展示檔名和檔案路徑,然後點選下載的時候把相應的

springmvcservlet下的檔案下載(存檔案目錄存資料庫Blob兩種方式)

專案中涉及了檔案的上傳和下載,以前在struts2下做過,今天又用springmvc做了一遍,發現springmvc封裝的特別好,基本不用幾行程式碼就完成了,下面把程式碼貼出來: FileUpAndDown.jsp <%@ page language="java"

springmvc實現檔案下載

springmvc實現檔案上傳的步驟: 1.頁面上,通過input來準備file元件,該標籤,必須給定name屬性值(該name不能和實體類的屬性名一致)同時,要求form表單必須給定一個屬性:enctype="multipart/form-data"<form a

系列五、springMVC實現檔案跨伺服器檔案

一、實現檔案上傳 專案目錄如下所示 一、匯入依賴和配置springmvc.xml、web.xml 這個兩個jar

多文件攔截

quest 配置文件 mon index.jsp except for can ring servle @Controller public class MostFileController { //多文件上傳 @RequestMa

springmvc實現下載

transfer try .com print frame row 快捷鍵 oid inpu 非常簡單的小例子,註釋的很清楚。話不多少,看代碼 FileController.java package com.imooc; import org.apache

javaExcel檔案下載

上傳在頁面必須加上下面屬性 <form method="post" enctype="multipart/form-data" target="frameFile" action="${vehiclePath }/bindVehicle?${_csrf.parameterName}=$

SpringBoot多檔案檔案下載

1、前端的form表單: <form id="form"  action="controller層的多檔案上傳方法訪問路徑" method="post" enctype="multipart/form-data"> <input  type="file" n

xshell 檔案下載

xshell 檔案上傳和下載 介紹兩種方式:命令、工具 上傳和下載參照物件是本機 命令: 1.sz  檔案下載(檔案大小限制 4G) 2.rz 檔案上傳 工具: File Transfer(工具欄中有) 這個沒有上

Struts2的檔案下載(1)單檔案

在struts2中整合fileuoload功能,因為在匯入的jar包中包含了common-fileipload.jar檔案 在struts2中的interceptor 中有一個fileupload攔截器,他的主要功能就是完成檔案上傳。 注意事項 method=post

SpringMVC檔案的方式

檔案上傳怎麼上傳?渣渣的筆記,可能幫助到你哦!!! 檔案上傳的流程如下: 一、在你的IDEA裡面建立一個web工程,在你的WEB-INF目錄下建立lib目錄,同時呢匯入springmvc需要的架包。 二、在配置好架包後,在你的src中建立一個xml檔案,我這裡取名為(spring-

**#使用springboot進行檔案下載**

使用springboot進行檔案上傳和下載 ##檔案下載功能的實現思路: 1.獲取要下載的檔案的絕對路徑 2.獲取要下載的檔名 3.設定content-disposition響應頭控制瀏覽器以下載的形式開啟檔案 4.獲取要下載的檔案輸入流 5.建立資料緩衝區//緩衝區解釋