文章目录
一、SpringBoot提供的方式
使用@Bean
注解将组件添加到Web容器
中
@Component
public class WebComponentRegister {
/**
* 注册servlet
*/
@Bean
public ServletRegistrationBean myServlet() {
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(), "/myServlet");
return registrationBean;
}
/**
* 注册filter
*/
@Bean
public FilterRegistrationBean myFilter() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new MyFilter());
registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
return registrationBean;
}
/**
* 注册listener
*/
@Bean
public ServletListenerRegistrationBean myListener() {
ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener());
return registrationBean;
}
}
二、Servlet3.0提供的注解
主启动类上需要添加注解@ServletComponentScan
扫描Servlet3.0
注解
①注册Servlet
@WebServlet(name = "userServlet",urlPatterns = "/test/customs")
public class UserServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().print("custom sevlet");
resp.getWriter().flush();
resp.getWriter().close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
②注册filter
@WebFilter(urlPatterns = "/*",filterName = "TestFilter")
public class TestFilter implements Filter {
/**
* 容器初始化时调用
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("-------------init--------------");
}
/**
* 拦截请求
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
boolean flag = true;
if (flag){
filterChain.doFilter(servletRequest,servletResponse);
}else {
//进行页面调用什么
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.sendRedirect("/index.html");
}
}
/**
* 容器销毁时执行
*/
@Override
public void destroy() {
System.out.println("-------------destory--------------");
}
}
③注册listener
常用的监听器:servletContextListener
、httpSessionListener
、servletRequestListener
@WebListener
public class RequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
// TODO Auto-generated method stub
System.out.println("======requestDestroyed========");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("======requestInitialized========");
}
三、拦截器interceptor的使用
实现HandlerInterceptor或者继承HandlerInterceptorAdapter
@Component
public class AuthInterceptor extends HandlerInterceptorAdapter {
@Autowired
UserService userService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//这个handler可以被拦截请求的信息
return true;
}
}lan
注册拦截器的方法见下
四、使用拦截器解决跨域问题
创建并注册拦截器
@Component
public class AllowOriginIntercepter extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
return true;
}
}
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
@Autowired
AllowOriginIntercepter allowOriginIntercepter;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(allowOriginIntercepter).addPathPatterns("/**");
super.addInterceptors(registry);
}
}