springMVC在控制層參數的設置

文件的上傳

首先加入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集合裏,

最後把集合隨着跳轉就把數據傳送到頁面中去了

頁面接收顯示信息的代碼:

根據鍵值獲取對象。

相關文章
相關標籤/搜索