注册 servlet 三大组件|学习笔记

简介: 快速学习注册 servlet 三大组件

开发者学堂课程【SpringBoot快速掌握 - 核心技术注册 servlet 三大组件】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/612/detail/9259


注册 servlet 三大组件

基本内容:

一、注册Servlet, FilterListener

二、自动拦截

 

前言

1. 嵌入式的 servlet 容器定制器来修改嵌入式的 servlet 容器的配置,它的使用就是传入一个可配置的嵌入式的 servlet 容器可以通过调用 API来设置端口设置访问路径等等

2. 接下来讲解如何来注册 servlet 的三大组件Servlet FilterListener由于现看到的能创建的  spring-boot 的应用,默认是以 jar 包的方式,来启动嵌入式的 tomcat,而不是创建一个标准的 web 应用的目录结构

3. 如果是一个 web 应用的目录结构,SRC 下会有一个 webapp 文件夹 /APP/WEB-INF/web.xml,可以把三大组件都注册在web.xml

4. 如果没有web.xml想要注册这些组件,可以吗

可以

SpringBoot 提供了这三种方式 ServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBean

 

一、注册 Servlet、 Filter、Listener

1. 由于 SpringBoot 是以 jar 包的方式来启动嵌入式的 S ervlet 容器来启动SpringBoo t 的 web 应用,没有 web.xml 文件

2. 要成为一个标准的 servlrt那就需要继承 HttpServlet;

package com. atguigu. springboot . servlet;

import javax . servlet . ServletException;

import javax. servlet . http. HttpServlet ;

import javax . servlet . http . HttpServletRequest;

import javax. servlet . http. HttpServletResponse;

import java. io. IOException;

public class MyServlet extends HttpServlet {

//处理get请求

@Override

protected void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException,

doPost(req,resp) ;

//在doget里面调用dopost请求,它们两个请求的执行逻辑是相同的;

}

//处理dopost请求

@Override

protected void doPost (HttpServletRequest req, HttpServletResponse resp) throws ServletException,

resp.getWriter().writer(S :“Hello,Servlet”)

//这是一个标准的Servlet程序,如果要它启动,必须要使用springboot提供的方式将它注册在Servlet容器中。需要使用ServletRegistrationBean将Servlet注册

//配置嵌入式的Servlet容器(服务器)

@Bean

public EmbeddedServletContainerCustomi zer embeddedServletContainerCustomizer( ) {

return new EmbeddedServletContainerCustomizer( ) {

//定制嵌入式的Servlet容器相关的规则

@Override

public void customize(Confi gurableEmbeddedServletContainer container) {

container. setPort (8083);

}

};

}

}

3. 注册三大组件的示意图

注册三大组件用以下方式

(1)ServletRegistrationBean

@Bean //一定要将程序加在容器中

public ServletRegistrationBean myServlet ( ) {

ServletRegistrationBean registrationBean = new ServletRegistrationBean

(newMyServlet(),"/myServlet");

registrationBean.setLoadOnstartup(int loadOnstartup)

//设置它的启动顺序等等相关操作都可以在这三个组件上面设置;

return registrationBean;

}

//映射 servlet 请求

//new 主要是一个有参构造器有参构造器可以加入一个标准的 Servlet并且显示出拦截路径这个 Servlet 就是标准的 Javax

//把它加在容器中,然后启动项目,看一下访问 myServlet 是不是 myServlet 能给浏览器写出“Hello,MyServlet”这句话。现在访问浏览器 localhost 8083,端口之前定制过了,叫8083。用8083来访问,看到 servlrt 就生效了。如下图所示

image.png

(2)FilterRegistrationBean

@Bean

public FilterRegistrationBean myFilter( ) {

FilterRegistrationBean registrationBean = new FilterRegistrationBean();

//先将FilterRegistrationBean注册

registrationBean . setFilter(new MyFilter( ) ) ;

//设置 MyFilter

registrationBean.setUrlPatterns(Arrays .asList("/hello", "/myServlet"));

//拦截的两个请求设置拦截setUrlPatterns还是一个集合将集合转为Arrays .asList第一个拦截hello请求第二个:拦截myServlet请求;

return registrationBean;

}

//把它加在容器中,然后启动项目,看一下 Filter 能否正常工作只要发送myServlet 请求或者发送 hello 请求,控制台都会打印 Filter 被拦截到的这句话,浏览器搜索 hello 或者 myServlet 浏览器都会响应,控制台也会显示出 MyFilter procress 

FilterRegistrationBean 注册完成

(3)ServletListenerRegistrationBean 

实现 Servlet 监听和销毁的 Listener

@Bean

public ServletListenerRegistrationBean myListener(){

ServletListenerRegistrationBeanregistrationBean = new ServletlistenerRegistrationBean<>(new MyListener());

return registrationBean;

}

监听和销毁:

package com. atguigu. springboot .listener;

import javax. servlet . ServletContextEvent ;

import javax . servlet . ServletContextListener;

public class MyL istener implements ServletContextListener {

@Override

public void contextInitialized(ServletContextEvent sce) {

System. out . println("contextInitialized...web”应用启动);

}

@Override

public void contextDestroyed(ServletContextEvent sce) {

System. out . println("contextDestroyed.. 当前web项目销毁");

}

}

注册 Listener 的类型:(Servlet 里面学到的 Listener 都可以使用

测试一下,看这个项目启动的时候写的Listener能不能在控制台打印应用启动、项目销毁的时候能不能监听销毁

这个监听器已经生效,监听到 web 应用启动。

那么销毁呢?

一停整个控制台就停了,就没有输出了;鼠标存在点也不要在控制台的总开关上停,这就跟拔电源是一样的;需要Exit的按钮,这是正常方式退出项目退出以后,发现也监听到 web 项目销毁了

总结对于这三大组件的属性设置都可以 registrationBean 在里面设置也就是说想关于三大组件的设置都可以在以上三个组件中进行

这就是如何在 springBoot 来注册三大组件。

 

二、自动拦截

SpringBoot 自动配置 SpringMVC 的时候,自的注册 SpringMVC 的前端控制噐:DIspatcherServlet ;可以参照自动代码自动代码在DispatcherServletAutoConfiguration 里面。

@Bean(name=DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)

@ConditionalOnBean(value=DispatcherServlet.class,name=DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)

public ServletRegistrationBean dispatcherServletRegistration(

DispatcherServlet dispatcherServlet) {

ServletRegistrationBean registration = new ServletRegistrationBean(

dispatcherServlet,this.serverProperties.getServletMapping());

//默认拦截:/ 所有请求;包括咨源,但是不截 jsp 清求;这就是“/”的意思

以前的拦截会使用“/*”但是“/*”会拦截jsp

//可以通过server。servletpath来修改SpringMVC前端控制器默认拦截的请求路径

registration.setName(DEFAULT_DISPATCHER_SERVTET_BEAN_NAME);  

registration. setLoadOnStartup(

this . webMvcProperties . getServlet(). getLoadOnStartup());

if (this . multipartConfig != null)  {

registration. setMultipartConfig(this . multipartConfig);

}

return registration;

}

上述程序就是给容器中注册了一个 DIspatcherServlet 。

相关文章
|
19天前
|
SQL 前端开发 关系型数据库
考古Servlet+JDBC实现简约的登录注册界面
考古Servlet+JDBC实现简约的登录注册界面
18 1
|
3月前
|
网络协议 前端开发 Java
异步Servlet学习笔记(一)
异步Servlet学习笔记(一)
|
5月前
|
前端开发 Java 容器
SpringBoot中注册Servlet、Filter和Listener(代码和注解两种方式)
SpringBoot中注册Servlet、Filter和Listener(代码和注解两种方式)
65 0
Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件
Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件
43 2
|
9月前
|
XML 存储 前端开发
Servlet技术入门(视频学习笔记)-2
2、ServletContext类的四大作用 获取web.xml中配置的上下文参数context-param 获取当前工程路径,格式:/工程路径 获取工程部署在服务器硬盘上的绝对路径
|
9月前
|
小程序 Java 应用服务中间件
Servlet技术入门(视频学习笔记)-1
一、Servlet技术 1、什么是Servlet Servlet是JaveEE规范之一,规范就是接口 Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器 Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送来的请求,并响应数据给客户端
|
12月前
|
API
java202304java学习笔记第六十二天-ssm-获取servlet相关api
java202304java学习笔记第六十二天-ssm-获取servlet相关api
59 0
|
12月前
|
API
java202304java学习笔记第六十二天-ssm-获取servlet相关api
java202304java学习笔记第六十二天-ssm-获取servlet相关api
69 0
|
前端开发 Java 应用服务中间件
Servlet入门学习笔记(下)
Servlet入门学习笔记(下)
|
前端开发 Java 关系型数据库
Servlet入门学习笔记(上)
Servlet入门学习笔记(上)