JavaWeb中的Servlet是什么?怎么使用?

文章目录

    • 一、什么是Servlet
    • 二、Servlet的基本内容
      • 1、Servlet的作用
      • 2、Servlet接口
      • 3、Servlet接口实现类
      • 4、Servlet接口实现类开发步骤
      • 5、Servlet对象生命周期
      • 6、HttpServletResquest接口
      • 7、HttpServletResponse接口
      • 8、请求对象和响应对象流程图
      • 9、请求对象和响应对象生命周期
      • 10、欢迎资源文件
    • 三、Http状态码
    • 四、多个Servlet之间调用规则
      • 1、重定向解决方案
      • 2、请求转发解决方案
    • 五、多个servlet之间数据共享实现方案
      • 1、ServletContext接口:来自于servlet规范
      • 2、Cookie类:来自于servlet规范中一个工具类
      • 3、HttpSession接口:来自于servlet规范中的一个接口
      • 4、HttpServletRequest:接口实现数据共享
    • 六、Servlet规范扩展(监听器接口)
      • 1、作用域对象
      • 2、监听器接口实现类开发规范:三步
      • 3、ServletContextListener接口
      • 4、ServletContextAttributeListener接口
      • 5、全局作用域对象共享数据变化时刻
    • 七、Servlet规范扩展(Filter接口)过滤器接口
      • 1、具体作用:
      • 2、Filter接口实现类开发步骤:三步
      • 3、Filter拦截地址格式

一、什么是Servlet

Servlet(Server Applet)是Java Servlet的简称,通常被称为小服务程序或服务连接器。它是一个用Java编写的服务器端程序,具有独立于平台和协议的特性。Servlet的主要功能在于交互式地浏览和生成数据,进而生成动态Web内容。

从狭义上讲,Servlet是指Java语言实现的一个接口。而从广义上理解,Servlet则是指任何实现了这个Servlet接口的类。在大多数情况下,人们更倾向于将Servlet理解为后者。

Servlet通常运行于支持Java的应用服务器中,例如Tomcat。

从工作原理上看,当客户端在浏览器中输入URL或者点击链接时,浏览器会向服务器发送HTTP请求。Web服务器接收到请求后,会根据URL找到对应的Servlet。 如果是第一次请求该Servlet,容器会创建一个Servlet实例,并调用其init()方法进行初始化。在这个阶段,可以进行一些必要的配置,如数据库连接等。一旦Servlet初始化完成,它就可以处理客户端的请求。Servlet会根据请求的类型(如GET、POST等)调用相应的方法(如doGet()、doPost()等)来处理请求。在处理请求的过程中,Servlet可以从请求中获取参数、处理业务逻辑、访问数据库等。最后,Servlet会生成一个响应,并将其发送回客户端。

需要注意的是,虽然从原理上讲,Servlet可以响应任何类型的请求,但在绝大多数情况下,Servlet主要用于扩展基于HTTP协议的Web服务器。

二、Servlet的基本内容

1、Servlet的作用

  • 在Servlet规范中,指定【动态资源文件】开发步骤。
  • 在Servlet规范中,指定Http服务器调用动态资源文件规则。
  • 在Servlet规范中,指定Http服务器管理动态资源文件实例对象规则;

2、Servlet接口

Servlet接口是Java Web开发中的一个关键组件,定义了一组方法,用于处理Web请求和生成响应。Servlet接口是JavaEE规范的一部分,是JavaWeb三大组件之一。Servlet接口在Web应用程序中起着重要的作用,使得Web服务器能够动态地生成和提供Web内容。

Servlet接口定义了以下方法:

  • init() 在Servlet实例化后,Servlet容器会调用此方法来完成Servlet的初始化工作。这通常包括加载配置信息、建立数据库连接等。
  • service() 容器调用此方法来处理客户端的请求。根据请求的类型(如GET、POST等),Servlet会调用相应的方法(如doGet()、doPost()等)来处理请求。
  • destroy() 当Servlet不再需要时,Servlet容器会调用此方法来销毁Servlet实例,释放资源。
  • getServletConfig() 此方法返回ServletConfig对象,该对象包含从Web应用程序的配置信息中获取的初始化参数。
  • getServletInfo() 此方法返回有关Servlet的信息,如作者、版本、版权等。

Servlet接口的这些方法使得Servlet能够接收客户端发送的请求,根据请求类型进行处理,并生成相应的响应返回给客户端。同时,Servlet还可以通过ServletConfig对象获取Web应用程序的配置信息,以及通过ServletContext对象与Servlet容器进行通信。

在实际开发中,通常不会直接实现Servlet接口,而是继承HttpServlet类,该类是Servlet接口的一个通用实现,提供了处理HTTP请求的基本框架。通过继承HttpServlet类并重写其doGet()、doPost()等方法,可以方便地实现自定义的Servlet逻辑。

3、Servlet接口实现类

Servlet接口来自于Servlet规范下一个接口,这个接口存在Http服务器提供jar包。Tomcat服务器下lib文件有一个servlet-api.jar存放Servlet接口(javax.servlet.servlet接口)。Servlet规范中认为,Http服务器能调用的【动态资源文件】必须是一个servlet接口实现类。

class student{}// 不是动态资源文件,Tomcat无权调用class Teacher implements servlet{} // 实现这个接口,也叫servlet接口实现类!// 合法动态资源文件,Tomcat有权利调用servlet obj = new Teacher();obj.doGet();

4、Servlet接口实现类开发步骤

  • 创建一个Java类继承于HttpServlet父类,使之成为一个Servlet接口实现类。
  • 重写HttpServlet父类两个方法。doGetdoPost
  • 将Servlet接口实现类信息注册到Tomcat服务器
<!--将servlet接口实现类类路径地址交给Tomcat-->
<servlet><servlet-name>myservlet</servlet-name><!--声明一个变量存储servlet接口实现类类路径--><servlet-class>com.qdwa.controller.OneServlet</servlet-class><!--声明servlet接口-->
</servlet>// Tomcat 
String myservlet = "com.qdwa.controller.oneservlet";<!--为了降低用户访问servlet接口实现类难度,需要设置简短请求别名-->
<servlet-mapping><servlet-name>myservlet</servlet-name><url-pattern>/one</url-pattern><!--设置简短请求别名,别名在书写时必须以/"为开头-->
</servlet-mapping>

现在浏览器向Tomcat索要oneServlet的地址是:http://localhost:8080/myweb/one

5、Servlet对象生命周期

  • 网站中所有的Servlet接口实现类的实例对象,只能由Http服务器负责创建。
  • 开发人员不能手动创建servlet接口实现类的实例对象。
  • 在默认的情况下,Http服务器接收到对于当前servlet接口实现类的第一次请求时,自动创建这个servlet接口实现类的实例对象。
  • 在手动配置情况下,要求Http服务器在启动时自动创建某个servlet接口实现类的实例对象。
<servlet><servlet-name>myservlet</servlet-name><!--声明一个变量存储servlet接口实现类类路径中--><servlet-class>com.qdwa.controller.oneservlet</servlet-class><load-on-startup>30</load-on-startup><!--填写一个大于0的整数即可-->
</servlet>
  • 在Http服务器运行期间,一个servlet接口实现类只能被创建出一个实例对象。
  • 在Http服务器关闭时刻,自动将网站中所有的servlet对象进行销毁。

6、HttpServletResquest接口

介绍:

  • HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar
  • HttpServletRequest接口实现类由Http服务器负责提供。
  • HttpServletRequest接口负责在doGet/doPost方法运行时读取ttp请求协议包中信息。
  • 开发人员习惯于将HttpServletRequest接口修饰的对象称为请求对象

作用:

  • 可以读取Http请求协议包中请求行信息
  • 可以读取保存在Http请求协议包中请求头请求体中请求参数信息。
  • 可以代替浏览器向Http服务器申请资源文件调用。

7、HttpServletResponse接口

介绍:

  • HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar
  • HttpServletResponse接口实现类由Http服务器负责提供。
  • HttpServletResponse接口负责将docet/doPost方法执行结果写入到响应体交给浏览器。
  • 开发人员习惯于将HttpServletResponse接口修饰的对象称为响应对象

功能:

  • 将执行结果以二进制形式写入到响应体
  • 设置响应头中content-type属性值,从而控制浏览器使用。
  • 对应编译器将响应体二进制数据编译为文字,图片,视频,命令

设置响应头中location属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求。

8、请求对象和响应对象流程图

HttpServletResquest接口和HttpServletResponse接口

9、请求对象和响应对象生命周期

  • 在Http服务器接收到浏览器发送的Http请求协议包之后,自动为当前的Http请求协议包生成一个请求对象和一个响应对象
  • 在Http服务器调用doGet/doPost方法时,负责将请求对象响应对象作为实参传递到方法,确保doGet/doPost正确执行。
  • 在Http服务器准备推送Http响应协议包之前,负责将本次请求关联的请求对象响应对象销毁。
  • 请求对象响应对象的生命周期贯穿在一次请求的处理过程中。
  • 请求对象响应对象相当于用户在服务端的代言人。
    请求对象和响应对象的周期图

10、欢迎资源文件

用户可以记住网站名,但是不会记住网站资源文件名。

1、什么是默认欢迎资源文件

用户发送了一个对某网站的【默认请求】时,由Http服务器自动从当前网站返回的资源文件。

  • 正常请求:http://localhost:8080/myweb/index.html
  • 默认请求:http://localhost:8080/myweb/

2、Tomcat对于默认欢迎资源文件定位规则

规则位置:Tomcat安装位置/conf/web.xml

规则命令:

<welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file>
</welcome-file-list>

3、设置当前网站的默认欢迎资源文件规则

规则位置:网站/web/WEB-INF/web.xml

规则命令:

<welcome-file-list><welcome-file>login. html</welcome-file>
</welcome-file-list>

网站设置自定义默认文件定位规则,此时Tomcat自带定位规则将失效。

三、Http状态码

  • 由三位数字组成的一个符号。
  • Http服务器在推送响应包之前,根据本次请求处理情况,将Http状态码写入到响应包中状态行上。
  • 如果Http服务器针对本次请求,返回了对应的资源文件,可以通过Http状态码通知浏览器应该如何处理这个结果。
  • 如果Http服务器针对本次请求,无法返回对应的资源文件,可以通过Http状态码向浏览器解释不能提供服务的原因。

分类:在100到599的范围内,共分为5个大类。

  • `1XX:
  • 100 通知浏览器本次返回的资源文件并不是一个独立的资源文件,需要浏览器在接收响应包之后,继续向Http服务器所要依赖的其他资源文件。
  • 2XX:
  • 200 通知浏览器本次返回的资源文件是一个完整独立资源文件,浏览器在接收到之后不需要索要其他关联文件。
  • 3XX:
  • 302 通知浏览器本次返回的不是一个资源文件内容而是一个资源文件地址,需要浏览器根据这个地址自动发起请求来索要这个资源文件,response.sendRedirect("资源文件地址");写入到响应头中location,而这个行为导致Tomcat将302状态码写入到状态行。
  • 4XX:
  • 404 通知浏览器,由于在服务端没有定位到被访问的资源文件,因此无法提供帮助;
  • 405 通知浏览器,在服务端已经定位到被访问的资源文件Servlet, 但是这个Servlet对于浏览器采用的请求方式不能处理,POST与GET方式的不同。
  • 5XX:
  • 500 通知浏览器,在服务端已经定位到被访问的资源文件Servlet , 这个Servlet可以接收浏览器采用请求方式,但是Servlet在处理请求期间,由于Java异常导致处理失败,例如空指针异常。

四、多个Servlet之间调用规则

某些来自于浏览器发送请求,往往需要服务端中多个servlet协同处理。

浏览器一次只能访问一个servlet,导致用户需要手动通过浏览器发起多次请求才能得到服务。这样增加用户获得服务难度,导致用户放弃访问当前网站【98k,AKM】。

为了提高用户使用感受规则,无论本次请求涉及到多少个servlet,用户只需要手动通知浏览器发起一次请求即可。

产生了 重定向解决方案与请求转发解决方案。

1、重定向解决方案

用户第一次通过手动方式通知浏览器访问OneServlet。OneServlet工作完毕后,将TwoServlet地址写入到响应头中location属性中,导致Tomcat将302状态码写入到状态行。在浏览器接收到响应包之后,会读取到302状态。此时浏览器自动根据响应头中location属性地址,发起第二次请求,访问TwoServlet去完成请求中剩余任务。

response.sendRedirect("请求地址"); //将地址写入到响应包中响应头中location属性

1)请求地址

  • 既可以把当前网站内部的资源文件地址发送给浏览器(/网站名/资源文件名)。
  • 也可以把其他网站资源文件地址发送给浏览器(http://ip地址:端口号/网站名/资源文件名)。

2)请求次数

  • 浏览器至少发送两次请求,但是只有第一次请求是用户手动发送。
  • 后续请求都是浏览器自动发送的。

3)请求方式

  • 重定向解决方案中,通过地址栏通知浏览器发起下一次请求,因此,通过重定向解决方案调用的资源文件接收的请求方式一定是GET

4)缺点

  • 重定向解决方案需要在浏览器与服务器之间进行多次往返,大量时间消耗在往返次数上,增加用户等待服务时间。

2、请求转发解决方案

用户第一次通过手动方式要求浏览器访问OneServlet,OneServlet工作完毕后,通过当前的请求对象代替浏览器向Tomcat发送请求,申请调用TwoServlet。Tomcat在接收到这个请求之后,自动调用Twoservlet来完成剩余任务。

// 请求对象代替浏览器向Tomcat发送请求// 1、通过当前请求对象生成资源文件申请报告对象
RequestDispatcher report = request.getRequestDispatcher("/资源文件名");// 一定要以"/"为开头
// 2、将报告对象发送给Tomcat
report.forward(当前请求对象,当前响应对象);// 3、合写
RequestDispatcher report = request.getRequestDispatcher("/资源文件名").forward(当前请求对象, 当前响应对象);

1)请求次数

  • 在请求转发过程中,浏览器只发送一次请求。

2)请求地址

  • 只能向Tomcat服务器申请调用当前网站下资源文件地址。
  • request.getRequestDispathcer("/资源文件名"); 不要写网站名。

3)请求方式

  • 在请求转发过程中,浏览器只发送一个了个Http请求协议包。
  • 参与本次请求的所有Servlet共享同一个请求协议包,因此这些servlet接收的请求方式与浏览器发送的请求方式保持一致。

4)优点

  • 无论本次请求涉及到多少个servlet,用户只需要手动通过浏览器发送一次请求。
  • Servlet之间调用发生在服务端计算机上,节省服务端与浏览器之间往返次数,增加处理服务速度。

五、多个servlet之间数据共享实现方案

数据共享:OneServlet工作完毕后,将产生数据交给TwoServlet来使用。

Servlet规范中提供四种数据共享方案

  • servletContext接口 全局作用域对象!Application
  • cookie类 会员卡!Cookie
  • HttpSession接口 会话作用域对象!Session
  • HttpServletRequest接口 请求作用域对象!

1、ServletContext接口:来自于servlet规范

来自于servlet规范中一个接口。在Tomcat中存在servlet-api.jar,在Tomcat中负责提供这个接口实现类。

如果两个servlet来自于同一个网站,彼此之间通过网站的servletContext实例对象实现数据共享。开发人员习惯于将servletContext对象称为全局作用域对象

工作原理:(类似于垃圾箱,如果不断增加,会导致死机,)

  • 每一个网站都存在一个全局作用域对象。这个全局作用域对象【相当于】一个Map。
  • 在这个网站中OneServlet可以将一个数据存入到全局作用域对象,当前网站中其他Servlet此时都可以从全局作用域对象得到这个数据进行使用。

全局作用域对象生命周期:

  • 在Http服务器启动过程中,自动为当前网站在内存中创建一个全局作用域对象。
  • 在Http服务器运行期间时,一个网站只有一个全局作用域对象。
  • 在Http服务器运行期间,全局作用域对象一直处于存活状态。
  • 在Http服务器准备关闭时,负责将当前网站中全局作用域对象进行销毁处理。
  • 全局作用域对象生命周期贯穿网站整个运行期间。

命令实现:【同一个网站】OneServlet将数据共享给TwoServlet

// OneServlet 
public void doGet(HttpServletRequest request,HttpServletResponse response){// 1、通过【请求对象】向Tomcat索要当前网站中【全局作用域对象】ServletContext appliction = request.getServletContext();// 2、将数据添加到全局作用域对象作为【共享数据】Appliation.SetAttribute("key1", 数据);
}// TwoServlet
public void doGet(HttpServletRequest request,HttpServletResponse response){// 1、通过【请求对象】向Tomcat索要当前网站中【全局作用域对象】ServletContext application = request.getServletContext();// 2、从全局作用域对象得到指定关键字对应数据object 数据 = application.getAttribute("key1");
}

2、Cookie类:来自于servlet规范中一个工具类

Cookie来自于servlet规范中一个工具类,存在于Tomcat提供servlet-api.jar中,如果两个Servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助于Cookie对象进行数据共享。

Cookie存放当前用户的私人数据,在共享数据过程中提高服务质量,在现实生活场景中,Cookie相当于用户在服务端得到会员卡

工作原理

  • 用户通过浏览器第一次向myWeb网站发送请求申请OneServlet,OneServlet在运行期间创建一个Cookie存储与当前用户相关数据。
  • OneServlet工作完毕后,将Cookie写入到响应头交还给当前浏览器。
  • 浏览器收到响应包之后,将Cookie存储在浏览器的缓存一段时间之后,用户通过同一个浏览器再次向myWeb网站发送请求申请TwoServlet时。
  • 浏览器需要无条件的将myWeb网站之前推送过来的Cookie,写入到请求头发送过去。
  • 此时TwoServlet在运行时,就可以通过读取请求头中Cookie中信息,得到OneServlet提供的共享数据。

实现命令: 【同一个网站】OneServlet 与TwoServlet 借助于Cookie实现数据共享

// OneServlet
public void doGet(HrttpServletRequst requst,HttpServletResponse response){// 1、创建一个Cookie对象,保存共享数据(当前用户的数据)Cookie card = new Cookie("key1","abc");Cookie card1 = new Cookie("key1","efg");// **********cookie相当与一个map// **********一个cookie中只能存放一个键值对,一个Cookie只能存一个共享数据!// **********这个键值对的key和value只能是String// **********键值对中key不能是中文// 2.【发卡】将cookie写入到响应头中,交给浏览器response.addCookie(card);response.addCookie(card1);
}// TwoServlet
public void doGet(HttpServletRequest request,HttpServletResponse resp) {// 1、调用请求对象从请求头得到浏览器返回的cookieCookie cookieArray[] = request.getCookies();// 2、循环遍历数据得到每一个cookie的key 与valuefor (Cookie card:cookieArray) {String key =card.getName(); // 读取key "key1"Strign value = card.getValue(); // 读取value "abc"// 提供较好的服务。。。。。}
}    

Cookie销毁时机

  • 默认情况,Cookie对象存放在浏览器的缓存中,只要浏览器关闭,Cookie对象就被销毁掉。
  • 在手动设置情况下,可以要求浏览器将按收的Cookie存放在客户端计算机上硬盘上,同时需要指定Cookie在硬盘上存活时间。
  • 在存活时间范围内,关闭浏览器关闭客户端计算机,关闭服务器,都不会导致cookie被销毁。在存活时间到达时,Cookie自动从硬盘上被删除
Cookie.setMaxAge(60); // Cookie在硬盘上存活1分钟

3、HttpSession接口:来自于servlet规范中的一个接口

HttpSession接口来自于servlet规范中的一个接口。存在于Tomcat中servlet-api.jar,其实现类由Http服务器提供。Tomcat提供实现类存在于servlet-api.jar。

如果两个Servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助于HttpSession对象进行数据共享,开发人员习惯于将HttpSession接口修饰对象称为【会话作用域对象】

1、HttpSession与Cookie 区别:【面试题】

1)存储位置:

  • Cookie:存放在客户端计算机(浏览器内存/硬盘)。
  • HttpSession:存放在服务端计算机内存。

2)数据类型:

  • Cookie对象存储共享数据类型只能是string。
  • HttpSession对象可以存储任意类型的共享数据object。

3)数据数量:

  • 一个Cookie对象只能存储一个共享数据。
  • HttpSession使用map集合存储共享数据,所以可以存储任意数量共享数据。

4)参照物:

  • Cookie相当于客户在服务端会员卡
  • HttpSession相当于客户在服务端私人保险柜

2、命令实现: 同一个网站(myWeb)下OneServlet将数据传递给TwoServlet

// OneServlet
public void doGet(HttpServletRequest request,HttpServletResponse response)// 1、调用请求对象向Tomcat索要当前用户在服务端的私人储物柜HttpSession session = request.getSession();// 2、将数据添加到用户私人储物柜session.setAttribute("key1", 共享数据);
}
// 浏览器访问/myWeb中TwoServlet
// TwoServlet
public void doGet(HttpServletRequest request,HttpServletResponse response) {// 1、调用请求对象向Tomcat索要当前用户在服务端的私人储物柜HttpSession  session = request.getSession();// 2、从会话作用域对象得到oneservlet提供的共享数据Object 共享数据 = session.getAttribute("key1");
}

Http服务器通过Cookie将用户与HttpSession关联起来。

3、getSession()与getSession (false)

  • getSession():
  • 如果当前用户在服务端已经拥有了自己的私人储物柜,要求tomcat将这个私人储物柜进行返回。
  • 如果当前用户在服务端尚未拥有自己的私人储物柜,要求tocmat为当前用户创建一个全新的私人储物柜。
  • getSession(false):
  • 如果当前用户在服务端已经拥有了自己的私人储物柜,要求tomcat将这个私人储物柜进行返回。
  • 如果当前用户在服务端尚未拥有自己的私人储物柜,此时Tomcat将返回null。

4、HttpSession销毁时机

  • 用户与HttpSession关联时使用的Cookie只能存放在浏览器缓存中。在浏览器关闭时,意味着用户与他的HttpSession关系被切断。由于Tomcat无法检测浏览器何时关闭,因此在浏览器关闭时并不会导致Tomcat将浏览器关联的HttpSession进行销毁。
  • 为了解决这个问题,Tomcat为每一个HttpSession对象设置空闲时间,这个空闲时间默认30分钟,如果当前HttpSession对象空闲时间达到30分钟,此时Tomcat认为用户已经放弃了自己的HttpSession,Tomcat就会销毁掉这个HttpSession。

4、HttpServletRequest:接口实现数据共享

在同一个网站中,如果两个servlet之间通过请求转发方式进行调用,彼此之间共享同一个请求协议包。而一个请求协议包只对应一个请求对象,因此servlet之间共享同一个请求对象,此时可以利用这个请求对象在两个servlet之间实现数据共享。

在请求对象实现servlet之间数据共享功能时,开发人员将请求对象称为请求作用域对象

1、命令实现: OneServlet通过请求转发申请调用Twoservlet时,需要给Twoservlet提供共享数据

// OneServlet
public void docet (HttpServletRequest request,HttpServletResponse response){// 1、将数据添加到【请求作用域对象】中attribute属性request.setAttribute("key1", 数据);  // 数据类型可以任意类型object// 2、向Tomcat申请调用Twoservletrequest.getRequestDispatcher("/two").forward(request, response);}
// TwoServlet
public void doGet(HttpServletRequest request,HttpServletResponse respons){// 从当前请求对象得到OneServlet写入到共享数据object数据= request.getAttribute("key1");
}

六、Servlet规范扩展(监听器接口)

一组来自于servlet规范下接口,共有8个接口。在Tomcat存在servlet-api.jar包。监听器接口需要由开发人员亲自实现,Http服务器提供jar包并没有对应的实现类。监听器接口用于监听作用域对象生命周期变化时刻以及作用域对象共享数据变化时刻

1、作用域对象

在servlet规范中,认为在服务端内存中可以在某些条件下为两个servlet之间提供数据共享方案的对象,被称为作用域对象

servlet规范下作用域对象:

  • ServletContext:全局作用域对象
  • HttpSession:会话作用域对象
  • HttpServletRequest:请求作用域对象

2、监听器接口实现类开发规范:三步

  • 根据监听的实际情况,选择对应监听器口进行实现。
  • 重写监听器接口声明监听事件处理方法
  • 在web.xml文件将监听器接口实现类注册到Http服务器。

3、ServletContextListener接口

通过这个接口合法的检测全局作用域对象被初始化时刻以及被销毁时刻。

监听事件处理方法:

public void contextInitlized (); // 在全局作用域对象被Http服务器初始化被调用
public void contextDestory (); // 在全局作用域对象被Http服务器销毁时候触发调用

4、ServletContextAttributeListener接口

通过这个接口合法的检测全局作用域对象共享数据变化时刻。

监听事件处理方法:

public void contextAdd(); // 在全局作用域对象添加共享数据
public void contextReplaced(); //在全局作用域对象更新共享数据
public void contextRemove(); // 在全局作用域对象删除共享数据

5、全局作用域对象共享数据变化时刻

ServletContext application = request.getServletContext() ;application.setAttribute("key1",100); // 新增共享数据application.setAttribute("key1",200); // 更新共享数据application.removeAttribute("key1"); // 删除共享数据

七、Servlet规范扩展(Filter接口)过滤器接口

来自于Servlet规范下接口,在Tomcat中存在于servlet-api.jar包。Filter接口实现类由开发人员负责提供,Http服务器不负责提供。Filter接口在Http服务器调用资源文件之前,对Http服务器进行拦截

1、具体作用:

  • 拦截Http服务器,帮助Http服务器检测当前请求合法性。
  • 拦截Http服务器,对当前请求进行增强操作。

2、Filter接口实现类开发步骤:三步

  • 创建一个Java类实现Filter接口。
  • 重写Filter接口中doFilter方法。
  • 在web.xml将过滤器接口实现注册类注册到Http服务器。

3、Filter拦截地址格式

<filter-mapping><filter-name>oneFilter</filter-name><url-pattern>拦截地址</url-pattern></filter-mapping>

命令作用:拦截地址通知Tomcat在调用何种资源文件之前需要调用oneFilter过滤进行拦截。

// 要求Tomcat在调用某一个具体文件之前,来调用oneFilter拦截
<url-pattern>/img/mm.jpg</url-pattern>// 要求Tomcat在调用某一个文件夹下所有的资源文件之前,来调用oneFilter拦截
<url-pattern>/img/*</url-pattern>// 要求Tomcat在调用任意文件夹下某种类型文件之前,来调用oneFilter拦截;
<url-pattern>*.jpg</url-pattern>// 要求Tomcat在调用网站中任意文件时,来调用oneFilter拦截;
<url-pattern>/*</url-pattern>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2019-0193)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。此次漏洞出现在Apache Solr的DataImportHandler&#xff0c;该模块是一个可选但常用的模块&#xff0c;用于从数据库和其他源中提取数据。它具有一个功能&#…

vue给input密码框设置眼睛睁开闭合对于密码显示与隐藏

<template><div class"login-container"><el-inputv-model"pwd":type"type"class"pwd-input"placeholder"请输入密码"><islot"suffix"class"icon-style":class"elIcon"…

三子棋(C游戏)

文章目录 三子棋的描述思路关键代码运行代码 三子棋的描述 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#xff0c;率先将自己的三个棋子走成一条线就视为胜利&#xff0c;…

实现 select 中嵌套 tree 外加搜索

实现 select 中嵌套 tree 外加搜索 参考地址实现地址 代码 <el-form-item label"考核人员" prop"userIdArr" v-if"title 发起考核"><el-popover v-model"popoverVisible" placement"bottom" trigger"cli…

论文笔记:Teaching Large Language Models to Self-Debug

ICLR 2024 REVIEWER打分 6666 1 论文介绍 论文提出了一种名为 Self-Debugging 的方法&#xff0c;通过执行生成的代码并基于代码和执行结果生成反馈信息&#xff0c;来引导模型进行调试不同于需要额外训练/微调模型的方法&#xff0c;Self-Debugging 通过代码解释来指导模型识…

Windows Server 2008 (限制用户登录时间、为客户机设置统一的桌面背景、管理用户统一安装软件、隐藏用户C盘)

一、限制用户登陆时间 Server&#xff1a; Client&#xff1a; Server&#xff1a; 将新建的用户移动到group1下 限制用户登陆时间 二、为客户机设置统一的桌面背景 Server&#xff1a; 将jpg图片放到abc文件夹中&#xff0c;并且设置文件夹共享模式 三、管理用户统一安装软件…

DFS:深搜+回溯+剪枝解决矩阵搜索问题

创作不易&#xff0c;感谢三连&#xff01;&#xff01; 一、N皇后 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<vector<string>> ret;vector<string> path;bool checkcol[9];bool checkdig1[18];bool checkdig2[18];int n…

WordPress主题–Applay v3.7.1 开心版下载

Applay是一款功能强大的多用途WordPress主题&#xff0c;专为应用展示、应用商店、商业和购物等Woocommerce网站而设计。它配备了拖曳式页面编辑功能&#xff0c;类似于Elementor&#xff0c;让您能够轻松构建和定制您的网站。无论您有什么需求&#xff0c;都可以尝试下这个主题…

Flutter 画笔(Paint)、绘制直线(drawLine)

override bool shouldRepaint(CustomPainter oldDelegate) > true; } class MyPainter extends CustomPainter { override void paint(Canvas canvas, Size size) { //画背景 var paint Paint() …isAntiAlias false …strokeWidth30.0 …color Colors.red; c…

金融贷款批准预测项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 在金融服务行业&#xff0c;贷款审批是一项关键任务&#xff0c;它不仅关系到资金的安全&#xff0c;还直接影响到金融机构的运营效率和风险管理…

8000预算可以购买阿里云服务器配置整理

一个月8000元预算如何选择阿里云服务器配置&#xff1f;八千预算可选的阿里云服务器配置相当高了&#xff0c;这个预算可以购买阿里云企业级独享型云服务器&#xff0c;至少8核以上的配置&#xff0c;这个预算可以支持复杂、高负载或大规模的业务需求。阿里云服务器网整理8000元…

微信小程序python+uniapp高校图书馆图书借阅管理系统ljr9i

根据日常实际需要&#xff0c;一方面需要在系统中实现基础信息的管理&#xff0c;同时还需要结合实际情况的需要&#xff0c;提供图书信息管理功能&#xff0c;方便图书管理工作的展开&#xff0c;综合考虑&#xff0c;本套系统应该满足如下要求&#xff1a; 首先&#xff0c;在…

C之结构体初始化10种写法总结(九十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

基于Java微信小程序的医院挂号小程序,附源码

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

Spring Boot 整合 RabbitMQ 实现延迟消息

关于 RabbitMQ 消息队列&#xff08;Message Queuing&#xff0c;简写为 MQ&#xff09;最初是为了解决金融行业的特定业务需求而产生的。慢慢的&#xff0c;MQ 被应用到了更多的领域&#xff0c;然而商业 MQ 高昂的价格让很多初创公司望而却步&#xff0c;于是 AMQP&#xff0…

网络基础二——传输层协议UDP与TCP

九、传输层协议 ​ 传输层协议有UDP协议、TCP协议等&#xff1b; ​ 两个远端机器通过使用"源IP"&#xff0c;“源端口号”&#xff0c;“目的IP”&#xff0c;“目的端口号”&#xff0c;"协议号"来标识一次通信&#xff1b; 9.1端口号的划分 ​ 0-10…

2024年腾讯云4核8G服务器性能可以满足哪些使用场景?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

【Redis】分布式锁及其他常见问题

分布式锁及其他常见问题 1. 我看你的项目都用到了 Redis&#xff0c;你在最近的项目的哪些场景下用到了 Redis 呢&#xff1f; 一定要结合业务场景来回答问题&#xff01;要是没有不要硬讲&#xff0c;除非面试官问&#xff1b; 接下来面试官将深入发问。 你没用到的也可能会…

【opencv】教程代码 —video(2) optical_flow (稀疏光流、稠密光流)

1. optical_flow.cpp 稀疏光流 #include <iostream> // 引入输入输出流库 #include <opencv2/core.hpp> // 引入OpenCV的核心功能模块 #include <opencv2/highgui.hpp> // 引入OpenCV的高级GUI模块&#xff0c;提供显示图像的功能 #include <opencv2/imgp…

Python | NCL风格 | EOF | 相关 | 回归

这里在linux系统上使用geocat实现NCL风格的图片绘制 geocat Linux上安装 geocat conda update condaconda create -n geocat -c conda-forge geocat-vizconda activate geocatconda update geocat-viz Dataset - NOAA Optimum Interpolation (OI) SST V2 # 海温月平均数据- lsm…