博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot之 Servlet、Fiter、Listener的使用
阅读量:6909 次
发布时间:2019-06-27

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

Spring Boot之 Servlet、Fiter、Listener的使用

  • 新建项目:

Servlet的使用

  • 新建MyServlet类

package com.adagio.chat.servlet;import java.io.IOException;import java.io.PrintWriter;import java.io.Writer;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(        name = "myservlet",        urlPatterns = {"/myservlet1", "/myservlet2"})public class MyServlet extends HttpServlet {    @Override    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{                Writer writer = response.getWriter();        writer.write("Hello World");    }}
  • 启动类添加注解 @ServletComponentScan(basePackages = {"com.adagio.chat.servlet"})

  • 启动运行访问:和

  • servlet的使用很简单:

    • 添加注解 @WebServlet

    • 配置name,可以不用配置

    • 配置路径,urlPatterns 可以配置多值

Filter的使用

  • 使用方式和Servlet十分类似

package com.adagio.chat.servlet;import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.filter.OncePerRequestFilter;//@WebFilter(servletNames = "myservlet")@WebFilter(urlPatterns = "/myservlet1")public class MyFilter extends OncePerRequestFilter {    @Override    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)            throws ServletException, IOException {        ServletContext servletContext = getServletContext();        servletContext.log("url myservlet was filter");                filterChain.doFilter(request, response);    }}
  • 可以直接使用servletNames过滤,如@WebFilter(servletNames = "myservlet"),访问和都会在控制台打印日志

  • 也可以使用@WebFilter(urlPatterns = "/myservlet1"),访问上面两个链接,只有访问这个地址才会打印日志

Listener的使用

  • 使用方式也是类似的

package com.adagio.chat.servlet;import javax.servlet.ServletContext;import javax.servlet.ServletRequestEvent;import javax.servlet.ServletRequestListener;import javax.servlet.annotation.WebListener;import javax.servlet.http.HttpServletRequest;@WebListenerpublic class MyListener implements ServletRequestListener {    @Override    public void requestDestroyed(ServletRequestEvent sre) {        HttpServletRequest request = (HttpServletRequest)sre.getServletRequest();                ServletContext servletContext = request.getServletContext();        servletContext.log("request was destroyed");    }    @Override    public void requestInitialized(ServletRequestEvent sre) {        HttpServletRequest request = (HttpServletRequest)sre.getServletRequest();                ServletContext servletContext = request.getServletContext();        servletContext.log("request was initialized");    }}
  • 访问 观察控制台

执行顺序

2017-09-10 16:11:18.247  INFO 7692 --- [io-8080-exec-10] o.a.c.c.C.[Tomcat].[localhost].[/]       : request was initialized2017-09-10 16:11:18.271  INFO 7692 --- [io-8080-exec-10] o.a.c.c.C.[Tomcat].[localhost].[/]       : url myservlet was filter2017-09-10 16:11:18.271  INFO 7692 --- [io-8080-exec-10] o.a.c.c.C.[Tomcat].[localhost].[/]       : servlet was doGet2017-09-10 16:11:18.275  INFO 7692 --- [io-8080-exec-10] o.a.c.c.C.[Tomcat].[localhost].[/]       : request was destroyed
  • 先监听器的初始化,再经过滤器,然后执行doGet方法,最后执行监听器的消亡

使用注入的方式注册

  • 效果和上面的方式一样的,具体实现见代码

package com.adagio.chat.spring.boot;import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.context.request.RequestAttributes;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import org.springframework.web.filter.OncePerRequestFilter;public class MyFilter2 extends OncePerRequestFilter {    @Override    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)            throws ServletException, IOException {//        ServletContext servletContext = getServletContext();//        //        //动态获取URI//        String requestURI = request.getRequestURI();//        //        servletContext.log("url "+requestURI+" was filter from MyFilter2");                doSomething();        filterChain.doFilter(request, response);    }        /**     * 当没有request的时候,可以使用这种方式获取request     */    public void doSomething(){                RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)requestAttributes;                HttpServletRequest request = servletRequestAttributes.getRequest();        ServletContext servletContext = getServletContext();                //动态获取URI        String requestURI = request.getRequestURI();                servletContext.log("url "+requestURI+" was filter from MyFilter2");            }}
package com.adagio.chat.spring.boot;import java.io.IOException;import java.io.PrintWriter;import java.io.Writer;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyServlet2 extends HttpServlet {    @Override    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{                ServletContext servletContext = request.getServletContext();        servletContext.log("servlet2 was doGet");                Writer writer = response.getWriter();        writer.write("Hello World From MyServlet2");    }}
package com.adagio.chat;import javax.servlet.DispatcherType;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.boot.web.servlet.ServletComponentScan;import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import com.adagio.chat.servlet.MyListener;import com.adagio.chat.spring.boot.MyFilter2;import com.adagio.chat.spring.boot.MyServlet2;@SpringBootApplication@ServletComponentScan(basePackages = {"com.adagio.chat.servlet"})public class ChatApplication {    public static void main(String[] args) {        SpringApplication.run(ChatApplication.class, args);    }        @Bean    public static ServletRegistrationBean servletRegistrationBean(){        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();                servletRegistrationBean.setServlet(new MyServlet2());        servletRegistrationBean.addUrlMappings("/spring/boot/myservelt2");        servletRegistrationBean.setName("myservlet2");                return servletRegistrationBean;    }        @Bean    public static FilterRegistrationBean filterRegistrationBean(){        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();                filterRegistrationBean.setFilter(new MyFilter2());//        filterRegistrationBean.addUrlPatterns("/spring/boot/myservelt2");        filterRegistrationBean.addServletNames("myservlet2");        filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE);                return filterRegistrationBean;    }        /**     * 监听器会监听所有请求     * 可以重复注册监听器     * @return     */    @Bean    public static ServletListenerRegistrationBean
servletListenerRegistrationBean(){ ServletListenerRegistrationBean
servletListenerRegistrationBean = new ServletListenerRegistrationBean<>(new MyListener()); return servletListenerRegistrationBean; } }

急事慢做:成长是长时间努力、积累和进步的结果,是水到渠成的事情,绝不是心急就能做到的。

生长速度越快的树木,其致密度就越低,生命往往也越短暂;而松树、柏树、胡杨等树种,要上百年才能成材,用起来却可千年不朽。 - 俞敏洪

转载地址:http://rhfcl.baihongyu.com/

你可能感兴趣的文章
js mysql替换_JS replaceChild()方法:替换节点
查看>>
导出pdf 不换行_公众号文章导出为PDF步骤详解,让文章导出不变形的小秘密
查看>>
mysql varchar char_mysql varchar跟char的区别
查看>>
pycharm如何安装pythoncard_Pycharm中对与Python的快捷方式
查看>>
python视频延迟严重_Python音视频合并中的延迟问题
查看>>
连接MySQL程序闲置卡顿_是什么造成了数据库的卡顿
查看>>
mysql cmake编译安装mysql_cmake编译安装mysql
查看>>
文明重启怎么做RUST堡垒_文明重启怎么地下建房-地下建房技巧
查看>>
用python画微信捂脸_用 Python 画一个捂脸表情
查看>>
mysql alter float_mysql-数据类型
查看>>
服务器被黑 追寻ip_服务器被如下ip攻击,如何根据ip超找攻击来源
查看>>
java 方差_java计算方差、标准差(均方差)实例代码
查看>>
<<java程序设计>>_Java程序设计
查看>>
java import lang_java.lang
查看>>
java实验Java面向对象编程_Java实验项目 面向对象编程.doc
查看>>
java ldap添加用户名密码_使用用户名和密码的Java LDAP身份验证
查看>>
java 单精度数据后缀_java有哪些基本数据类型
查看>>
java 死锁 定位_Java中死锁的定位与修复
查看>>
mysql数据库内存结构_mysql 内存结构
查看>>
java swing 链接_JAVA中Jtable标签设置超级链接:基于Java Swing的超链接标签和超链接按钮的实现...
查看>>