整合Servlet、Filter与Listener
添加三大组件:
@WebServlet("/test")
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 {
System.out.println("name>>>" + req.getParameter("name"));
}
}
@WebFilter("/")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("MyFilter>>>init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("MyFilter>>>doFilter");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
System.out.println("MyFilter>>>destroy");
}
}
@WebListener
public class MyListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
System.out.println("MyListener>>>requestDestroyed");
}
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
System.out.println("MyListener>>>requestInitialized");
}
}
- 定义了三个组件,分别使用@WebServlet、@WebFilter和@WebListener三个注解进行标记
- 上文以ServRequestListener为例,但是对于其他的Listener,例如HttpSessionListener、ServletContextListener等也是支持的。
在启动类上添加注解:
@SpringBootApplication
@ServletComponentScan//扫描组件
public class SpringBootApp {
public static void main(String[] args) {
SpringApplication.run(SpringBootApp.class, args);
}
}
测试:
后台打印:
MyFilter>>>init
MyListener>>>requestInitialized
name>>>22
MyListener>>>requestDestroyed
MyFilter>>>destroy
路径映射
一般情况下,使用了页面模板后,用户需要通过控制器才能访问页面。有一些页面需要在控制器中加载数据,然后渲染,才能显示出来;还有一些页面在控制器中不需要加载数据,只是完成简单的跳转,对于这种页面,可以直接配置路径映射,提高访问速度。
例如:有两个Thymeleaf做模板的页面login.html、index.html,直接在MVC配置中重写addViewControllers方法配置映射关系即可:
@Configuration
public class MyWebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
registry.addViewController("/index").setViewName("index");
}
}
配置完成后,就可以直接访问 http://localhost:8080/login等地址。