Servlet

来源:互联网 发布:金融互助网站源码 编辑:程序博客网 时间:2024/05/18 18:00

Servlet运用javax.servlet和javax.servlet.http两个包里面的接口和类。每个Servlet必须实现javax.servlet.Servlet接口,大多数servlet通过继承两个特殊的类javax.servlet.GenericServlet和javax.servlet.http.HttpServlet来实现这个接口。与协议独立的就继承javax.servlet.GenericServlet类,Http servlet就

继承javax.servlet.http.HttpServlet类。

Servlet没有main()函数。Servlet里面的方法是通过服务器处理请求来唤醒的。每次,当服务器转发请求给一个servlet,相应的这个servlet的service()方法被唤醒。

一般的Servlet需要重写它的service()方法来处理适当的请求。service()方法接收两个参数,一个请求对象和一个响应对象。请求对象告诉servlet关于请求的消息,而响应

对象用来返回一个响应。


一般的servlet处理请求的过程

相比之下,Http Servlet通常不重写service()方法。而是重写doGet()方法来处理Get请求,doPost()方法来处理Post请求。一个Http Servlet可以复写这两个方法中的一个或者两个。Http Servlet中的service()方法负责建立和分配do***()方法,所以通常不用重写。



 Http servlet处理请求的过程

Web application中的Servlet的注册(部署)

在Web项目中的WEB-INF/web.xml文件中进行配置,基本的格式为:

<?xmlversion="1.0" encoding="ISO-8859-1"?>

<!DOCTYPEweb-app

    PUBLIC "-//Sun Microsystems, Inc.//DTDWeb Application 2.2//EN"

    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>

    <servlet>

        <servlet-name>

            hi

        </servlet-name>

        <servlet-class>

            HelloWorld

        </servlet-class>

    </servlet>

</web-app>

其中<web-app>与</web-app>之间的内容是关于服务器的信息,<servlet></servlet>之间来对servlet进行配置。<servlet-name></servlet-name>是对servlet进行注册,

具体的实现类是在 <servlet-class> </servlet-class>之间的类。

通过URL: http://server:8080/servlet/hi就可访问这个已注册的Servlet了。

为servlet增加servlet-mapping

<?xml version="1.0"encoding="ISO-8859-1"?>

 

<!DOCTYPE web-app

    PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

   "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

 

<web-app>

   <servlet>

       <servlet-name>

           hi

       </servlet-name>

       <servlet-class>

           HelloWorld

        </servlet-class>

   </servlet>

   <servlet-mapping>

       <servlet-name>

           hi

       </servlet-name>

       <url-pattern>

           /hello.html

       </url-pattern>

   </servlet-mapping>

</web-app>

 <servlet-mapping></servlet-mapping>里面的内容告诉服务器,名称为hi的这个servlet只处理/hello.html这个特定的URL。


Servlet的生命周期



多个线程同时访问一个Servlet实例

当多个线程同时访问一个Servlet实例对Servlet里面的变量进行操作时,为了解决可能存在的不同步的问题,必须加锁。

Servlet定义了init()和destroy()方法。Servlet声明周期分为init()、service()、destroy.
init()-init()是在Servlet处理第一个请求之前对Servlet进行初始化-创建或者加载Servlet处理请求所需要的对象。包括web.xml中给出的Servlet中的变量的初始值。它是在服务器创建了Servlet之后,Servlet处理第一个请求之前被调用。
service()-Servlet调用service()方法处理请求,返回响应。
destroy()-Servlet调用destroy()方法是在Servlet的service处理了所有的请求或者超时后调用的。且每个Servlet实例只调用一次。





原创粉丝点击