原生servlet内容
大约 1 分钟Spring全家桶SpringBoot精讲细讲
由于SpringBoot基于sevlet3.0+,内嵌Tomcat容器。因此,无法像之前一样通过web.xml中配置Filter。
实现原生servlet接口
原生servlet
@WebServlet("/user")
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("UserServlet");
resp.getWriter().flush();
}
}
原生filter
@WebFilter("/*")
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
request.getSession();
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("进入了LoginFilter");
filterChain.doFilter(servletRequest, servletResponse);
}
}
原生listener
@WebListener
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("sessionCreated.....");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
}
}
主启动类开启原生servlet支持
@ServletComponentScan
@SpringBootApplication
public class Springboot01Application {
public static void main(String[] args) {
SpringApplication.run(Springboot01Application.class, args);
}
}
使用SpringBoot配置类(推荐使用)
filter
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.getSession();
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("进入了LoginFilter");
filterChain.doFilter(servletRequest, servletResponse);
}
}
servlet
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("哔哩哔哩");
resp.getWriter().flush();
}
}
listener
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("sessionCreated.....");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
}
}
这时候主启动类不用@ServletComponentScan注解,在config配置类中配置这些。
@Configuration
public class ServletConfig {
@Bean
public ServletRegistrationBean<UserServlet> servletRegistrationBean(){
ServletRegistrationBean<UserServlet> registrationBean = new ServletRegistrationBean<>();
registrationBean.setServlet(new UserServlet());
registrationBean.addUrlMappings("/user");
return registrationBean;
}
@Bean
public FilterRegistrationBean<LoginFilter> filterFilterRegistrationBean(){
FilterRegistrationBean<LoginFilter> filter = new FilterRegistrationBean<>();
filter.setFilter(new LoginFilter());
filter.setUrlPatterns(Arrays.asList("/user/*", "/api/*"));
return filter;
}
@Bean
public ServletListenerRegistrationBean<SessionListener> listenerRegistrationBean(){
ServletListenerRegistrationBean<SessionListener> listener = new ServletListenerRegistrationBean<>();
listener.setListener(new SessionListener());
return listener;
}
}