方法一:集成Servlet,Filter,Listener可以直接通过Bean注解,ServletListenerRegistrationBean,FilterRegistrationBean,ServletRegistrationBean来注册的方式。
在web.xml中配置过滤器。这里要谨记一条原则:在web.xml中,监听器>过滤器>servlet。也就是说web.xml中监听器配置在过滤器之前,过滤器配置在servlet之前,否则会出错。
Servlet其实可以看作是一种特殊的java类。
实现代码如下:
创建servlet类并且继承HttpServlet类:
public class MyServlet1 extends HttpServlet{
/**
* 系列号
*/
private static final long serialVersionUID = 3801244035838976832L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("MyServlet doPost ....");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("MyServlet doGet ...."); // 浏览器一般是get
}
}
然后在springboot的启动类中实现servlet的注册(使用@Bean注解,直接用java进行配置)
@SpringBootApplication
public class SpringBootStudyApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootStudyApplication.class, args);
}
@Bean
public ServletRegistrationBean<MyServlet1> getServlet1() {
return new ServletRegistrationBean<MyServlet1>(new MyServlet1(), "/my1"); // /my1参数是url的意思
}
}
可注册多个servlet:

最后通过浏览器访问:127.0.0.1:8081/my1
在控制台即可打印出因为浏览器是get请求方式:

-----------------------------------------------------------------------------------------------------------------
集成Filter过滤器: 在doFilter()方法中,chain.doFilter()前的一般是对request执行的过滤操作,chain.doFilter后面的代码一般是对response执行的操作。过滤链代码的执行顺序如下:
第一步:创建一个过滤器:
package com.cai.guangbi.demo.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyFilter1 implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
System.out.println("MyFilter doFilter..."); // 过滤操作代码......
arg2.doFilter(arg0, arg1); // 放行,通过了当前过滤器,递交给下一个filter进行过滤
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
在springboot启动应用程序中注册过滤器filter:
@Bean
public FilterRegistrationBean<MyFilter1> getFilter1() { // getServlet1(), getServlet2()表示这个过滤器可以处理两个servlet类 return new FilterRegistrationBean<MyFilter1>(new MyFilter1(),getServlet1(), getServlet2()); }
访问效果图:http://127.0.0.1:8081/my1
可以在控制台打印出:
同时也可以访问:http://127.0.0.1:8081/my1

----------------
继承listener监听器:
监听器代码如下:
public class MyListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("MyListener created...");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
}
}
在spingboot启动类里面加上注解:
@Bean
public ServletListenerRegistrationBean<MyListener> getListener() {
return new ServletListenerRegistrationBean<MyListener>(new MyListener());
}
因为上面的监听器是监听session事件的,所以在Myservlet1类里面加上session事件,代码如下:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("MyServlet1 doGet ...."); // 浏览器一般是get
req.getSession().setAttribute("my", "hellow");
}
下面访问下地址:http://127.0.0.1:8081/my1
效果图:

------------------------------------
方法二:通过servletContextInitializer注册。
可以直接在springboot启动类里面实现
ServletContextInitializer接口
代码:
public class SpringBootStudyApplication implements ServletContextInitializer{
public static void main(String[] args) {
SpringApplication.run(SpringBootStudyApplication.class, args);
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addServlet("my1", MyServlet1.class).addMapping("/my1"); / 注册了servlet
servletContext.addListener(MyListener.class);
} }
----------------
方法三:
使用@servletComponentScan注解:
在spingboot启动类加上注解:
@SpringBootApplication
@ServletComponentScan // 这个注解将会扫描servlet,filter,listner
public class SpringBootStudyApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootStudyApplication.class, args);
}
}
然后在每个servlet类或者filter类或者listener类加上:
如:@WebServlet(urlPatterns="/my1"),@WebFilter(urlPatterns="/my1"),@webListener
浙公网安备 33010602011771号