1.整合servlet
2.整合filter
3.整合Listener
4.访问静态资源
5.文件上传
1.整合servlet
- 通过注解扫描完成Servlet组件的注册
- 通过方法完成Servlet组件的注册
方式一:通过注解扫描
1. 在servlet类上添加注解
@WebServlet(name="FirstServlet", urlPatterns = "/first")
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
System.out.println("FirstServlet.........");
}
}
2.然后在启动类上也要添加注解
@SpringBootApplication
@ServletComponentScan // 在springBoot 启动时会扫描@WebServlet,并将该类实例化
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
方式二: 通过方法
1.写servlet方法
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("SecondServlet..........");
}
}
2. 编写启动类 编写方法注册servlet,方法返回值必须是ServletRegistrationBean的对象
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
SpringApplication.run(App2.class, args);
}
@Bean
public ServletRegistrationBean getServletRegistrationBean(){
ServletRegistrationBean bean = new ServletRegistrationBean(new
SecondServlet());
bean.addUrlMappings("/second");
return bean;
}
}
2.整合filter
- 通过注解扫描完成Filter 组件的注册
- 通过方法完成Filter 组件的注册
方式与整合servlet一致
方式一:通过注解
filter类
//@WebFilter(filterName="FirstFilter",urlPatterns={"*.do","*.jsp"})
@WebFilter(filterName="FirstFilter",urlPatterns="/first")
public class FirstFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@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");
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
启动类:
@SpringBootApplication
@ServletComponentScan
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
方式二:通过方法
public class FirstFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("进入FirstFilter");
// 放行
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("离开FirstFilter");
}
@Override
public void destroy() {
}
}
启动类:
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Bean
public FilterRegistrationBean getFilterRegistrationBean(){
FilterRegistrationBean bean = new FilterRegistrationBean(new FirstFilter());
bean.addUrlPatterns("/first");
return bean;
}
}
3.整合Listener
- 通过注解扫描完成Listener 组件的注册
- 通过方法完成Listener 组件注册
与整合servlet, filter一致
方式一:通过注解扫描
@WebListener
public class FirstListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("Listener...init......");
}
}
启动类:
@SpringBootApplication
@ServletComponentScan
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
方式二: 通过方法注册
public class SecondListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("SecondListener..init.....");
}
}
启动类:
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
SpringApplication.run(App2.class, args);
}
/**
* 注册listener
*/
@Bean
public ServletListenerRegistrationBean<SecondListener>
getServletListenerRegistrationBean(){
ServletListenerRegistrationBean<SecondListener> bean= new
ServletListenerRegistrationBean<SecondListener>(new SecondListener());
return bean;
}
}
4.访问静态资源
- SpringBoot从classpath/static的目录
src/main/resource/static
注意⚠️:目录名称必须是static -
ServletContext根目录下src/main/webapp
注意⚠️:目录名称必须是webapp
5.文件上传
- 编写html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="fileupload" method="post" enctype="multipart/form-data">
文件上传 <input type="file" name="filename"><br/>
<input type="submit" value="上传">
</form>
</body>
</html>
- 编写控制器
@RestController // 表示该类下的方法的返回值会自动做json格式的转换 等于 @Controller + @ResponseBody
public class FileUploadController {
/**
* 处理文件上传
*/
@RequestMapping("fileupload")
public Map<String, Object> fileUpload(MultipartFile filename) throws IOException {
// 打印文件名
System.out.println(filename.getOriginalFilename());
// 存储文件
filename.transferTo(new File("/Users/yanl/JavaCode/springboot02_fileupload/src/main/resources/uploadfile/"+filename.getOriginalFilename()));
Map<String, Object> map = new HashMap<>();
map.put("msg", "ok");
return map;
}
}
- 编写启动类
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
注意:
设置单个上传文件的大小
spring.http.multipart.maxFileSize=200MB
设置一次请求上传文件的总容量
spring.http.multipart.maxRequestSize=200MB
在src/main/resource下新建配置文件application.properties中添加上面的信息
网友评论