学校网站建设新闻,农业交易平台网站建设,行业电子商务网站建设,城阳建设局网站前言在 Spring Boot 中已经移除了 web.xml 文件#xff0c;如果需要注册添加 Servlet、Filter、Listener 为 Spring Bean#xff0c;在 Spring Boot 中有两种方式#xff1a;使用 Servlet 3.0 API 的注解 WebServlet、WebFilter、Listener 用来配置。Spring Boot JavaConfig…前言在 Spring Boot 中已经移除了 web.xml 文件如果需要注册添加 Servlet、Filter、Listener 为 Spring Bean在 Spring Boot 中有两种方式使用 Servlet 3.0 API 的注解 WebServlet、WebFilter、Listener 用来配置。Spring Boot JavaConfig 注解配置 Bean 的方式来进行配置。注册之前在使用 Servlet 时需要在 Spring Boot 入口类添加 ServletComponentScan 注解告诉 Spring Boot 去扫描使用下面注册的 Servlet、Filter、Listener。SpringBootApplicationServletComponentScanpublic class SpringBootServletApplication { public static void main(String[] args) { SpringApplication.run(SpringBootServletApplication.class, args); }}注册 Servlet1.WebServlet 属性属性类型描述nameString指定Servlet名称等价于valueString[]等同于 urlPatterns 属性两者不应该同时使用urlPatternsString[]指定一组 Servlet 的 URL 匹配模式。等价于标签loadOnStartupint指定 Servlet 的加载顺序等价于 标签initParamsWebInitParam[]指定一组 Servlet 初始化参数等价于标签asyncSupportedboolean声明 Servlet 是否支持异步操作模式等价于 标签smallIconString此 Servlet 的小图标largeIconString此 Servlet 的大图标descriptionString该 Servlet 的描述信息等价于 标签displayNameString该 Servlet 的显示名通常配合工具使用等价于 标签2.示例WebServlet(urlPatterns /TestServlet)public class TestServlet extends HttpServlet { /** * */ private static final long serialVersionUID -3325041776508043481L; Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { doPost(req, resp); } /* * 实现请求uri和header打印另外返回一个json */ Override public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { System.out.println(RequestURI: req.getRequestURI()); System.out.println(Request Headers:); StringBuilder sb new StringBuilder(); Enumeration names req.getHeaderNames(); while (names.hasMoreElements()) { String name names.nextElement().toString(); Enumeration hs req.getHeaders(name); sb.append(name).append(:); while (hs.hasMoreElements()) { sb.append(hs.nextElement()).append(;); } } System.out.println(sb); ObjectMapper omnew ObjectMapper(); UserEntity usernew UserEntity(); user.setId(1L); user.setUserName(zwqh); user.setUserSex(男); user.setHeaders(sb.toString()); String resultJsonom.writeValueAsString(user); resp.setContentType(application/json;charsetUTF-8); resp.getWriter().print(resultJson); }}其中WebServlet(urlPatterns /TestServlet)等价于以下代码 TestServlet cn.zwqh.springbboot.servlet.TestServlet TestServlet /TestServlet 3.测试浏览器访问 http://127.0.0.1:8080/TestServlet日志输出注册 Filter1.WebFilter 属性属性类型描述filterNameString指定Filter名称等价于valueString[]等同于 urlPatterns 属性两者不应该同时使用urlPatternsString[]指定一组 Filter 的 URL 匹配模式。等价于标签servletNamesString[]指定过滤器将应用于哪些 Servlet。取值于 WebServlet 中的 name 属性或者是 web.xml 中 的值initParamsWebInitParam[]指定一组 Filter 初始化参数等价于标签dispatcherTypesDispatcherType[]指定 Filter 的转发模式包括ASYNC、ERROR、FORWARD、INCLUDE、REQUESTasyncSupportedboolean声明 Filter 是否支持异步操作模式等价于 标签smallIconString此 Filter 的小图标largeIconString此 Filter 的大图标descriptionString该 Filter 的描述信息等价于 标签displayNameString该 Filter 的显示名通常配合工具使用等价于 标签2.示例WebFilter(urlPatterns { /TestServlet }) // 注册拦截器并添加拦截路径‘/TestServlet’public class TestFilter implements Filter { /** * 初始化只在项目启动的时候执行一次 */ Override public void init(FilterConfig filterConfig) { System.out.println( TestFilter init); } /** * 用于存放过滤器的业务逻辑实现代码 */ Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response);// 处理请求和响应的分界线 System.out.println( chain.doFilter 后执行处理 response 的相关方法); // 在response header里设置一个token setToken(response); } private void setToken(ServletResponse response) { HttpServletResponse res (HttpServletResponse) response; String token UUID.randomUUID().toString(); res.setHeader(Token, token); System.out.println( 设置了token token); } /** * 销毁在项目关闭Servlet 容器销毁前调用 */ Override public void destroy() { System.out.println( TestFilter destroy); }}3.测试浏览器访问 http://127.0.0.1:8080/TestServlet 日志打印4.Filter 主要使用场景禁用浏览器的缓存(缓存的处理)解决中文乱码问题登录鉴权及权限管理用户授权负责检查用户的请求根据请求过滤用户非法请求日志记录详细记录某些特殊的用户请求其他场景注册 Listener1.Listener 属性属性类型描述valueString侦听器Listener的描述2.示例与 ServletContext 相关的监听Servlet 的监听器 Listener 是实现了 javax.servlet.ServletContextListener 接口的服务器端程序随着 Web 应用启动而启动只初始化一次也随着 Web 应用停止而销毁。其主要作用是做一些初始化的内容添加工作如参数和对象等。WebListenerpublic class ContextListener implements ServletContextListener, ServletContextAttributeListener{ public static final String INITIAL_CONTENT Content created in servlet Context; /** * ServletContext创建 */ Override public void contextInitialized(ServletContextEvent sce) { System.out.println( context initialized); ServletContext servletContext sce.getServletContext(); servletContext.setAttribute(content, INITIAL_CONTENT); } /** * ServletContext销毁 */ Override public void contextDestroyed(ServletContextEvent sce) { System.out.println( context destroyed); } /** * context属性新增 */ Override public void attributeAdded(ServletContextAttributeEvent scae) { System.out.println( context attribute added); } /** * context属性移除 */ Override public void attributeRemoved(ServletContextAttributeEvent scae) { System.out.println( context attribute removed); } /** * context属性替换 */ Override public void attributeReplaced(ServletContextAttributeEvent scae) { System.out.println( context attribute replaced); }}与 HttpSession 相关的监听WebListenerpublic class SessionListener implements HttpSessionListener, HttpSessionIdListener, HttpSessionAttributeListener, HttpSessionActivationListener { /** * session被创建时 */ Override public void sessionCreated(HttpSessionEvent se) { System.out.println( session created); } /** * session被销毁时 */ Override public void sessionDestroyed(HttpSessionEvent se) { System.out.println( session destroyed); } /** * sessionId改变 */ Override public void sessionIdChanged(HttpSessionEvent se, String oldSessionId) { System.out.println( session id changed); } /** * session属性新增 */ Override public void attributeAdded(HttpSessionBindingEvent se) { System.out.println( session attribute added); } /** * session属性移除 */ Override public void attributeRemoved(HttpSessionBindingEvent se) { System.out.println( session attribute removed); } /** * session属性替换 */ Override public void attributeReplaced(HttpSessionBindingEvent se) { System.out.println( session attribute replaced); } /** * session的钝化内存的数据写入到硬盘上的过程。 */ Override public void sessionWillPassivate(HttpSessionEvent se) { System.out.println( session will passivate); } /** * session的活化将硬盘的数据恢复到内存中。 */ Override public void sessionDidActivate(HttpSessionEvent se) { System.out.println( session did activate); }}与 ServletRequest 相关的监听WebListenerpublic class RequestListener implements ServletRequestListener,ServletRequestAttributeListener { /** * 请求即将进入Web应用程序的范围/请求初始化时 */ Override public void requestInitialized(ServletRequestEvent sre) { System.out.println( request initialized); } /** * 请求即将进入Web应用程序的范围/请求销毁时 */ Override public void requestDestroyed(ServletRequestEvent sre) { System.out.println( request destroyed); } /** * request属性新增 */ Override public void attributeAdded(ServletRequestAttributeEvent srae) { System.out.println( request attribute added); } /** * request属性移除 */ Override public void attributeRemoved(ServletRequestAttributeEvent srae) { System.out.println( request attribute removed); } /** * request属性替换 */ Override public void attributeReplaced(ServletRequestAttributeEvent srae) { System.out.println( request attribute replaced); }}3.项目相关日志输入(启动和停止)先执行 contextInitialzed 方法在执行 TestFilter 类的 init 方法contextDestroyed 方法在 TestFilter 类 destroy 方法执行后执行。