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;
}