三大组件分别为servlet,filter,listener
在普通的javaweb中的配置可以参考我的这几篇博客,过滤器和监听器的配置,servlet容器初始化
由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。而想要注册这三个组件就得使用下面的方法:
编写servlet,filter,listener实体类:
一、servlet
方法一:(通过注入bean的方式)
package org.lzl.bootproject.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello MyServlet!");
}
}
注册servlet:
@Configuration
public class MyServerConfig {
//注册Servlet
@Bean
public ServletRegistrationBean myServlet() {
ServletRegistrationBean register = new ServletRegistrationBean(new MyServlet(), "/myServlet");
register.setLoadOnStartup(1);
return register;
}
}
方法二:添加下面的注解@WebServlet
package org.lzl.bootproject.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(url="/myServlet")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello MyServlet!");
}
}
然后SpringBoot启动类上加上注解@ServletComponentScan,进行包扫描:
@ServletComponentScan(basePackages = "org.lzl.bootproject")
@SpringBootApplication
public class BootprojectApplication {
public static void main(String[] args) {
SpringApplication.run(BootprojectApplication.class, args);
}
}
二、Filter
方法一:(通过注入bean的方式)
package filter;
import javax.servlet.*;
import java.io.IOException;
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("myFilter process....");
chain.doFilter(request,response);
}
@Override
public void destroy() {
}
}
注册Filter:
@Configuration
public class MyServerConfig {
@Bean
public FilterRegistrationBean myFilter(){
FilterRegistrationBean register = new FilterRegistrationBean(new MyFilter());
register.setUrlPatterns(Arrays.asList("/myServlet","/"));
return register;
}
}
方法二:添加下面的注解@WebFilter
package filter;
import javax.servlet.*;
import java.io.IOException;
@WebFilter
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("myFilter process....");
chain.doFilter(request,response);
}
@Override
public void destroy() {
}
}
然后SpringBoot启动类上加上注解@ServletComponentScan,进行包扫描:
@ServletComponentScan(basePackages = "org.lzl.bootproject")
@SpringBootApplication
public class BootprojectApplication {
public static void main(String[] args) {
SpringApplication.run(BootprojectApplication.class, args);
}
}
三、Listen
方法一:(通过注入bean的方式)
package listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized...web应用启动");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed...当前web项目销毁");
}
}
注册Listener
@Configuration
public class MyServerConfig {
@Bean
public ServletListenerRegistrationBean myServletContextListener(){
return new ServletListenerRegistrationBean(new MyListener());
}
}
方法二:添加下面的注解@WebListener
package listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
@WebListener
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized...web应用启动");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed...当前web项目销毁");
}
}
然后SpringBoot启动类上加上注解@ServletComponentScan,进行包扫描:
@ServletComponentScan(basePackages = "org.lzl.bootproject")
@SpringBootApplication
public class BootprojectApplication {
public static void main(String[] args) {
SpringApplication.run(BootprojectApplication.class, args);
}
}