文件上傳、數據校驗(后台)、攔截器


1. 文件上傳

  1. 需要上傳的jar包——fileploat

  2. 網頁端
    表單必須是post提交,編碼必須是multipart/form-data 文件上傳文本框必須起名

姓名: 年齡: 上傳文件:
```
  1. 在springMVC中配置文件上傳解析器

```
  1. 在控制層處理代碼

package com.alibaba.wlq.controller;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.wlq.bean.Student;
@Controller
public class StudentController {
@RequestMapping("stuUpload")
public String addStudent(MultipartFile photo,Student stu,HttpServletRequest request,Model model) {
//獲取文件上傳的真實保存路徑
String path = request.getServletContext().getRealPath("/photo");
File file = new File(path);
if(!file.exists()) {
file.mkdirs();
}
String filename = System.currentTimeMillis()+photo.getOriginalFilename();
stu.setSphoto("photo/"+filename);
File targetFile = new File(path+"/"+filename);
try {
FileUtils.writeByteArrayToFile(targetFile, photo.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
model.addAttribute("stu",stu);
return "index";
}
}
```

  1. Student 實體類

package com.alibaba.wlq.bean;
public class Student {
private String name;
private Integer age;
//注意:Student實體類中圖片的屬性名稱不能和文件上傳中名臣屬性的值一致,否則會出現400錯誤
private String sphoto;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSphoto() {
return sphoto;
}
public void setSphoto(String sphoto) {
this.sphoto = sphoto;
}
}
```

2.攔截器

什么是攔截器?

Spring MVC中的攔截器(Interceptor)類似於Servlet中的過濾器(Filter),它主要用於攔截用戶請求並作相應的處理。例如通過攔截器可以進行權限驗證、記錄請求信息的日志、判斷用戶是否登錄等。
要使用Spring MVC中的攔截器,就需要對攔截器類進行定義和配置。

  1. 創建一個類,實現HandlerInterceptor接口並且重寫接口中的方法

package com.alibaba.wlq.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class Interceptor 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 {
Object user = request.getSession().getAttribute("user");
if(user!=null) {
return true;
}else {
response.sendRedirect("toLogin");
return false;
}
}
}
```

  1. 把創建的類配置到SpringMVC的配置文件中

<mvc:interceptors>
	<mvc:interceptor>
        	<!--表示攔截所有user下以及user下子類的請求-->
			<mvc:mapping path="/user/**"/>
        	<!---->
			<mvc:exclude-mapping path="/user/toLogin"/>
			<mvc:exclude-mapping path="/user/login"/>
			<mvc:exclude-mapping path="/user/toRegister"/>
			<mvc:exclude-mapping path="/user/register"/>
			<mvc:exclude-mapping path="/user/index"/>
			<bean class="com.alibaba.wlq.interceptor.Interceptor"/>
	</mvc:interceptor>
</mvc:interceptors>
```

3.數據校驗(后台校驗)

  1. 導入jar包(validate)

  2. 在相應的實體類中加入注解

    package com.alibaba.wlq.bean;
    
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Pattern;
    
    import org.hibernate.validator.constraints.Length;
    import org.hibernate.validator.constraints.NotEmpty;
    
    public class User {
        @NotEmpty(message="賬號不能為空")
        @NotNull(message="賬號不能為空")
        private String account;
        @NotEmpty(message="密碼不能為空")
        @NotNull(message="密碼不能為空")
        @Length(min=6,max=12,message="密碼的長度在6~12之間")
        private String password;
        @Pattern(regexp="/^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})$/",message="手機號碼格式不正確")
        private String phone;
        public String getPhone() {
    	    return phone;
        }
        public void setPhone(String phone) {
    	    this.phone = phone;
        }
        public User(String account, String password, String phone) {
    	    super();
    	    this.account = account;
    	    this.password = password;
    	    this.phone = phone;
        }
        public String getAccount() {
    	    return account;
        }
        public void setAccount(String account) {
    	    this.account = account;
        }
        public String getPassword() {
    	    return password;
        }
        public void setPassword(String password) {
    	    this.password = password;
        }
        public User(String account, String password) {
    	    super();
    	    this.account = account;
    	    this.password = password;
        }
        public User() {
    	    super();
        }
    }
    
    
  3. 控制層接受參數時

@RequestMapping("register")
public String register(@Valid User user,BindingResult br,Model model) {
if(br.hasErrors()) {
List fieldList = br.getFieldErrors();
Map<String,Object> errorMsg = new HashMap<>();
for (FieldError f : fieldList) {
errorMsg.put(f.getField(), f.getDefaultMessage());
}
model.addAttribute("errorMsg",errorMsg);
return "register";
}
return "login";
}
```

  1. 在網頁中拿到錯誤信息

賬號: ${errorMsg.account }
密碼: ${errorMsg.password }
手機號: ${errorMsg.phone}
```


免責聲明!

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



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