SpringMVC中階
demo中使用List模擬了一套數(shù)據(jù)源,實(shí)現(xiàn)簡(jiǎn)單的crud操作,其中修改使用了SpringMVC的問號(hào)傳參拯腮,刪除操作使用了路徑傳參.
對(duì)比問號(hào)傳參與路徑傳參:
問號(hào)傳參,需要使用問號(hào)來拼接參數(shù)忱详,在接受方屏歹,使用request.getParameter(“key”)來獲取問號(hào)所傳遞過來的值啦桌,如果數(shù)據(jù)類型不為String呀癣,還需要手動(dòng)轉(zhuǎn)換【∽兀可以傳遞多個(gè)值,如果使用多個(gè)值彬伦,使用&來拼接滔悉,不會(huì)改變路徑級(jí)別
路徑傳參,使用路徑符號(hào)來傳遞參數(shù)单绑,優(yōu)點(diǎn)回官,可以不用做類型轉(zhuǎn)換來直接獲取其值。
- 路徑傳參也可以使用統(tǒng)配規(guī)則搂橙,如果同時(shí)統(tǒng)配和具體的url都滿足孙乖,則以最具體的url來處理該請(qǐng)求。
package com.qfedu.bean;
public class Emp {
private int eid;
private String name;
private double salary;
public Emp() {
}
public Emp(int eid, String name, double salary) {
this.eid = eid;
this.name = name;
this.salary = salary;
}
@Override
public String toString() {
return "Emp{" +
"eid=" + eid +
", name='" + name + '\'' +
", salary=" + salary +
'}';
}
public int getEid() {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
上面的代碼份氧,更新是問號(hào)傳參唯袄,刪除是路徑傳參。
問號(hào)傳參蜗帜,需要使?問號(hào)來拼接參數(shù)恋拷,在接受?,使?request.getParameter("key")來獲取問號(hào)所
傳遞過來的值厅缺,如果數(shù)據(jù)類型不為String蔬顾,還需要?動(dòng)轉(zhuǎn)換∠嫔樱可以傳遞多個(gè)值诀豁,如果使?多個(gè)值,使?&
來拼接窥妇,不會(huì)改變路徑級(jí)別
路徑傳參舷胜,使?路徑符號(hào)來傳遞參數(shù),優(yōu)點(diǎn)活翩,可以不?做類型轉(zhuǎn)換來直接獲取其值烹骨。
路徑傳參也可以使?統(tǒng)配規(guī)則,如果同時(shí)通配和具體的url都滿?材泄,則以最具體的url來處理該請(qǐng)
求沮焕。
通配:
GETMapping,可以簡(jiǎn)化代碼拉宗,專門用來處理get請(qǐng)求(4.3以后的Spring版本可用)
PostMapping峦树,可以簡(jiǎn)化代碼辣辫,專門用來處理post請(qǐng)求(4.3以后的Spring版本可用)
package com.qfedu.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PathController {
//@RequestMapping("/a")
@RequestMapping("/{path}")
public String getPath(@PathVariable String path){
return path;
}
//@RequestMapping("/a")
@RequestMapping("/a")
public String a(){
return "a";
}
}
使用注解的controller與實(shí)現(xiàn)接口的controller不是同一個(gè)
dispatcherServlet不能使用注解式配置,因?yàn)檫@是spring的源碼魁巩,我們無法修改
文件上傳
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
xml配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="81920"/>
<property name="uploadTempDir" value="temp"/>
</bean>
默認(rèn)編碼是UTF-8络它,第二個(gè)屬性指定了最大上傳文件的大小,單位是byte歪赢,第三個(gè)指定了上傳文件的緩存路徑。
PostMapping("/uploadFile")
public String uploadFile(@RequestParam("userName") String userName, @RequestParam("password") String password, @RequestParam("file")MultipartFile file) throws IOException {
System.out.println("userName = "+userName);
System.out.println("password = "+password);
if(!file.isEmpty()){
System.out.println("original fileName"+file.getOriginalFilename());
File dest = new File("d:\\ceshi\\"+file.getOriginalFilename());
file.transferTo(dest);
BufferedReader br = new BufferedReader(new FileReader(dest));
String str;
while((str=br.readLine())!=null){
System.out.println(str);
}
br.close();
}
return "redirect:/main/employees";
}
file.transferTo(dest)
/[/n今天是我在千鋒線上學(xué)習(xí)的第19天单料,武漢加油埋凯!]/