【Servlet】Servlet、ServletContext 和DefaultServlet

写这文章,实际是在深入学习spring的时候,遇到一个问题,applicationContext一次启动只能创建一次,在web应用中,存在一个ServletContext,生命周期随着web加载而创建,关闭而销毁,并且只存在一个,简直完美。
所以,applicationContext是随着ServletContext一起启动消灭的,并且applicationContext存在ServletContext域中,所以才有这本文。
先总结要点
1.servlet介绍
2.Servlet做一个web项目,Servlet生命周期和方法里面的参数意思
3.Servlet配置
4.标签
5.httpServlet
6.ServletContext对象

part1:【servlet介绍】
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。
servlet规范:包含三个技术点
1.servlet技术
2.filter技术—过滤器
3.listener技术—监听器

part2:【Servlet做一个web项目】
1.在tomcat lib下找到servlet的jar包,导入。
2.新建一个web项目
3.在web.xml里面配置一个servlet

图一
在这里插入图片描述

图二
在这里插入图片描述

图三
在这里插入图片描述

流程大概就是:
访问的时候,请求会发到tomcat服务上,然后tomcat识别出请求路径,封装好requset和response,然后创建servlet对象,调用(ServletRequest req, ServletResponse res)方法。

init(ServletConfig config):cinfig包含了配置的所有信息
(ServletRequest req, ServletResponse res):req包含了请求的所有参数,res包含了响应的参数

【servlet生命周期】
1.初次访问的时候,出生
2.响应客户端请求调用service
3.服务关闭的时候销毁

part3 【Servlet配置-url-pattern】
1.完全匹配,访问资源要和配置资源完全匹配才能访问到。

这个很好理解,如上图二图三所示,在web.xml里面配置的路径是servletDemo,那么访问的时候,http://localhost:8080/Servlet/servletDemo 全匹配上才能访问到ServletDemo这个类下的方法。

2.目录匹配,/虚拟目录/* *代表任意
在这里插入图片描述

在这里插入图片描述

3.扩张名匹配 *.扩展名
在这里插入图片描述

【补充说一个缺省的servlet】org.apache.catalina.servlets.DefaultServlet

当我们在输入test1.txt的时候,在项目web.xml中找不到一个有关test1.txt的匹配,这时候,会去tomcat下,找tomcat的web.xml

在这里插入图片描述

这里面配置了一个 / 对应了default这个别名类。如下如图。
DefaultServlet会去/默认的根路径下找一个名为test1.txt的文件。
如果/a,就到根目录下a路径下找一个tese1.txt的文件。

在这里插入图片描述

在这里插入图片描述

【Servlet配置-】

    Servlet默认第一次访问的时候才去创建,当然,我们还可以用load-on-startup标签去设置它的优先级,让它随着项目启动而创建。

注意看左边,启动还没访问,就执行了init方法。

在这里插入图片描述

part4【 】
如下图所示,会默认去找web.xml里面配置的index.html,找不到接着找index.htm.

在这里插入图片描述

part5 【httpServlet】

在web.xml里面配置好了HttpServlet之后,发起一个请求。
然后去找一个service来处理业务,但是HttpServletDemo里面没有service这个方法啊。
儿子没有这个方法,就去找他爹,他爹没有这个方法,就去找他爷,一级一级往上找。
找的时候,会发现,在HttpServlet里面就有一个public void service(ServletRequest req, ServletResponse res)方法,如图四所示,之后强转过后去找protected void service(HttpServletRequest req, HttpServletResponse resp),如图五,这个方法在从request里面获取此次请求的类型,最后调用的就是doGet方法了。

在这里插入图片描述

图四
在这里插入图片描述

图五
在这里插入图片描述

part6 【ServletContext对象】
ServletContext代表一个web应用的环境对象,内部封装的是web应用的信息,一个web应用只有一个ServletContext.并且随着web的加载而创建,关闭而销毁。

一个web项目只有一个ServletContext,但可以多个servlet.

在这里插入图片描述

1.获取web应用全局的初始化参数

getServletContext().getInitParameter(“webName”)

在这里插入图片描述

2.获取web应用中任何资源的绝对路径
getServletContext().getRealPath(keyname);

WebContext下的test1.txt会直接加载在图六结构下
WEB-INF下的test2.txt,会加载在WEB-INF下,如图七所示
src里面的test3.txt,会加载在WEB-INF下的classes文件夹下,如图八

在这里插入图片描述

图六

在这里插入图片描述

图七

在这里插入图片描述

图八
在这里插入图片描述

在这里插入图片描述

3.servletContext是一个域对象。那么是可以往域里面存设置,全局共享的。


config.getServletContext().setAttribute(“time”, new Date());

getServletContext().getAttribute(“time”)

看最后一张图,getServletContext()底层,其实是config.getServletContext();

1.先访问ServletDemo,执行一次init方法。
2.在访问HttpServletDemo,这样就完成演示,获取到域对象里面的值。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Servlet监听器是Servlet的一种功能组件,它可以监听并响应Web应用程序中特定事件的发生。通过监听器,我们可以在特定事件发生时执行一些操作。监听器可以监听Servlet中的多个作用域对象,如ServletContext、HttpSession和ServletRequest。例如,可以使用监听器来监听在线用户数量、初始化上下文或会话等事件。配置监听器需要在web.xml文件中添加相应的配置,指定监听器的类名和监听的事件。例如,在web.xml中可以配置一个监听application的监听器,如下所示:在代码中,我们还可以通过实现HttpSessionListener接口来创建自定义监听器。这样的监听器可以在session创建和销毁时执行特定的操作。例如,在下面的代码中,我们定义了一个实现了HttpSessionListener接口的监听器,当会话创建时,我们将会话计数器加一,并将其存储在ServletContext中;当会话销毁时,我们将会话计数器减一,并更新ServletContext中的计数器值。这样,我们就可以在应用程序中使用Java Servlet监听器来监听并响应特定事件的发生。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【JavaWeb】之Servlet监听器](https://blog.csdn.net/qq_42146402/article/details/127481125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Servlet监听器——实现在线登录人数统计小例子](https://blog.csdn.net/rongxiang111/article/details/53487381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值