1. 自定义Servlet
1.1 自定义步骤
步骤:
- 编写类,继承HttpServlet,重写doGet、doPost方法
- 编写自定义配置类
- 使用ServletRegistrationBean对象注册之前编写的Servlet
- 在自定义配置类中将ServletRegistrationBean对象注入Spring IOC容器。
自定义Servlet代码如下
public class MyServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("MyServlet 创建了");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("Hello Servlet");
}
}
自定义配置类代码如下:
@Configuration
public class MyServletConfig {
@Bean
public ServletRegistrationBean servletRegister()
{
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(new MyServlet());
servletRegistrationBean.addUrlMappings("/hello");
return servletRegistrationBean;
}
}
一个ServletRegistrationBean只能注册一个Servlet,如果有多个Servlet要注册,那写多个ServletRegistrationBean就可以了。
@Bean
public ServletRegistrationBean registerMyServlet()
{
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
....
return servletRegistrationBean;
}
@Bean
public ServletRegistrationBean registerOnStartServlet()
{
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
....
return servletRegistrationBean;
}
可以看到Hello Servlet成功打印出来了
1.2 Servlet参数配置
直接用ServletRegistrationBean提供的方法就可以了
比如,最常用的是设置某个Servlet跟随项目启动,然后在Servlet的init方法中做一些必要处理。直接调用setLoadOnStartup方法即可。
public class OnStartServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("跟随项目启动");
}
}
2. 自定义Filter
自定义Filter和自定义Servlet类似,在这里要用到FilterRegistrationBean去注册我们自定义的Filter。
编写Filter
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter 初始化了");
}
@Override
public void destroy() {
System.out.println("Filter 销毁了");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("doFilter");
filterChain.doFilter(servletRequest, servletResponse);
}
}
注册Filter
@Bean
public FilterRegistrationBean registerMyFilter()
{
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new MyFilter());
filterRegistrationBean.addUrlPatterns("/hello");
return filterRegistrationBean;
}
3. 自定义Listener
使用ServletListenerRegistrationBean将自定义Listener注册进容器,用法跟前面两个的用法基本一样。
@Bean
public ServletListenerRegistrationBean registerMyListener()
{
ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();
bean.setListener(new MyListener());
return bean;
}