一般情况下,使用 Spring mvc 框架之后,基本上就可以告别Servlet、Filter和Listener ,但是在整合一些第三方框架的时候,需要使用到Servlet。
spring boot 对整合这些基本的Web组件,提供了很好的支持
Filter
@WebFilter("/*")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.err.println("MyFilter >>> init ");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.err.println("MyFilter >>> doFilter");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
System.err.println("MyFilter >>> destroy ");
}
}
Servlet
/**
* Servlet
*/
@WebServlet("/my")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
System.err.println("MyServlet >>> doGet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
System.err.println("MyServlet >>> doPost");
}
}
Listener
@WebListener
public class MyListener implements ServletRequestListener {
/**
* 销毁
* @param sre
*/
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.err.println("MyListener >>> requestDestroyed");
}
/**
* 初始化
* @param sre
*/
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.err.println("MyListener >>> requestInitialized");
}
}
在使用了这些标签之后,需要在Application 类中添加 @ServletComponentScan 的注解,表示扫描类
@SpringBootApplication
@ServletComponentScan // 扫描包,将对应的类加载到 spring 中
public class InterceptorApplication {
public static void main(String[] args) {
SpringApplication.run(InterceptorApplication.class, args);
}
}
如果使用的模板文件,如果只是单纯的页面跳转,不进行数据的加载,可以使用控制器进行路径的配置
/**
* 当 不需要在控制器中加载数据,只是完成简单的页面跳转,可以使用该方法
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
registry.addViewController("/index").setViewName("index");
}