springMVC在控制層參數的設置


文件的上傳

首先加入jar包(Fileupload)

 

 

在網頁中使用表單提交的時候,提交方式必須是post提交方式,編碼必須是multipart/form-data,還有就是要文件上傳的文本框,必須給它起名字,如圖所示:

 

 

 其中划橫線的就是要注意的地方。

還需要在springmvc的配置文件中配置文件上傳解析器

<!-- 配置上傳文件解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 設置上傳文件的字節大小 -->
        <property name="maxUploadSize" value="9999999"></property>
    
    </bean>

其中bean標簽的id必須叫multipartResolver,不然程序會報錯誤。

在控制層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得到上傳文件的真實路徑,也就是在服務器中的位置

 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的接口這,然后重寫接口里面的方法

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;
        
    }

}

 

 

 這個方法是在控制層處理完之后執行的,最后執行,用於關閉一些資源的方法

 

 

 這是這也是在控制層處理完后執行的

 

這個方法是在控制層處理前執行的,一般在這里執行攔截的功能,

把創建的類配置到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集合里,

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

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

根據鍵值獲取對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM