Servlet

本文介绍Servlet的基本概念,包括其实现方式、配置方法及处理HTTP请求的过程。此外还讲解了Servlet的生命周期及其关键方法init(), service() 和 destroy()的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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实例只调用一次。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值