首先加入jar包(Fileupload)前端
在網頁中使用表單提交的時候,提交方式必須是post提交方式,編碼必須是multipart/form-data,還有就是要文件上傳的文本框,必須給它起名字,如圖所示:java
其中劃橫線的就是要注意的地方。web
還須要在springmvc的配置文件中配置文件上傳解析器正則表達式
<!-- 配置上傳文件解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 設置上傳文件的字節大小 --> <property name="maxUploadSize" value="9999999"></property> </bean>
其中bean標籤的id必須叫multipartResolver,否則程序會報錯誤。spring
在控制層controller裏想要實現文件上傳的功能的說明;服務器
@RequestMapping("upload") public String upload(MultipartFile myfile,HttpServletRequest request,Users user) { String path=request.getServletContext().getRealPath("/upload"); request.setAttribute("path", path); System.out.println(path); File file=new File(path); if(file.exists()) { file.mkdirs(); } String name=myfile.getOriginalFilename(); user.setPhoto(name); File targetfile=new File(path+"/"+name); try { FileUtils.writeByteArrayToFile(targetfile, myfile.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("u", user); return "login"; }
在該方法的括號裏獲得文件的對象,String path=request.getServletContext().getRealPath("/upload");這句話是經過request獲得上傳文件的真實路徑,也就是在服務器中的位置mvc
File file=new File(path); if(!file.exists()) { file.mkdirs(); }
此代碼是獲取一個新的文件對象,若是沒有這個路徑,那麼就從新建立一個新的路徑。有就正常執行下面的代碼。
String name=myfile.getOriginalFilename();獲取的是文件名
File targetfile=new File(path+"/"+name);是獲得文件的整個路徑;
try { FileUtils.writeByteArrayToFile(targetfile, myfile.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("u", user); return "login"; }
是爲了把文件寫入到該路徑下。
建立一個包存放Interceptor的這個類而且實現HandleInterceptor的接口這,而後重寫接口裏面的方法app
package HandleInterceptors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.zhiyou100.lw.bean.Users; public class MyInterceptors implements HandlerInterceptor{ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // TODO Auto-generated method stub } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { // TODO Auto-generated method stub } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { if(request.getSession().getAttribute("u")==null) { response.sendRedirect("login.do"); return false; } return true; } }
這個方法是在控制層處理完以後執行的,最後執行,用於關閉一些資源的方法ide
這是這也是在控制層處理完後執行的post
這個方法是在控制層處理前執行的,通常在這裏執行攔截的功能,
把建立的類配置到springmvc文件中,如圖:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/user/**"/> <mvc:exclude-mapping path="/user/login.do"/> <mvc:exclude-mapping path="/user/logindo.do"/> <bean class="HandleInterceptors.MyInterceptors"></bean> </mvc:interceptor> </mvc:interceptors>
<mvc:mapping path="/user/**"/> 是把攔截的文件全部文件寫入到path中
<mvc:exclude-mapping path="/user/login.do"/> <mvc:exclude-mapping path="/user/logindo.do"/>它們都是被放行的文件,程序不攔截它們
和controller控制層的代碼配合實現了攔截功能。
第一步引入相關的jar包有:
校驗須要用到的jar包,缺一不可。
在實體類中加入註解
@NotEmpty(message=「用戶名不能爲空」),這個是不能爲空校驗的註解,message中的類容是提示內容,錯誤後提示
@Length(min=6,max=12,message=「密碼長度在6~12個字符之間」),這個是限制長度的註解,min是最少長度,max是最長長度
@Pattern(regexp=「。。。。。」)這個是對手機號碼的校驗。雙引號裏面的是正則表達式
在控制層接收參數的代碼
在使用註解的實體類以前加上@Valid,表明的是對該對象進行校驗,BindingResult br,表明的是封裝全部的錯誤到這個對象裏面
br.hasErrors,這個方法是判斷是否有錯誤信息的,有的話就進入裏面,br。getFieldErrors,是得到對象裏面的全部信息,包括屬性名,和錯誤信息
若是想讓這些信息可以在前端頁面上顯示出來,就得想一個方法,就是把它封裝到集合裏面,頁面中就直接點鍵名就能調用此屬性名的錯誤信息了
就new一個map集合,for循環全部的錯誤信息,而後獲得錯誤信息的屬性名,和錯誤信息的內容,將屬性名當作鍵,內容當作值,存入到map集合裏,
最後把集合隨着跳轉就把數據傳送到頁面中去了
頁面接收顯示信息的代碼:
根據鍵值獲取對象。