文件上传
第一必须以post提交,enctype=“multipart/form-data”,type=“file”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Insert title here</title> </head> <body> <form action="upload.do" method="post" enctype="multipart/form-data"> 账号:<input type="text" name="acc_no" /> <br> 头像:<input type="file" name="head_img"> <br> <input type="submit" value="上传"> </form> </body> </html>
|
这个控制器需要依赖于文件解析器,文件解析器依赖于文件上传的jar
1 2 3 4 5 6 7
| 在applicationContext.xml文件中输入 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10240"></property> <property name="resolveLazily" value="true"></property> </bean>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.util.UUID; @Controller public class XdlFileUploadController { @RequestMapping("/toUpload.do") public String toUpload() { return "upload"; } @RequestMapping("/upload.do") public String upload(String acc_no,MultipartFile head_img) { System.out.println(acc_no); System.out.println(head_img.getName() + ":" + head_img.getOriginalFilename() +":" + head_img.getSize()+"gg"); if(head_img.getSize() > 10240) { throw new RuntimeException("文件过大"); } String oriFileName = head_img.getOriginalFilename(); String fileSuffix = oriFileName.substring(oriFileName.lastIndexOf(".")); String fileName = UUID.randomUUID().toString(); String filePath = "D:/datas/" + fileName + fileSuffix; File file = new File(filePath); try { head_img.transferTo(file); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "main"; } @ExceptionHandler public String processError(Exception e) { return "error4"; } }
|
MVC的控制器方法返回JSON
-
搭建一个基于标注的MVC
-
在控制器中,编写一个控制器方法
1 2 3 4
| @RequestMapping("/请求的路径") public 要转换成JSON的数据类型 方法名任意(参数任意){
}
|
- 为了处理返回的数据为JSON,需要加一个@ResponseBody,此标注加载类上是代表所有方法返回的都是json
把数据转换成JSON同时告知mvc返回值不要经过视图处理器,这个标注要依赖于JSON的转换包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| @RequestMapping("/login.do") @ResponseBody public boolean login(String acc_no,String acc_password) { if("luqi".equals(acc_no) && "123".equals(acc_password)) { return false; } return true; }
@RequestMapping("/login2.do") @ResponseBody public XdlBankAccount login2(String acc_no,String acc_password) { if("abc".equals(acc_no) && "123".equals(acc_password)) { return new XdlBankAccount(0, acc_no, acc_password, 1); } return null; }
@RequestMapping("/login3.do") @ResponseBody public Map<String,Object> login3(String acc_no,String acc_password) { Map<String,Object> res = new HashMap<String, Object>(); if("abc".equals(acc_no) && "123".equals(acc_password)) { XdlBankAccount account = new XdlBankAccount(0, acc_no, acc_password, 1); res.put("account", account); return res; } res.put("account", null); return res; }
|
什么是rest
REST即表述性状态传递(英文:Representational State Transfer,简称REST)
它是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。
这个软件架构基于http协议,它可以提高系统的可伸缩性,降低应用之间的耦合度,便于分布式应用程序的开发。
rest的两个核心规范
对定位资源的URL做了限定,把原来基于操作的设计,改成了基于资源的设计
对资源的操作的做了限定,Http协议的请求方式上,Get用来查询,Post增加,Put更新,Delete删除
什么是RESTful
符合REST约束风格和原则的应用程序或设计就是RESTful
/blog/1 HTTP GET => 查询id=1的blog
/blog/1 HTTP DELETE => 删除id=1的blog
/blog/1 HTTP PUT => 更新blog
/blog/new HTTP POST => 新增blog
MVC对rest的支持
-
搭建一个基于标注的 MVC
-
在控制器方法上,支持对应的请求方式
@RequestMapping(value=“/account/{变量名}”,method=RequestMethod.GET)
@PathVariable(“路径变量名”)加在控制器参数上
-
rest请求的路径是没有后缀的.所以需要把web,xml里的DispatcherServlet中的url-parttern改成支持所有请求的/
-
如果改成/,则所有的静态资源被拦截,所以放行静态资源,在applicationContext.xml里加入
1
| <mvc:default-servlet-handler/>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| @RequestMapping(value="/account/{id}",method=RequestMethod.GET) @ResponseBody public XdlBankAccount findAccountById(@PathVariable("id") int id) { XdlBankAccount account = new XdlBankAccount(id, "test", "123", 1); return account; }
@RequestMapping(value="/account/{id}",method=RequestMethod.DELETE) @ResponseBody public boolean accountRemoveById(@PathVariable("id") int id) { if(id > 10) { return false; } return true; }
@RequestMapping(value="/account/{id}",method=RequestMethod.POST) @ResponseBody public boolean accountRemoveById(XdlBankAccount account) { System.out.println(account); return true; }
@RequestMapping(value="/account/{id}",method=RequestMethod.PUT) @ResponseBody public boolean accountUpdate(@RequestBody XdlBankAccount account) { System.out.println(account); return true; }
|