java web 开发要素学习

本文详细介绍了JavaWeb中的Servlet、Filter、Listener以及<context-param>的作用和配置方法。涵盖了请求处理流程、过滤器的工作原理、监听器的应用场景以及<context-param>在Web应用中的配置流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

java webServletFilterListener<context-param>

 

参考:

1、JavaWeb三大组件(Servlet、Filter、Listener)

2、一个web项目web.xml的配置中<context-param>配置作用

3、java web 监听器listener

 

Servlet

1、接收请求数据:

我们都知道客户端请求会被封装成HttpServletRequest对象,里面包含了请求头、参数等各种信息。

 

2、处理请求:

通常我们会在service、doPost或者doGet方法进行接收参数,并且调用业务层(service)的方法来处理请求。

 

3、完成响应:

处理完请求后,我们一般会转发(forward)或者重定向(redirect)到某个页面,转发是HttpServletRequest中的方法,重定向是HttpServletResponse中的方法,两者是有很大区别的。


4、创建加载时机

Servlet可以在第一次接收请求时被创建,也可以在在服务器启动时就被创建,这需要在web.xml的< servlet>中添加一条配置信息 < load-on-startup>5< /load-on-startup>,当值为0或者大于0时,表示容器在应用启动时就加载这个servlet,当是一个负数时或者没有指定时,则指示容器在该servlet被请求时才加载。


5、重要方法

5.1 void init(ServletConfig)

servlet的初始化方法,只在创建servlet实例时候调用一次,Servlet是单例的,整个服务器就只创建一个同类型Servlet

 

 5.2 void service(ServletRequest,ServletResponse)

1、servlet的处理请求方法,在servle被请求时,会被马上调用,每处理一次请求,就会被调用一次。ServletRequest类为请求类,ServletResponse类为响应类。

 2、缺省的service功能是调用与 HTTP 请求的方法相应的 do 功能。例如,如果 HTTP 请求方法为 GET,则缺省情况下就调用 doGet() 。Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。

 

 5.3 doGet(ServletRequest,ServletResponse) 

当一个客户通过 HTML 表单发出一个 HTTP GET 请求或直接请求一个 URL 时,doGet() 方法被调用。与 GET 请求相关的参数添加到 URL 的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用 doGet() 方法。

 

 5.4 doPost(ServletRequest,ServletResponse)

当一个客户通过 HTML 表单发出一个 HTTP POST 请求时,doPost() 方法被调用。与 POST 请求相关的参数作为一个单独的 HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用 doPost() 方法。

 

 5.5 void destory()

1、servlet销毁之前执行的方法,只执行一次,用于释放servlet占有的资源,通常Servlet是没什么可要释放的,所以该方法一般都是空的

 2、缺省的 destroy() 方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。例如,如果 Servlet 在运行时会累计统计数据,则可以编写一个 destroy() 方法,该方法用于在未装入 Servlet 时将统计数字保存在文件中。另一个示例是关闭数据库连接。

 3、当服务器卸装 Servlet 时,将在所有 service() 方法调用完成后,或在指定的时间间隔过后调用 destroy() 方法。一个 Servlet 在运行 service() 方法时可能会产生其它的线程,因此请确认在调用 destroy() 方法时,这些线程已终止或完成。

 

 5.6 ServletConfig getServletConfig()

1、获取servlet的配置信息的方法,所谓的配置信息就是WEB-INF目录下的web.xml中的servlet标签里面的信息。

 2、 getServletConfig() 方法返回一个 ServletConfig 对象,该对象用来返回初始化参数和 ServletContext。ServletContext 接口提供有关 servlet 的环境信息。

 

5.7 String getServletInfo()

获取servlet的信息方法,getServletInfo() 方法是一个可选的方法,它提供有关 servlet 的信息,如作者、版本、版权。

 

Filter

1、功能

filter与servlet在很多的方面极其相似,但是也有不同,例如filter和servlet一样都又三个生命周期方法,同时他们在web.xml中的配置文件也是差不多的、但是servlet主要负责处理请求,而filter主要负责拦截请求,和放行。

 

2、url-mapping三种匹配规则:

精确匹配 —— 如/foo.htm,只会匹配foo.htm这个URL。

路径匹配 —— 如/foo/*,会匹配以foo为前缀的URL。

后缀匹配 —— 如*.htm,会匹配所有以.htm为后缀的URL。

 

3、执行filter的顺序

如果有多个过滤器都匹配该请求,顺序决定于web.xml filter-mapping的顺序,在前面的先执行,后面的后执

 

4、四种拦截方式:REQUEST、FORWARD、INCLUDE、ERROR

 

4.1 REQUEST

 直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST

 

 4.2 FORWARD

转发访问执行过滤器。包括RequestDispatcher#forward()方法、< jsp:forward>标签都是转发访问;

 

4.3 INCLUDE

包含访问执行过滤器。包括RequestDispatcher#include()方法、< jsp:include>标签都是包含访问; 

 

4.4 ERROR

当目标资源在web.xml中配置为< error-page>中时,并且真的出现了异常,转发到目标资源时,会执行过滤器。

 

Listener:

1、它可以监听Application、Session、Request对象,当这些对象发生变化就会调用对应的监听方法。

2、常用的WebListener:

2.1 ServletContext

(ServletContextListener:用于监听Web的启动及关闭)

(ServletContextAttributeListener:用于监听ServletContext范围内属性的改变)

典型应用:定时器扫描、系统启动时加载全局属性对象(如全局数据库连接、缓存信息)等和系统全局相关的操作

2.2 HttpSession

(HttpSessionListener:用于监听用户session的开始及结束)

(HttpSessionAttributeListener:用于监听HttpSession范围内的属性改变)

典型应用:统计在线用户数,记录访问日志等和用户相关的操作

2.3 ServletRequest

(ServletRequestListener:用于监听用户请求)

(ServletRequestAttributeListener:用于监听ServletRequest范围属性的改变)

典型应用:读取用户请求参数用于控制流程,记录用户的访问历史记录等。

 

 

context-param:

 

1.  启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param>

 

2. 紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.

 

3. 容器将<context-param></context-param>转化为键值对,并交给ServletContext.这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.

 

4. conetxt-param应该用来配合Servlet、Listener和Filter来使用。

 

web.xml中ServletContext 、context-param、Listener、Filter、Servlet的启动加载顺序

1、基本顺序

ServletContext -> context-param ->  listener -> filter -> servlet

 

2、特殊点-servlet

可以在web.xml的配置中指定<load-on-startup>1</load-on-startup>参数。

当参数为正数时,容器在加载的时候就初始化servlet,数值越小启动优先级越高。

当参数为负数或者不存在时,则第一次被调用时初始化servlet。

 

3、特殊点-filter

filter的初始化顺序和它们出现在web.xml中的前后次序有关,先出现的先初始化,此外,filter-mapping必须出现在filter配置之后。

当一个请求匹配到多个filter-mapping时,filter们会按照filter-mapping配置出现的先后顺序来依次调用doFilter()方法。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值