一 springBoot整合servlet
pom.xml如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 必须继承 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<groupId>com.bjsxt</groupId>
<artifactId>02-spring-boot-servlet</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 修改jdk版本 -->
<properties>
<java.version>1.8</java.version>
</properties>
<!-- springBoot的启动器 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
1 整合方式一:通过注解扫描Servlet组件的注册
1.1 在eclipse中创建springBoot的maven项目
1.2 编写servlet
/**
* SpringBoot整合Servlet方式一
*
* <servlet>
* <servlet-name>FirstServlet</servlet-name>
* <servlet-class>com.bjsxt.servlet.FirstServlet</servlet-class>
* </servlet>
*
* <servlet-mapping>
* <servlet-name>FirstServlet</servlet-name>
* <url-pattern>/first</url-pattern>
* <servlet-mapping>
*
*
*/
@WebServlet(name="FirstServlet", urlPatterns="/first")
public class FirstServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("First Servlet......");
}
}
1.3 编写启动类
/**
* SpringBoot整合servlet方式一
*
*/
@SpringBootApplication
@ServletComponentScan // 在springBoot启动时会扫描@WebServlet,并将该类实例化
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
1.4 启动测试
在浏览器中输入http://localhost:8080/first,会看见在后台控制台中打印信息
2 整合方式二:通过方法完成Servlet组件的注册
1.1 编写servlet
/**
* SpringBoot整合Servlet方式二
*
*/
public class SecondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Second Servlet......");
}
}
1.2 编写启动类
/**
* SpringBoot整合servlet方式二
*/
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
SpringApplication.run(App2.class, args);
}
@Bean
public ServletRegistrationBean<SecondServlet> getServletRegistrationBean() {
ServletRegistrationBean<SecondServlet> bean = new ServletRegistrationBean<>(new SecondServlet());
bean.addUrlMappings("/second");
return bean;
}
}
1.3 启动测试
在浏览器中输入http://localhost:8080/second,会看见在后台控制台中打印信息
二 springBoot整合filter
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<groupId>com.bjsxt</groupId>
<artifactId>03-spring-boot-filter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
1 整合方式一:通过注解扫描完成Filter组件的注册
1.1 在eclipse中创建springBoot的maven项目:03-spring-boot-filter
1.2 编写Filter
/**
* springBoot整合Filter方式一
* <filter>
* <filter-name>FirstFilter</filter-name>
* <filter-class>com.bjsxt.filterFirstFilter</filter-class>
* </filter>
*
* <filter-mapping>
* <filter-name>FirstFilter</filter-name>
* <url-pattern>/first</url-pattern>
* </filter-mapping>
*
*/
//@WebFilter(filterName="FirstFilter", urlPatterns={"*.do","*.jsp"})
@WebFilter(filterName="FirstFilter", urlPatterns="/first")
public class FirstFilter implements Filter{
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
System.out.println("进入filter");
arg2.doFilter(arg0, arg1);
System.out.println("离开filter");
}
}
1.3 编写servlet
/**
* SpringBoot整合Servlet方式一
*
* <servlet>
* <servlet-name>FirstServlet</servlet-name>
* <servlet-class>com.bjsxt.servlet.FirstServlet</servlet-class>
* </servlet>
*
* <servlet-mapping>
* <servlet-name>FirstServlet</servlet-name>
* <url-pattern>/first</url-pattern>
* <servlet-mapping>
*
*/
@WebServlet(name="FirstServlet", urlPatterns="/first")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("First Servlet");
}
}
1.4 编写启动类
/**
* SpringBoot整合Filter方式一
*/
@SpringBootApplication
@ServletComponentScan
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
1.5 启动测试
启动并在浏览器中输入http://localhost:8080/first,在后台控制台中可以看到输出
2 整合方式二:通过方法完成Filter组件注册
1.1 编写Filter
/**
* springBoot整合Filter方式二
*/
public class SecondFilter implements Filter {
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
System.out.println("进入filter");
arg2.doFilter(arg0, arg1);
System.out.println("离开filter");
}
}
1.2 编写servlet
/**
* SpringBoot整合Servlet方式二
*/
public class SecondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Second Servlet");
}
}
1.3 编写启动类
package com.bjsxt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import com.bjsxt.filter.SecondFilter;
import com.bjsxt.servlet.SecondServlet;
/**
* SpringBoot整合Filter方式一
*/
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
SpringApplication.run(App2.class, args);
}
/**
* 注册servlet
*
* @return
*/
@Bean
public ServletRegistrationBean<SecondServlet> getServletRegistrationBean() {
ServletRegistrationBean<SecondServlet> bean = new ServletRegistrationBean<>(new SecondServlet());
bean.addUrlMappings("/second");
return bean;
}
/**
* 注册filter
*
* @return
*/
@Bean
public FilterRegistrationBean<SecondFilter> getFilterRegistrationBean() {
FilterRegistrationBean<SecondFilter> bean = new FilterRegistrationBean<>(new SecondFilter());
// bean.addUrlPatterns(new String[]{"*.do", "*.jsp"});
bean.addUrlPatterns("/second");
return bean;
}
}
1.4 启动测试
启动并在浏览器中输入http://localhost:8080/second,会在后台控制台中看见输出信息
三 springBoot整合Listener
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<groupId>com.bjsxt</groupId>
<artifactId>04-spring-boot-listener</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
1 整合方式一:通过注解扫描完成Listener组件的注册
1.1 在eclipse中创建springBoot的maven项目:04-spring-boot-listener
1.2 编写Listener
/**
* Spring整合Listener
* <listener>
* <listener-class>com.bjsxt.listener.FirstListener<listener-class>
* </listener>
*/
@WebListener
public class FirstListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("first listener...init...");
}
}
1.3 编写启动类
/**
* springBoot整合Listener方式一
*
*/
@SpringBootApplication
@ServletComponentScan
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
1.4 启动测试
2 整合方式二:通过方法完成Filter组件注册
1.1 编写Listener
/**
* springBoot整合Listener方式二
*/
public class SecondListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("second listener...init...");
}
}
1.2 编写启动类
/**
* springBoot整合Listener方式二
*/
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
SpringApplication.run(App2.class, args);
}
@Bean
public ServletListenerRegistrationBean<SecondListener> getServletListenerRegistrationBean() {
ServletListenerRegistrationBean<SecondListener> bean = new ServletListenerRegistrationBean<>(new SecondListener());
return bean;
}
}
1.3 启动测试
四 springBoot访问静态资源
1 SpringBoot从classpath/static的目录
1.1 编写启动类
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
1.2 index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>静态资源访问一</title>
</head>
<body>
静态资源访问一<br/>
<img alt="" src="images/Tulips.jpg">
</body>
</html>
1.2 启动项目
2 ServletContext根目录下
名称必须要叫webapp,其他同上。
五 springBoot文件上传
1 upload.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="fileUploadController" method="post" enctype="multipart/form-data">
上传文件:
<input type="file" name="filename" /><br/>
<input type="submit" />
</form>
</body>
</html>
2 编写controller
/**
* SpringBoot文件上传
*/
@RestController // 表示改对象的方法的返回值会自动的做json格式的转换
public class FileUploadController {
/**
* 处理文件上传
* @throws IOException
* @throws IllegalStateException
*/
@RequestMapping("/fileUploadController")
public Map<String, Object> fileUpload(MultipartFile filename) throws IllegalStateException, IOException {
System.out.println(filename.getOriginalFilename());
filename.transferTo(new File("E:/" + filename.getOriginalFilename()));
Map<String, Object> map = new HashMap<>();
map.put("msg", "ok");
return map;
}
}
3 编写启动类
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
4 启动测试
5 注意事项
默认情况下文件上传大小为10485760,当上传文件大于10485760时,后台就会异常
org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (282533691) exceeds the configured maximum (10485760)
at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:808) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
at org.apache.catalina.connector.Request.parseParts(Request.java:2846) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
at org.apache.catalina.connector.Request.parseParameters(Request.java:3185) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
at org.apache.catalina.connector.Request.getParameter(Request.java:1116) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
此时,需要配置上传文件大小的默认值,添加application.properties文件,具体位置如上截图所示
spring.servlet.multipart.maxFileSize=400MB
spring.servlet.multipart.maxRequestSize=400MB
spring.servlet.multipart.maxFileSize:设置单个上传文件的大小;
spring.servlet.multipart.maxRequestSize=400MB:设置一次请求上传文件的总大小。