java web(Servlet、Filter、Listener、<context-param>)
参考:
1、JavaWeb三大组件(Servlet、Filter、Listener)
2、一个web项目web.xml的配置中<context-param>配置作用
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()方法。
相关推荐
JSP 服装穿搭推荐系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql...
本书综合介绍了使用J2SE(Java 2 Standard Edition)5.0或更高版本开发动态程序的过程,阐述了Java语言的各个方面,包括Java语言结构和工作原理的基本知识,用大量的实例讲述如何开发功能齐全的Java应用程序,以期...
Web开发 - 后台开发 面试笔记 面试答题四大要素和模版,亲历4+1+1六场面试所得 是什么 原理 细节 应用 3月进展 3.16开始,沉心复习,从Java基础看起 《Java面试宝典 第四版》 有很多很有趣的知识点,但是以面试题为...
概述了Web Service的特点和核心要素, 依据Delphi和Java对Web Service 的支持,给出了基于Java ,Delphi开发Web Service的流程, 并用一个Delphi调用Java开发Web Service应用程序来说明跨平台Web Service应用程序的步骤...
本项目描述了旅游信息交流系统的开发过程。网站前台实现了旅游新闻和旅游资讯,优惠信息的查看,留言板模块为游客和旅行社、游客和游客之间提供了一个信息交流的平台。网站后台提供部分系统维护功能,主要是旅行社...
2.1 Java语言要素······························ (11) 2.1.1 标识符······························· (11) 2.1.2 关键字·············...
<br>目录 第一部分 软件、对象、数据设计与建模 第1章 软件开发的方法与过程 为什么我们需要方法与过程 什么是软件方法与过程 方法的内容 过程模型 源代码管理的要素 软件缺陷与修改的...
Web应用程序最终项目:第1部分作者:以赛亚·海利(Isaiah Haley)和伊桑·沃尔顿(Ethan Walton) 该项目的目的是演示从Web应用程序开发课程中学到的所有知识,并能够将学习的所有要素应用到我们的最终项目中,在该...
Web设计进程 <br>2.1 进程需求 <br>2.2 特别的Web进程 <br>2.3 基本的Web进程模型 <br>2.3.1 修正瀑布模型 <br>2.3.2 联合应用开发模型 <br>2.4 Web站点项目的途径 <br>2.5 目标和问题 ...
目前国内主流的软件开发基于两种模式:客户机/服务器(Client/Server,简称C/S)模式和Web浏览器/服务器(Browser/Server,简称B/S)模式。虽然出于安全性等方面的因素,C/S结构的管理信息系统仍然占据企业管理信息...
包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...
包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...
这门课程的前导课程是《C语言》、《XX页制作》和《计算机XX络》,所以它一般放在第三或第四个学期开设,后续课程是面向服务器编程《JSP》、面向Web通信的《J2EE》、面向移动通信《J2ME》。 3.《Jv程序设计》的课程...
Docker堆栈允许开发团队利用Dockerized服务(数据库,邮件服务器,任务运行器,消息队列等)将用PHP,NodeJS,Java和Python的任意组合编写的Web应用程序编织在一起。对于开发商作为开发人员团队的成员,基于Docker...
Web设计进程 <br>2.1 进程需求 <br>2.2 特别的Web进程 <br>2.3 基本的Web进程模型 <br>2.3.1 修正瀑布模型 <br>2.3.2 联合应用开发模型 <br>2.4 Web站点项目的途径 <br>2.5 目标和问题 ...