概述
第3章 Servlet基础
- 3.2 Servlet开发入门
- 3.2.1 Servlet接口及其实现类
- 3.2.2 实现第一个Servlet程序
- 3.2.3 Servlet的生命周期
- 3.3 Servlet应用——HttpServlet类
- 3.4.1 ServletConfig接口
- 3.4.2 ServletContext接口
3.2 Servlet开发入门
Servlet:是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器
Servlet技术技术具有的特点:
- 方便:Servlet提供了大量的实用工具例程,如处理很难完成的HTML表单数据,读取和设置HTTP头,以及处理Cookie和跟踪会话等
- 跨平台:Servlet用Java类编写,可以在不同操作系统平台和不同应用服务器平台下运行
- 灵活性和可扩展性:采用Servlet开发的Web应用程序,由于Java类的继承性及构造函数等特点,使得应用灵活,可随意扩展
3.2.1 Servlet接口及其实现类
针对Servlet技术开发,SUN公司公司提供了一系列接口和类,最重要的接口是javax.servlet.Servlet接口种定义了5个抽象类:
方法说明 | 功能描述 |
---|---|
void init(ServletConfig config) | 容器在创建好Servlet对象后,就会调用此方法。该方法接收一个ServletConfig类型的参数,Servlet容器通过这个参数向Servlet传递初始化配置信息 |
ServletConfig getServletConfig() | 用于获取Servlet对象配置信息,返回Servletd的ServletConfig对象 |
Steing getServletlnfo() | 返回一个字符串,其中包括关于Servlet的信息 |
void service(ServletRequest request,ServletResponse response) | 负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。容器会构造一个表示客户端请求信息的ServletRequest对象和一个用于响应客户端的ServletResponse对象作为参数传递给Servlet()方法。在servlet()方法中,可以通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象方法设置响应信息 |
void destroy() | 负责释放Sevlet对象占用的资源。当服务器关闭或者Servlet对象被移除时,Servlet对象会被销毁,容器会调用此方法 |
针对Servlet的接口,SUN公司提供了两个默认的接口实现类:GenerricServlet和HttpServlet。GenerricServlet是一个抽象类,该类为Servlet接口提供了部分实现,它并没有实现HTTP请求处理。HttpServlet是GenerricServlet子类,它继承了GenerricServlet的所有的方法,并且为HTTP请求中的POST,GET等类型提供了具体的操作方法
通常情况下,编写的Servlet类都继承自HttpServlet,在开发种使用的具体的Servlet对象就是HttpServlet对象。HttpServlet的常用方法如下:
方法说明 | 功能描述 |
---|---|
protected void doGet(HttpServletRequest req,HttpServletResponse resp) | 用于处理GET类型的HTTP请求方法 |
protected void doPost(HttpServletRequest req,HttpServletResponse resp) | 用于处理POST类型的HTTP请求方法 |
protected void doPut(HttpServletRequest req,HttpServletResponse resp) | 用于处理PUT类型的HTTP请求方法 |
3.2.2 实现第一个Servlet程序
javac与java的区别:
1)javac 作用是将.java文件编译成.class文件
2)java 作用是执行一个jar程序
JAR文件:Java的一种文档格式,由class文件打包而成
.class和.java的区别:java文件是源程序,class文件是编译后的代码
java文件就是这样一个未经编译的源程序,一般是给程序员看的
class文件就是被编译器编译过的java文件,通常是给计算机看的
Servlet容器与Servlet区别:
是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容
Servlet容器也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于 MIME的请求,格式化基于MIME的响应。Servlet没有main方法,不能独立运行,它必须被部署到Servlet容器中,由容器来实例化和调用 Servlet的方法(如doGet()和doPost()),Servlet容器在Servlet的生命周期内包容和管理Servlet。在JSP技术 推出后,管理和运行Servlet/JSP的容器也称为Web容器
Servlet容器分类:
根据Servlet容器工作模式的不同,可以将Servlet容器分为以下三类:
1)独立的Servlet容器
当我们使用基于Java技术的Web服务器时,Servlet容器作为构成Web服务器的一部分而存在。然而大多数的Web服务器并非基于Java,因此,就有了下面两种Servlet容器的工作模式
2)进程内的Servlet容器
Servlet容器由Web服务器插件和Java容器两部分的实现组成。Web服务器插件在某个Web服务器内部地址空间中打开一个 JVM(Java虚拟机),使得Java容器可以在此JVM中加载并运行Servlet。如有客户端调用Servlet的请求到来,插件取得对此请求的控 制并将它传递(使用JNI技术)给Java容器,然后由Java容器将此请求交由Servlet进行处理。进程内的Servlet容器对于单进程、多线程 的服务器非常适合,提供了较高的运行速度,但伸缩性有所不足
3)进程外的Servlet容器
Servlet容器运行于Web服务器之外的地址空间,它也是由Web服务器插件和Java容器两部分的实现组成的。Web服务器插件和Java容 器(在外部JVM中运行)使用IPC机制(通常是TCP/IP)进行通信。当一个调用Servlet的请求到达时,插件取得对此请求的控制并将其传递(使 用IPC机制)给Java容器。进程外Servlet容器对客户请求的响应速度不如进程内的Servlet容器,但进程外容器具有更好的伸缩性和稳定性。
3.2.3 Servlet的生命周期
Servlet的生命周期分为3个阶段:分别是初始化阶段,运行阶段,销毁阶段
1.初始化阶段(init()方法):当客户端向Servlet容器发出HTTP请求要求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否已经有了该Servlet对象,如果有直接使用该Servlet对象,如果没有就创建Servlet实例对象,然后通过调用init()方法实现Servlet的初始化工作。注意:在Servlet的整个生命周期内,它的init()方法只被调用一次
2.运行阶段(servlet()方法):这是Servlet生命周期中最重要的阶段,在这个阶段,Servlet容器会为这个个请求创建代表HTTP请求的ServletRequest对象和代表响应的ServletRequest对象,然后将它们作为参数传递Servlet的servlet()方法。servlet()方法从ServletRequest对象中获得客户请求信息并处理该请求,通过ServletResponse对象生成响应结果。在Servlet的整个生命周期内,对于Servlet的每次访问请求,Servlet容器都会调用一次Servlet的servlet()方法,并且创建新的ServletRequest和ServletResponse对象,也就是说,servlet()方法在Servlet的整个生命周期中会被调用多次
3.销毁阶段(destroy()方法):当服务器关闭或Web应用被移除容器时,Servlet随着Web应用的销毁而销毁。在销毁Servlet之前,Servlet容器会调用Servlet的destroy()方法,以便让Servlet对象释放它所占用的资源。在Servlet的整个生命周期中,destroy()方法也只是被调用一次。注意:Servlet对象一旦创建就会驻留在内存中等待客户端访问,直到服务器关闭,或Web应用被移除出容器时,Servlet对象才会被销毁
3.3 Servlet应用——HttpServlet类
HttpServlet类:专门用于创建应用于HTTP协议的Servlet
HttpServlet主要的两大功能:
1)根据用户请求方式不同,定义相应的doXxx()方法处理用户请求。例如,与GET请求方式对应的doGet()方法,与POST方式对应的doPost()方法
2)通过service()方法将HTTP请求和响应分别强转为HttpServletRequest和HttpServletResponse类型的对象
1.Servlet的多重映射:指的是同一个Servlet可以被映射称多个虚拟路径。也就是说,客户端可以通过多个路径实现对同一个Servlet的访问。Servlet多重映射的实现方式有两种:
1)配置多个<servlet-mapping>
元素
2)在一个<servlet-mapping>
元素下配置多个<url-pattern>
2.Servlet映射路径中使用通配符:在实际开发过程中,开发者有时候会希望某个项目下的所有路径都可以访问同一个Servlet,这时,可以在Servlet映射的路径中使用的通配符“*”。通配符的格式有两种:
1)格式为"*.扩展名"
,例如"*.do"
匹配以".do"
结尾的所有URL地址
2)格式为"/*"
,例如"/abc/*"
匹配以“/abc”开始的所有URL地址
3.缺省Servlet:如果某个Servlet的映射路径仅仅是一个正斜线(/),那么这个Servlet就是当前eb应用的缺省Servlet。缺省Servlet用于处理其他Servlet都不处理的访问请求
3.4.1 ServletConfig接口
在Servlet运行期间,经常需要一些辅助信息,例如,文件使用的编码,使用Servlet程序的共享等,这些信息可以在web.xml文件中使用一个或多个<init-param>
元素进行配置。当Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig config)方法将ServletConfig对象传递给Servlet。ServletConfig定义了一系列获取配置信息的方法,以下是ServletConfig接口的常用方法:
方法说明 | 功能描述 |
---|---|
String getlnitParameter(String name) | 根据初始化参数名返回对应的初始化参数值 |
Enumeration getlnitParameterNames() | 返回一个Enumeration对象,其中包含了所有的初始化参数名 |
ServletContext getServletContext() | 返回一个代表当前Web应用的ServletContext对象 |
Steing getServletName() | 返回Servlet的名字,即web.xml中<servlet-name> 元素值 |
3.4.2 ServletContext接口
当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用,该对象不仅封装了当前Web应用的所有信息,而且还实现了多个Servlet之间的数据的共享
1.获取Web应用程序的初始化参数
2.实现多个Servlet对象共享数据
由于一个Web应用中的所有Servle共享同一个ServleContext对象,因此,ServleContext对象的域属性可以被该Web应用中Servle访问。在ServleContext接口中定义了分别用于增加,删除,设置ServleContext域属性的四个方法:
方法说明 | 功能描述 |
---|---|
Enumeration getAttributeNames() | 返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的所有域属性名 |
Object getAttibute(String name) | 根据参数指定的属性名返回一个与之匹配的域属性值 |
void removeAttribute(String name) | 根据参数指定的域属性名,从ServleContext中删除匹配的域属性 |
void setAttribute(String name,Object obj) | 设置ServleContext的域属性,其中name是域属性名,obj是域属性值 |
3.读取Web应用下的资源文件
最后
以上就是安详秋天为你收集整理的Java Web之第3章Servlet基础 3.2 Servlet开发入门3.3 Servlet应用——HttpServlet类的全部内容,希望文章能够帮你解决Java Web之第3章Servlet基础 3.2 Servlet开发入门3.3 Servlet应用——HttpServlet类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复