Java Web之第3章Servlet基础

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应用下的资源文件

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值