博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot基础教程——web 应用开发-Servlets, Filters, listeners
阅读量:7055 次
发布时间:2019-06-28

本文共 5584 字,大约阅读时间需要 18 分钟。

hot3.png

一、Web 开发使用 Controller 基本上可以完成大部分需求, 但是我们还可能会用到 Servlet、 Filter、Listener 等等。

二、在 spring boot 中的三种实现方式
方法一: 通过注册 ServletRegistrationBean、 FilterRegistrationBean 和ServletListenerRegistrationBean 获得控制。

1、自定义servlet

/*** 自定义 servlet** @author wujing*/public class CustomServlet extends HttpServlet {   /**   *   */   private static final long serialVersionUID = 1L;   @Override   protected void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {       System.out.println("servlet get method");       doPost(request, response);   }   @Override   protected void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {       System.out.println("servlet post method");       response.getWriter().write("hello world");   }}

2、自定义filter

/**   * 自定义 filter   *   * @author wujing   */public class CustomFilter implements Filter {   @Override   public void init(FilterConfig filterConfig) throws ServletException {      System.out.println("init filter");  }  @Override  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  throws IOException, ServletException {     System.out.println("do filter");  chain.doFilter(request, response);  }  @Override  public void destroy() {     System.out.println("destroy filter");  }}

3、自定义listener

/** * 自定义 listener * * @author wujing */public class CustomListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) {    System.out.println("contextInitialized"); } @Override public void contextDestroyed(ServletContextEvent sce) {    System.out.println("contextDestroyed"); }}

4、在启动类里面注册bean

@Beanpublic ServletRegistrationBean servletRegistrationBean() {   return new ServletRegistrationBean(new CustomServlet(), "/roncoo");}@Beanpublic FilterRegistrationBean filterRegistrationBean() {   //return new FilterRegistrationBean(new CustomFilter(), servletRegistrationBean());表示仅对/roncoo进行拦截;return new FilterRegistrationBean(new CustomFilter());表示对所有请求进行拦截   return new FilterRegistrationBean(new CustomFilter(), servletRegistrationBean());}@Beanpublic ServletListenerRegistrationBean
servletListenerRegistrationBean() { return new ServletListenerRegistrationBean
(new CustomListener());}

方法二:启动类通过实现 ServletContextInitializer 接口直接注册

implements ServletContextInitializer {   @Override   public void onStartup(ServletContext servletContext) throws   ServletException {   servletContext.addServlet("customServlet", new CustomServlet()).addMapping("/roncoo");   servletContext.addFilter("customFilter", new   CustomFilter()).addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true,     "customServlet");   servletContext.addListener(new CustomListener());}

方法三: 在 SpringBootApplication 上使用@ServletComponentScan 注解后,直接通过@WebServlet、@WebFilter、 @WebListener 注解自动注册

1、自定义servlet

import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 自定义servlet *  * @author wujing */@WebServlet(name = "customServlet", urlPatterns = "/roncoo")public class CustomServlet extends HttpServlet {	/**	 * 	 */	private static final long serialVersionUID = 1L;	@Override	protected void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		System.out.println("servlet get method");		doPost(request, response);	}	@Override	protected void doPost(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		System.out.println("servlet post method");		response.getWriter().write("hello world");		response.flushBuffer();	}}

2、自定义filter

import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;/** * @author wujing */// /*表示对所有请求进行拦截  /roncoo 表示仅对该请求拦截@WebFilter(filterName = "customFilter", urlPatterns = "/*")public class CustomFilter implements Filter {	@Override	public void init(FilterConfig filterConfig) throws ServletException {		System.out.println("init filter");	}	@Override	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)			throws IOException, ServletException {		System.out.println("do filter");		chain.doFilter(request, response);	}	@Override	public void destroy() {		System.out.println("destroy filter");	}}

3、自定义listener

import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;/** * @author wujing */@WebListenerpublic class CustomListener implements ServletContextListener {	@Override	public void contextInitialized(ServletContextEvent sce) {		System.out.println("contextInitialized");	}	@Override	public void contextDestroyed(ServletContextEvent sce) {		System.out.println("contextDestroyed");	}}

4、启动类

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComponentScan;@ServletComponentScan@SpringBootApplicationpublic class SpringBootDemo103Application {	public static void main(String[] args) {		SpringApplication.run(SpringBootDemo103Application.class, args);	}}

 

转载于:https://my.oschina.net/Howard2016/blog/914062

你可能感兴趣的文章
2-2 RHEL7安装Samba服务
查看>>
彻底搞懂编码 GBK 和 UTF8
查看>>
yii2使用多个数据库的案例
查看>>
成人高考科目
查看>>
动态域名搭建exchang邮箱服务器
查看>>
Jquery实现新闻上下滚动效果
查看>>
CGI?
查看>>
使用postMessage实现跨窗口消息传递
查看>>
VIM跳转和小改动
查看>>
svn 常用指令 及 常见问题记录
查看>>
修改全志A10, A20的Nand分区大小
查看>>
python class和class(object)用法区别
查看>>
ejs标签
查看>>
我的友情链接
查看>>
Linux/Unix批量处理产生
查看>>
XFS和RAID6性能优化
查看>>
corosync+pacemaker 实现高可用集群(三)
查看>>
linux下的java开发环境
查看>>
Bootstrap使用记录
查看>>
从一场场大型网站灾难过后的BUG:根
查看>>