1 文件上传
1.1上传单个文件
在webapp目录下创建如图所示的文件夹:
1.编写fileLoad.jsp的代码如下:
<%@page pageEncoding="UTF-8" contentType="text/html; UTF-8" isELIgnored="false" %>
<html>
<head>
<title>文件上传</title>
<meta charset="UTF-8">
</head>
<body>
<form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">
请选择文件: <input type="file" name="multipartFile"/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
如图所示:
2.编写FileController的代码如下:
package com.txw.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.UUID;
/**
* 文件控制器
* @author Adair
* E-mail: [email protected]
*/
@SuppressWarnings("all") // 注解警告信息
@Controller
@RequestMapping("/file")
public class FileController {
@RequestMapping("/upload")
public String upload(MultipartFile multipartFile, HttpServletRequest request) throws Exception {
// 通过相对路径方式获取项目部署到服务器的绝对路径
String realPath = request.getRealPath("/upload");
// 设置文件名为:uuid+原始文件后缀
int i = multipartFile.getOriginalFilename().lastIndexOf(".");
String substring = multipartFile.getOriginalFilename().substring(i);
String newFileName = UUID.randomUUID().toString().replace("-","") + substring;
// 文件上传
multipartFile.transferTo(new File(realPath,newFileName));
return "index";
}
}
如图所示:
1.2 上传多个文件
1.编写fileLoad.jsp的代码如下:
<%@page pageEncoding="UTF-8" contentType="text/html; UTF-8" isELIgnored="false" %>
<html>
<head>
<title>文件上传</title>
<meta charset="UTF-8">
</head>
<body>
<form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">
请选择正面文件: <input type="file" name="multipartFiles"/></br>
请选择背面文件: <input type="file" name="multipartFiles"/></br>
请选择站立文件: <input type="file" name="multipartFiles"/></br>
<input type="submit" value="上传"/>
</form>
</body>
</html>
如图所示
2.编写FileController的代码如下:
package com.txw.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.UUID;
/**
* 文件控制器
* @author Adair
* E-mail: [email protected]
*/
@SuppressWarnings("all") // 注解警告信息
@Controller
@RequestMapping("/file")
public class FileController {
@RequestMapping("/upload")
public String upload(MultipartFile[] multipartFiles, HttpServletRequest request) throws Exception {
for (MultipartFile multipartFile : multipartFiles) {
if (multipartFile.getSize() != 0){
// 通过相对路径方式获取项目部署到服务器的绝对路径
String realPath = request.getRealPath("/upload");
// 设置文件名为:uuid+原始文件后缀
int i = multipartFile.getOriginalFilename().lastIndexOf(".");
String substring = multipartFile.getOriginalFilename().substring(i);
String newFileName = UUID.randomUUID().toString().replace("-","") + substring;
// 文件上传
multipartFile.transferTo(new File(realPath,newFileName));
}
}
return "index";
}
}
如图所示:
3.在application.properties添加的代码如下:
#设置文件上传的 文件大小限制
spring.servlet.multipart.max-file-size=200MB
spring.servlet.multipart.max-request-size=200MB
#开启jsp页面的调试模式
server.servlet.jsp.init-parameters.development=true
如图所示:
总结,如图所示:
2 文件下载
在webapp目录下创建如图所示的文件夹:
1.编写downLoad.jsp的代码如下:
<%@page pageEncoding="UTF-8" contentType="text/html; UTF-8" isELIgnored="false" %>
<html>
<head>
<title>文件下载</title>
<meta charset="UTF-8">
</head>
<body>
<a href="${pageContext.request.contextPath}/file/download?fileName=a.git">a.git</a><br/>
<a href="${pageContext.request.contextPath}/file/download?fileName=aa.txt">aa.txt</a><br/>
</body>
</html>
如图所示:
2.编写FileController的代码如下:
/**
* 文件下载
* @param fileName
* @param request
* @param response
* @throws Exception
*/
@RequestMapping("/download")
public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {
// 文件下载
String realPath = request.getRealPath("/download");
// 将服务器的文件读取到系统中
FileInputStream is = new FileInputStream(new File(realPath, fileName));
// 获取响应输出流
ServletOutputStream os = response.getOutputStream();
// 设置文件下载的方式 以及下载后的文件名 响应输出流编码
response.setHeader("content-disposition","attachment;fileName="+ URLEncoder.encode(fileName,"UTF-8"));
// 交换数据
IOUtils.copy(is,os);
// 关闭资源
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);
}
如图所示:
总结,如图所示:
3 SpringBoot中的 拦截器
1.编写MyInterceptor的代码如下:
package com.txw.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义拦截器
* @author Adair
* E-mail: [email protected]
*/
@SuppressWarnings("all") // 注解警告信息
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("----------1----------");
// 返回true 放行 返回false阻止
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("----------3----------");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("----------4----------");
}
}
如图所示:
2.编写InterceptorConfig的代码如下:
package com.txw.config;
import com.txw.interceptor.MyInterceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 拦截器的配置类
* @author Adair
* E-mail: [email protected]
*/
@Component
@SuppressWarnings("all") // 注解警告信息
public class InterceptorConfig implements WebMvcConfigurer {
/**
* 用来加入拦截器相关配置 参数1:InterceptorRegistry 拦截器注册对象
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加那个拦截器
registry.addInterceptor(new MyInterceptor())
// 拦截所有控制器请求
.addPathPatterns("/test/*")
// 排除指定的请求
.excludePathPatterns("/test/test2");
}
}
如图所示:
3.编写的代码如下:
package com.txw.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author Adair
* E-mail: [email protected]
*/
@Controller
@RequestMapping("test")
public class TestController {
@RequestMapping("test1")
public String test1(){
System.out.println("----------2----------");
return "index";
}
@RequestMapping("test2")
public String test2(){
System.out.println("----------2----------");
return "index";
}
}
如图所示:
4 war包部署
1.设置打包方式为war的代码如下:
<packaging>war</packaging>
如图所示:
2. 在插件中指定入口类的代码如下:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--使用热部署出现中文乱码解决方案-->
<configuration>
<fork>true</fork>
<!--增加jvm参数-->
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<!--指定入口类-->
<mainClass>com.txw.SpringBoot02Application</mainClass>
</configuration>
</plugin>
</plugins>
如图所示:
3.排除内嵌的tomcat的代码如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--去掉内嵌tomcat-->
<scope>provided</scope>
</dependency>
<!--springboot解析jsp相关依赖-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--去掉使用内嵌tomcat解析jsp
provided:全程生效 编译 测试 打包不会存在 容器提供
-->
<scope>provided</scope>
如图所示:
6.编写的代码如下:
package com.txw;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* 主启动类
* 一旦使用war包部署注意:
* 1. application.yml 中配置port context-path 失效
* 2. 访问时使用打成war包的名字和外部tomcat端口号进行访问项目
* @author Adair
* E-mail: [email protected]
*/
@MapperScan("com.txw.dao") // 必须在入口类中加入这个配置
@SpringBootApplication
public class SpringBoot02Application extends SpringBootServletInitializer {
/* public static void main(String[] args) {
SpringApplication.run(SpringBoot02Application.class,args);
}*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringBoot02Application.class);
}
}
如图所示:
7.如图所示:说明打包成功!
8.这时在target目录下生成war,成功!
9.把springboot_02.war拷贝到Tomcat的webapps的目录下,如图所示:
10.启动Tomcat服务器,如图所示:说明启动成功!
通过浏览器访问:http://localhost:8080/springboot_02/fileLoad.jsp,如图所示:说明部署成功!总结,如图所示: