Spring MVC(三)——拦截器、文件上传(两种方式上传)、文件下载(通用方式和MVC框架自带方式)、跨域问题、Spring 整合 Spring MVC
一、拦截器
1、前期准备
2、拦截器的使用方式和注意事项
首先使用拦截器先要实现一个接口:HandlerInterceptor
然后就是需要实现三个方法:
spring-servlet.xml 配置拦截器: 结果就不放出来了。
二、文件上传
文件上传有两种方式,一种是新版的,一种是旧版的。先看新版的
1、新版文件上传方式
先是 spring-servlet 配置:
然后是 web.xml 配置:
然后就是 java 代码:
SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/");
@PostMapping("/upload")
public String upload(MultipartFile file, String name, HttpServletRequest req){
System.out.println("name = "+name);
String format = sdf.format(new Date());
String realPath = req.getServletContext().getRealPath("/img") + format;
System.out.println(realPath);
File folder = new File(realPath);
if (!folder.exists()){
folder.mkdirs();
}
String oldName = file.getOriginalFilename();
String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
try {
file.transferTo(new File(folder,newName));
String url = req.getScheme()+"://"+req.getServerName() + ":" + req.getServerPort() + req.getContextPath() + "/img" + format + newName;
System.out.println("url="+url);
return url;
} catch (IOException e) {
e.printStackTrace();
}
return null;
2、旧版文件上传方式
区别在于,代码不变,主要是配置有区别: 移除这个:
添加一个 bean:
那么到此为止,旧版的上传方式就配好了。
三、文件下载
有文件上传就有文件下载。
文件下载有两种方式:
1、第一种方式——通用的方式
@GetMapping("/download/{year}/{month}/{day}/{filename}")
public void downloadImg(@PathVariable String filename, @PathVariable String year, @PathVariable String month, @PathVariable String day,HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.addHeader("content-disposition", "attachment;filename="+filename);
String filepath = req.getServletContext().getRealPath("/img") + File.separator + year + File.separator + month + File.separator + day + File.separator + filename;
ServletOutputStream out = resp.getOutputStream();
FileInputStream fis = new FileInputStream(filepath);
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1){
out.write(buf,0,len);
}
out.flush();
}
上面的代码中,如果图片路径中有中文,就会乱码,且访问不能下载。
乱码的原因是因为浏览器下载这块编码格式是 ISO-8859-1,而我们在这里面的编码是 utf-8,把编码改成 ISO-8859-1 即可使用中文:
可以看到弹框的的确是中文。不过如果此时地址栏还不能显示中文,浏览器需要在相应的设置里修改下。(这里就不细说了,感兴趣的可以百度)
2、第二种方式——MVC 框架自带的方式
四、跨域问题
1、是什么跨域
2、解决跨域问题
解决跨域问题可以前端解决也可以后端解决。
解决跨域问题很简单,就一个注解的事: 如果希望有个全局的配置,就需要到 spring-servlet 配置文件里面去写:
五、Spring 整合 Spring MVC
1、整合思路
2、整合技巧
3、开始整合
先看下大体结构: 分层不用管,主要是两个配置文件:spring-servket.xml 和 applicationContext.xml 。
spring-servket.xml: 这个配置文件只配置和页面相关的以及 Controller 相关的。(负责 Spring MVC)
applicationContext.xml :这个配置文件只配置 Service 和 Dao,还涉及到 数据源、事务。(负责 spring)
a、spring-servket.xml 配置文件
b、applicationContext.xml 配置文件
c、web.xml 配置文件
还有个 web.xml 配置文件,这个配置文件就需要配置两个东西了:
4、题外话
如果就是想要把 Spring 的配置内容都放到 MVC配置文件中,这是当然可以的(如果是 ssh 就不能这么干)。不过建议还是分开来。
但是如果是把 MVC 的配置内容放到 Spring 里面,这就不行。
|