servlet 相关内容

Servlet和Servlet容器:

 

我们通过浏览器访问一个网页的过程,实际上是浏览器通过HTTP协议和WEB服务器进行

交互的过程。也就是说,用户要访问网络资源,首先需要在网络上架设Web服务器来为

用户提供 内容服务,所有的内容都存在与服务器端,客户端发出请求,服务器端对对

请求作出响应,将用户请求的资源发送到客户端。

 

开发WEB应用程序一般是利用已经实现了HTTP协议的服务器端软件,这些软件为我们提

供了扩展的接口,我们只需要按照一定的规则去提供相应的扩展功能。当这类Web服务

器接受到客户请求后,判断请求是否访问我们提供的扩展功能,如果是,就将请求交由

我们所编写的程序去处理。当处理完成后,程序将处理结果交给Web服务器软件,web服

务器再将结果作为相应信息返回给客户端。

 

在Java中,给我们提供了编写扩展功能的技术——Servlet。Java Servlet(Java服务

器小程序)是一个基于Java技术的Web组件,运行在服务器端,由Servlet容器所管理,

用于生成动态的内容。Servlet是平台独立的Java类,编写一个Servlet,实际上就是按

照Servlet规范写一个Java类。Servlet被编译为平台中立的字节码,可以被动态加载到

支持Java技术的Web服务器中运行。

 

Servlet容器有时也叫Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在

发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。

Servlet容器在Servlet的生命周内包容和管理Servlet。

Servlet容器根据工作模式的不同,分三类:

1、独立的Servlet容器;

2、进程内的Servlet容器;

3、进程外的Servlet容器。


注:

Catalina :Tomcat 源于 Apache Jakarta 的开放源代码项目。Tomcat 是一种 Web 容

器,其中包括 servlet 和 JSP 容器(引擎)。从Tomcat4.0x中采用了新的Servlet容

器catalina。


Servlet接口:

接口提供了5个方法:

 

1、public void init(ServletConfig config)throws ServletException
   init():在Servlet实例化之后,Servlet容器会调用init()方法,来初始化该对象,

主要是为了让Servlet对象在处理客户请求前完成一些初始化工作,例如:建立数据库

的连接,获取配置信息等。对于每个Servlet实例,init()方法只能被调用一次。

servlet容器通过参数config向Servlet传递配置信息。Servlet使用ServletConfig对象

从Web应用程序的配置信息中获取以名-值对形式提供的初始化参数。另外,在Serlet

中,还可以通过ServletConfig对象获取描述Servlet运行环境的ServletContext对象,

使用该对象,Servlet可以和它的容器进行通信。

 

2、public vlid service(ServletRequest req,ServletResponse res)throws

ServletExcepton,java.io.IOException
   service():容器调用service()方法来处理客户端的请求。要注意的是,在service

()方法被容器调用之前,必须确保init()方法正确完成。容器会构造一个表示客户端请

求信息的请求对象(类型为ServletRequest)和一个用于响应的响应对象

(ServletReponse)作为参数传递给service()。

 

3、public void destory()
   当容器检测到一个Servlet对象应该从服务中被移出的时候,容器会调用该对象的

destory()方法,以便让Servlet对象可以释放所使用的资源,以保存到持久存储设备中

。例如:将内容中的数据保存到数据中,关闭数据库连接等。  


4、public ServletConfig getServletConfig()
   getServletConfig():该方法返回容器调用init()方法时传递给Servlet对象的

ServletConfig对象,ServletConfig对象包含了Servlet的初始化参数。

 

5、public java.lang.String.getServletInfo()
   getServletInfo():返回一个String类型的字符串,其中包括了关于Servlet的信息

,例如作者、版本和版权。

 

GenericServleta:

 

如果我们直接通过实现Servlet接口来编写一个Servlet类,就需要实现Servlet接口中定义的5中方法,为了简化Servlet的编写,在javax.servlet包中,给我们提供了一个抽象的类GenericServlet,它提供了除service()方法外的其他4种方法的简单实现。GenericServlet类定义了一个通用的、不依赖于具体协议的Servlet,它实现了Servlet接口和ServletConfig接口。

如果我们要编写一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service()。

 

GenericServlet类中,提供了两种重载的init()方法:


·public void init(ServletConfig config)throws ServletException


·public void init()throws ServletException


第一种init()方法是Servlet接口中init()方法的实现。这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。


通常我们在编写集成自GenericServlet的Servlet类时,只需重写第一种不带参数的init()方法就可以了。如果覆盖了第一种init()方法,那么应该在子类的该方法中,包含一句super.init(config)代码调用。

 


HttpServlet:

在应用中都是浏览器通过HTTP协议去访问服务器端的资源,而我们所编写的Servlet也主要应用于HTTP协议的请求和响应。Sun公司在javax.servlet.http包中给我们提供了一个抽象的类HttpServlet,它继承自GenericServlet类,用于创建适合Web站点的HTTPServlet。

 

HttpServlet提供了两种重载service()方法:
·public void service(ServletRequest req,ServletResponse res)throws ServletExcepton,java.io.IOException


·public void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException

 

第一种service()方法是GenericeServlet类中的service()方法的实现。在这种方法中,首先将req和res对象转换为HttpServletRequest(继承自ServletRequest接口)和HttpServletResponse(继承自ServletResponse接口)类型,然后调用第二种service()方法,对客户请求进行处理。

 

针对HTTP1.1中定义的7种请求方法Get、Post、Head、Put、Delete、Trace和Options、HttpServlet分别提供了7种处理方法。


HttpServlet虽然是抽象类,但在这个类中没有抽象的方法,其中所有的方法都是已经实现的。只是在这个类中对客户请求进行处理的方法,没有真正的实现,当然也不可能真正的实现。

 

 

Servlet定义两个异常类:ServletException和UnavailableException。

ServletException类定义了一个一般的异常,可以被init()、service()、doXXX()方法抛出,这个类提供了下面4种构造方法和1种实例方法。


·public ServletException()
  构造一个新的servlet异常


·public ServletException(java.lang.String.message)
  message可以被写入服务器的日志中,或者显示给用户。


·public ServletException(java.lang.String.message,java.lang.Throwable rootCause)
  在Servlet执行时,如果有一个异常阻碍了servlet的正常操作,那么这个异常就是根原因(rootcause)异常。

 

·public ServletException(java.lang.Throwable rootCause)


·public java.lang.Throwable getRootCause()
  该方法返回引起这个servlet异常的异常,也就是返回根原因的异常。

 

 

UnavailableException类:

UnavailableException类是ServletException类的子类,该异常被Servlet抛出,用于向Servlet容器指示这个Servlet永久的或者暂时的不可用。提供了下面2中构造方法和3种实例方法。


·public UnavailableException(java.lang.String msg)
  该方法用一个给定的消息构造一个新的异常,指示Servlet永久不可用。


·public UnavailableException(java.lang.String msg,int seconds)
  暂时不可用,secondes内不可以用。


·public int getUnavailableSecondes()
  该方法返回Servlet预期的暂时不可用的秒数。负数表明永久不可以用或估计不出。


·public boolean isPermanent()
  该方法返回一个布尔值,返回true,表明是否永久不可以用。false表示可用或暂时不可用。

 

 

 

 

未完待续!

 

servlet 例子见附件。可直接导入到eclipse.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值