2023年11月28日发(作者:)

Servlet的概念、配置与运行

Java Servlet的概念

Java Servlet是一个专门用于编写网络服务器应用程序的Java组件。所有基于Java的服

务器端编程都是构建在Servlet之上的。

J2EEServlet已经是一个标准的组件。了解ServletJava的软件包中是怎样的一

个结构,这会有助于我们理解Servlet的概念。

J2EE中跟Servlet相关的一个包是t其中最基本的Servlet被声明为一个

接口t: Interface ServletServlet最高层次的一个抽象它是和网络协议无关

的。同样在t中,实现了一个 t: class GenericServlet这个类实现了

Servlet接口,也是和协议无关的。而这个类是构建其他和协议相关的Servlet子类型的通用

的父类(至少HttpServlet是从它继承而来的,从它的名字也能看出这一点)

也就是说Servlet所适用的网络协议可以是多种多样的,比如HTTPFTPSMTP

TELNET等,但是就目前而言,只有HTTP服务已经形成了标准的Java组件。对应的软件

包有两个分别对应我们要讲解的ServletJSP编程。

说的Servlet就是HTTPServlet用到

包中的类(典型的就是HttpServlet类),实际上Java Servlet编程的概念要

更广一些,在这里我们也就约定俗成的使用Servlet来指代HTTP Servlet的编程,这点你是

需要了解的。由于JSP最终都是要经过JSP引擎转换成Servlet代码的,而且Servlet编程和

一般的Java编程是没有大的区别的,只需要了解一定的规范即可,所以我们在这里先讲解

Servlet的编程,这样对以后理解JSP是很大的有好处的,尽管在使用的时候可能JSP更为

简单一些。

目前,Servlet引擎一般是第三方的插件,它通过一定的方法连接到Web服务器,Servlet

引擎把它识别为Servlet请求的那些HTTP请求截获下来处理,而其他的HTTP请求由Web

服务器按照通常的方式来处理,Servlet引擎会装载合适的Servlet到内存中,如果Servlet

没有运行的话,会分配一个可以使用的线程来处理请求,再把Servlet的输出返回到发出请

求的Web客户机。

Java ServletJava Applet正好是相对应的两种程序类型,Applet运行在客户端,在浏

览器内执行,而Servlet在服务器内部运行,通过客户端提交的请求启动运行,你在学习过

程可以作简单的比较。

使用过CGI的话一定知道CGI程序的作用,Servlet要实现的功能和CGI是一样的,只

是实现的时候更为方便,效率更高。

Servlet的优点和应用范围

由于Servlet是用Java编写的,所以它与生俱来就有跨平台的特性,因此Servlet程序的设计

完全和平台是无关的,同样的Servlet完全可以在ApacheIIS等不同Web服务器上执行,

不管底层的操作系统是WindowsSolarisMacLinux还是其他的能支持Java的操作系统。

Servlet是跟普通的Java程序一样,是被编译成字节码后由JVM执行的。相比传统的

CGI尽管CGI是用本地代码直接执行的,但是由于每次客户端发出请求,服务器必须启动

一个新的程序来处理请求,这就把高负载强加给了服务器资源,尤其如果CGI使用脚本语

言编写时,如perl,服务器还必须启动语言解释程序,程序越多,占用的内存就越多,消耗

CPU也越多,严重影响系统性能。

Servlet运行于Servlet引擎管理的Java虚拟机中,被来自客户机的请求所唤醒,与CGI

不同的是,在虚拟机中只要装载一个Servlet就能够处理新的请求,每个新请求使用内存中

那个Servlet的相同副本,所以效率比CGI来得高。如果采用服务器端脚本,ASPPHP

语言解释程序是内置程序,因此可以加快服务器的运行,但是效率还是比不上准编译的

Servlet实际的使用也已经证明,Servlet是效率很高的服务器端程序,很适合用来开发Web

服务器应用程序。

Java Servlet有着十分广泛的应用。不光能简单的处理客户端的请求,借助Java的强大

的功能,使用Servlet还可以实现大量的服务器端的管理维护功能,以及各种特殊的任务,

比如,并发处理多个请求,转送请求,代理等。

Servlet的运行环境

为了运行Servlet首先当然需要一个JVM来提供对Java的基本支持,一般需要安装JREJava

Runtime Environment)或JDKJava Develop KitJRE是其一个子集)

其次我们需要Servlet API的支持,一般的Servlet引擎都自带Servlet API,只要我们安

Servlet引擎,或直接支持ServletWeb服务器之后便会自动安装上Servlet相关的程序

包。

典型的Servlet运行环境有JSWDKTomcatResin等,这几个都是免费的软件,适合

用来学习ServletJSP它们都自带一个简单的HTTP Server只需简单配置即可投入使用,

你也可以把它们绑定到常用的Web服务器上,ApacheIIS等,提供小规模的Web服务。

还有一些商业的大中型的支持ServletJSPWeb服务器,JRunWeb SphereWeb Logic

等等,配置比较复杂,但是功能较为强大,有条件的可以一试。后面会讲解如何配置一简单

的支持ServletJSPWeb服务器。

ServletCGI环境变量

在使用CGI时,最重要的内容是CGI接口的环境变量。CGI规范列出了19个环境变量。

管其他的环境变量,HTTP_COOKIE(用于查询站点信息的)不是该规范的组成部分,

也是经常使用。

由于Java运行于JVM不直接在服务器上运行,所以不能直接访问环境变量。由于CGI

环境变量是Web服务器建立的,而且用户能够用其他的方法查询变量值,所以Java不访问

环境变量没有什么大问题。Java Servlet API定义几种查询在CGI环境变量中发现大多数信

息的方法。

有些信息是HTTP标题的组成部分,而且采用HttpServletRequest类中的getHeader()

法能够很容易的获取。采用特殊的方法可以查询其他的信息。Java唯一不可用的CGI环境

变量是GATEWAY_INTERFACE。当在CGI程序中使用时,该变量包含CGI版本。在Java

Servlet中这种变量信息是无关紧要的。

以上的内容是针对有CGI编程经验的你的,通过对比能帮助更快的理解Servlet

Servlet的安全性

Java Servlet能够使用包括SSL在内的安全协议。ServletJava内在的安全措施紧密相连,

如不能直接访问内存等。采用安全管理器,用户能够限定对其他资源的访问,如文件、目录

和局域网。Java Servlet支持代码符号,从而能够更好的控制委托每个Servlet要执行的程序。

Java的安全机制本身是比较复杂的,在这里我们只能作简单讲解,具体的分析参看有关

Java安全性的技术资料。

Servlet的管理

对于大多数用户来说,ServletCGI程序和服务器脚本更容易管理。Servlet是以Java类的

形式编译的。Java采用能够保存在Java Archive.JAR)文件中的编制目录树内的组件,提

供一种管理类的方法,如Sun公司的Java Web服务器的Servlet管理平台。有些服务器和第

三方产品为管理Servlet提供图形用户界面。

具体的Servlet的管理是比较复杂的一件事情,尤其是对于一个大系统而言。对于初学

者只要能掌握基本的配置一个Servlet,使其能正常运行的技能就可以了。更高级的技巧要

在更多的实践中才能真正掌握。

Servlet的编译

Servlet的编译和一般的Java程序是完全一样的,在使用javac编译的时候不需要任何特殊的

参数。只要Servlet的编写是正确的,编译完后生成的Class文件就可以做为Servlet来运行

了。

Servlet Runner运行Servlet

在真正开始编写Servlet之前,我们先介绍一个简单的Servlet引擎--Resin。目前支持ServletWeb

务器不下数十种,Resin是一个简单易用的Servlet运行器(Servlet Runner,很适合初学者。由于各个厂家

Servlet引擎各不相同,配置方法也是千差万别,在这里不可能一概而论,但是Servlet的编写方法却是

一样的,所以你不必太在意服务器的配置方法,只要知道如何让自己的Servlet正常运行就可以了,把更多

的注意力放在Servlet的编写上。

Resin自带一个Servlet RunnerHTTP Server,因此要构建一个简单的Web环境,光有Resin已经足够

了,不需要额外的支持软件。Resin不需要安装,解压之后即可使用。

Resin目录下有几个子目录,bin目录存放的是可执行文件,要启动HTTP ServerServlet Runner

只需要分别点击其中的即可,启动后会出现四个窗口,分别对应HTTP Server的标

准输出,/停控制和Servlet Runner的标准输出,/停控制。conf目录下存放的是Resin Servlet Runner

的配置文件,这是配置整个Web环境的关键,包括Servlet的配置和后面要用到的JSP的配置。doc目录

是默认的发布目录,即Resin自带的HTTP Server是以这个目录为根目录的。

下面我们以一个最简单的HelloWorld的例子,来讲解如何配置Resin,使其能运行Servlet程序,同

时也做为Servlet编写的入门。程序如下:

//

import .*;

import .*;

import .*;

import t.*;

//导入必要的包

public class HelloServlet extends HttpServlet {

//所有Servlet必须从HttpServlet派生

public void doGet (HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException

//doGet()是这个Servlet的核心,真正处理请求的地方

{

tentType("text/html");

//设置相应的类型为text/html

PrintWriter pw = ter();

//HttpServletResponse得到输出流

n("");

n("");

n("");

n("");

n("Hello, world!");

n("");

n("");

n("

Hello, world!

");

n("");

//上面的语句都是向客户端打印HTML文本

();

//关闭HttpServletResponse,使Web服务器知道相应结束

}

public HelloServlet() {} //构造函数,可以不要

}

这是最简单的一个Servlet程序,整个类从HttpServlet派生,就跟Applet一样,这个派生关系是必

须的。这个Servlet必须实现doGet()方法(因为它是作为静态页面通过地址访问的,这种方式在HTTP

称为GET请求,在后面还会有更具体的讲解),这是这个Servlet真正处理请求的地方,是整个Servlet

的主体,就跟线程体的run()方法一样。doGet()有两个参数HttpServletRequest req

HttpServletResponse resHttpServletRequest包含了客户请求的各种信息,HttpServletResponse则包

装了服务器响应,主要处理对客户机的输出。这个程序是很简单的,如果对网络编程和HTML有一些概念的

话,很容易就应该能理解。

通过javac对以上程序进行编译,我们可以得到,下面我们就通过配置Resin

运行这个Servlet。前面说过如果你没有修改过Resin的配置文件的话,docResin默认的发布目录。发

布目录下的WEB_INF/classesResin默认的Classpath你只要把自己的Servlet拷贝到该目录下,Resin

就能识别,当然只要拷贝的有效的系统的或用户的Classpath下,Resin都是能够找到的。我们把

拷贝到WEB_INF/classes目录下。接下来就需要修改conf目录下的文件,

来配置我们的Servlet。你可以使用任何一种自己所熟悉的文本编辑器来打开该配置文件。找到

id='/'>,在它和 之间任何地方添加以下的配置语句(可以参考已有的语句)

servlet-class='HelloServlet' >

这样当客户端产生/Hello请求的时候,Resin就能把这个请求定向到HelloServlet上,Servlet

能正常运行了,我们也可以采用以下的配置语句

这种情况下,没有对Servlet的名字进行映射,系统会默认的使用servlet-name作为servlet-class

进行类的查找,所以servlet-name必须填写正确的类名,而不能是随意的名字。关于Resin更多的配置信

息,有兴趣的你可以参考Resin的帮助文档,这里就不再赘述了。

下面我们启动Http ServerServlet Runner(通过双击bin下的)。这样我

们就可以通过浏览器访问这个Servlet了。打开浏览器,比如IE,在地址栏键入

localhost:8080/Hello,我们可以打开如下的一个网页:

通过查看源码,我们可以得到如下的结果

Hello, world!

Hello, world!

很显然这些文本正是我们在Servlet中向客户端所打印的信息,Http头部content=text/html也是

我们在程序中所设置的。

通过这样一个简单的HelloWorld的程序,你对Servlet的工作原理的基本配置方法应该有了一个大概

的了解。

Servlet的应用实例

Servlet在编写Web应用方面的具体应用。

Servlet与表单交互的方法

表单是HTML中使用最广泛的传递信息的手段。搞清楚Servlet与表单的交互,就在客户端与服务器之间架

起了一座桥梁。Servlet使用HttpServlet类中的方法与表单进行交互。在HttpServlet类中有几个未完

全实现的方法,你可以自己定义方法的内容,但是必须正确使用方法名称以使HTTP Server把客户请求正

确的映射到相应的函数上。

doHeader 用于处理HEADER请求

doGet 用于处理GET请求,也可以自动的支持HEADER请求

doPost 用于处理POST请求

doPut 用于处理PUT请求

doDelete 用于处理DELETE请求

HttpServletService方法,当它接收到一个OPTIONS请求时,它会自动调用doOptions方法,当

接收到一个TRACE请求时调用doTraceDoOptions默认执行方式是自动决定什么样的HTTP被选择并返回

哪个信息。

在使用这些方法时必须带两个参数。第一个包含来自客户端的数据HttpServletRequest。第二个参数

包含客户端的相应HttpServletResponse。在我们的第一个例子中使用的是doGet方法,因为通过地址访

问的话,对应的方式是GET

一个HttpServletRequest对象提供请求HTTP头部数据,也允许获取客户端的数据。怎样获取这些数

据取决于HTTP请求方法。

不管何种HTTP方式,都可以用getParameterValues方法返回特定名称的参数值。

对于HTTP GET请求的方式,getQueryString方法将会返回一个可以用来解剖分析的参数值。

对于用HTTP POSTPUTDELETE请求的方式,HttpServletRequest有两种方法可以选择:如果是文

本数据,你能通过getReader的方法得到BufferedReader获取数据;如果是二进制数据,可以通过

getInputStream方法得到ServletInputStream获取数据。

为了相应客户端,一个HttpServletResponse对象提供返回数据给用户的两个方法:一种是用

getWriter方法得到一个PrintWriter,用于返回文本数据;另一种方法是用getOutputStream方法得到

ServletOutputStream,用于返回二进制数据。在使用WriterOutputStream之前应先设置头部

HttpServletResponse中有相应的方法),然后用WriterOutputStream将相应的主体部分发给用户。

完成后要关闭WriterOutputStream以便让服务器知道相应已经结束。

下面我们举一个使用HttpServletRequestHttpServletResponse得到并打印客户端信息的例子:

//

import .*;

import t.*;

import .*;

public class RequestInfo extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException

//处理GET请求的方法

{

tentType("text/html");

//先设置Header,在这里只设置ContentType一项

PrintWriter out = ter();

//得到文本输出Writer

//下面打印相关的HTML

n("");

n("");

n("Request Information Example");

n("");

n("");

n("

Request Information Example

");

n("Request URI: " + uestURI()+"
");

//打印请求的路径

n("Protocol: " + tocol()+"
");

//打印协议名称

n("PathInfo: " + hInfo()+"
");

//打印额外的路径信息

n("Remote Address: " + oteAddr());

//打印客户机的地址,如果没有打印IP地址

n("");

n("");

(); //关闭Writer

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException

{

//如果是POST请求类型,同样调用GET类型的响应函数

doGet(request, response);

}

}

用我们在前面介绍的方法在Resin中配置使其运行,我们得到的结果如下:

这样的一个例子很好的说明了所谓的动态网页和静态网页的区别,就上面这个例子而言,每个客户看

到的内容是不一样的,而静态网页则对每一个客户而言都是一成不变的。

Servlet与表单交互的例子

上面我们介绍了Servlet如何与表单进行交互,并提供了一个从HTTP请求头部得到客户端信息的例

子,下面我们给出一个ServletHTTP提交的表单进行交互的例子,通过这个例子你应该能对整个客户端

和服务器端交互的过程有一个整体的了解。这个例子分成两个文件,一个是静态的HTML文件,提供一个

表单,并设置提交按钮,表单被提交后,服务器会把它定向到另一个文件,也就是我们的Servlet,由它读

取表单并打印到客户端。

1. 静态HTML文本:

Our Form

Our Form

姓名:
性别:

IE下显示效果如图所示:

不熟悉HTML的你可以参考有关HTML的书籍,尤其要注意的form的两个属性methodaction

2.

//

import .*;

import t.*;

import .*;

public class FormDemo extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException //处理GET请求的方法

{

tentType("text/html");

//先设置Header,在这里只设置ContentType一项

PrintWriter out = ter();

//得到文本输出Writer

String name = ameter("Name");

//得到表单值Name

String sex = ameter("Sex");

//得到表单值Sex

name = new String(es(),"ISO-8859-1");

//转换到正确的编码

//打印得到的表单值

n("");

n("");

n("");

n("Your Info");

n("");

n("");

n("

Data You Posted

");

n("

");

n("

");

n(new String(new String("

").getBytes(),"ISO-8859-1"));

n("

");

n("

");

n("

");

n(new String(new String("

").getBytes(),"ISO-8859-1"));

("

").getBytes(),"ISO-8859-1"));

else n(new String(new String("").getBytes(),"ISO-8859-1"));

n("

");

中文。前面的例子我们都没有涉及中文,在这里我们有必要提一下Servlet的中文问题。我们知道在同一

台机器上,所有的编码方式都是一样的,一般中文平台是gb2312,英文平台是ISO-8859-1,但是网络上的

两台机器并不能保证他们的编码方式都是一样的,这时候就有可能出现乱码的问题。在进行HTTP网络传输

的时候,统一采用的编码方式是ISO-8859-1,这时候如果还是按照本地编码来传输就会出现问题,这也是

Servlet在实现网络传输的时候一个不完美的地方,它不会自动进行本地编码到ISO-8859-1的转换,所以

直接打印的话就会出现乱码。原理上讲任何出现打印字符串的地方,都是需要进行编码转换的,但是西文

字符在不同字符集下对应相同的编码,以在打印西文字符的时候就不需要转换了。在Servlet后继的规范

中可能会改变这种麻烦的状况。不同的是,从网络提交的表单数据,Servlet是自动把它转换成本地编码

的,所以程序中得到的name字符串变量是gb2312编码的,同样需要进行转换后才能在客户端正确打印。

字符编码转换常用的方法是

String native_encoded = "中文字符串";

//本地编码的字符串

Byte[] byte_array = native_es();

//得到本地编码的字节数组

String net_encoded = new String(native_encoded, "ISO-8859-1");

//生成ISO-8859-1编码的字符串

这样得到的net_encoded字符串就可以用来向客户端打印而不出错了。

还有一点要注意的是,为了在客户端正常显示中文,必须在HTML头部设置charset=gb2312

当我们按下提交按钮后,我们得到的结果如下:

如果我们把中的methodGET改成POST,会有什么样的结果呢?由于我们没有重写

doPost方法,所以在Resin下,我们得到如下的结果:

有兴趣的你可以修改FormDemo类来响应POST方法。

通过以上的几个例子,你对Servlet如何响应HTTP请求,并从提交的表单中获取数据应该有了一个大

概的了解,但是要构建Web应用程序,光有这几点是不够的,下面我们要讲解的Servlet的会话和生命周

期对于构建Web应用是及其重要的两个特性。

Servlet控制会话

会话状态的维持是开发Web应用所必须面对的问题,有多种方法可以来解决这个问题,如使用Cookies

hidden类型的表单域,或直接把状态信息加到URL中等,还有Servlet本身提供了一个HttpSession接口

来支持会话状态的维持,在这里我们主要介绍基于这个接口的会话状态的管理。

Session的发明是为了填补HTTP协议的局限。请注意HTTP协议是如何工作的--用户发出请求,服务

器作出响应,这种用户端和服务器端的联系就是离散的,非连续的。HTTP协议不能提供允许服务器跟踪用

户请求的功能。在服务器端完成响应用户的请求之后,服务器不能继续与该浏览器继续保持连接。从服务

器这端来看,每一个请求都是独立的,因此HTTP协议被认为是无状态协议,当用户在多个主页间切换时,

服务器无法知道他的身份。Session的出现就是为了弥补这个局限。利用Session,您就可以当一个用户在

多个主页间切换的时候也能保存他的信息。这样很多以前根本无法去做的事情就变得简单多了。

在访问者从到达某个特定的主页到离开为止的那段时间,每个访问者都会单独获得一个Session

Java Servlet定义了一个HttpSession接口,实现的Session的功能,在Servlet中使用Session

过程如下:

1 使用HttpServletRequestgetSession方法得到当前存在的session,如果当前没有定义

session,则创建一个新的session,还可以使用方法getSessiontrue

2 session变量。可以使用方法ributenamevalue)来向Session

存储一个信息。也可以使用uenamevalue),但这个方法已经过时了。

3 Session变量。可以使用方法ributename)来读取Session中的一个

变量值,如果name是一个没有定义的变量,那么返回的是null。需要注意的是,从getAttribute读出的

变量类型是Object,必须使用强制类型转换,比如:

String uid = (String) ribute("uid");

也可以使用uename),但是这个方法也已经过时了。

4 关闭session,当时用完session后,可以使用date()方法关闭session。但

是这并不是严格要求的。因为,Servlet引擎在一段时间之后,自动关闭seesion

下面举一个简单的例子说明session的使用

//

import .*;

import .*;

import t.*;

import .*;

//导入必要的软件包

public class SessionExample extends HttpServlet

{

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException //实现doGet方法

{

tentType("text/html"); //设置HTTP

PrintWriter out = ter(); //得到输出Writer

HttpSession session = sion(true);

//得到session对象

//打印HTML标记

n("");

n("");

n("");

n("");

n("");

Date created = new Date(ationTime());

//得到session对象创建的时间

Date accessed = new Date(tAccessedTime());

//得到最后访问该session对象的时间

n("ID " + ()+"
");

//得到该sessionid,并打印

n("Created: " + created+"
");

//打印session创建时间

n("Last Accessed: " + accessed+"
");

//打印最后访问时间

ribute("UID","12345678");

//session中添加变量UID=12345678

ribute("Name","Tom");

//session中添加变量Name=Tom

Enumeration e = ributeNames();

//得到session中变量名的枚举对象

while (eElements()) { //遍历每一个变量

String name = (String)ement(); //首先得到名字

String value = ribute(name).toString();

//由名字从session中得到值

n(name + " = " + value+"
");
//打印

}

n(""); //打印HTML标记

n("");

}

}

}

Servlet运行的结果是:

有了Session对象,Web应用程序就可以在服务器端保存客户的状态,这对构建Web应用的重要性你

在以后的实践中会逐步有所体会。正像前面提到的,Session只是一个概念,可以有多种实现方法,在这

里我们就不过多的介绍了。因为Servlet本身就是实用性很强的内容,各种各样的技巧,实现方案,不胜

枚举。而且很多相关内容也不只是Servlet的专利,在这里只能做简单的介绍,使你对Servlet有一个概

念上的认识。有兴趣的话可以参考相关资料。

Servlet的生命周期

跟客户端的Applet相似,Servlet(这里Servlet的概念又回到了最原始的含义)也遵循严格的生命周期。

在每个Servlet实例的生命中有三种类型的事件,这三种事件分别对应于由Servlet引擎所唤醒的三个方

法:

1init()Servlet第一次被装载时,Servlet引擎调用这个Servletinit()方法,只调用一次。

如果某个Sevlet需要特殊的初始化需要。那么Servlet编写人员可以重写该方法来执行初始化任务。这是

一个可选的方法。如果某个Servlet不需要初始化,那么默认情况下将调用它父类的init方法。系统保证,

init方法成功完成以前,是不会调用Servlet去处理任何请求的。

2service()。这是Servlet最重要的方法,是真正处理请求的地方。对于每个请求,Servlet引擎

将调用Servletservice方法,并把Servlet请求对象和Servlet响应对象最为参数传递给它。

3destroy()。这是相对于init的可选方法,当Servlet即将被卸载时由Servlet引擎来调用,这个

方法用来清除并释放在init方法中所分配的资源。

Servlet的生命周期可以被归纳为以下几步:

1 装载Servlet,这一项操作一般是动态执行的。然而,Servlet通常会提供一个管理的选项,用

于在Servlet启动时强制装载和初始化特定的Servlet

2 Server创建一个Servlet实例

3 Server调用Servletinit方法

4 一个客户端请求到达Server

5 Server创建一个请求对象

6 Server创建一个响应对象

7 Server激活Servletservice方法,传递请求和响应对象作为参数

8 service方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息

9 service方法使用响应对象的方法。将响应传回Server,最终到达客户端。Service方法可能

激活其他方法以处理请求。如doGetdoPost或其他程序员自己开发的方法

10 对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此servletservice

方法,将这两个对象作为参数传递给它,如此重复以上的循环,但无需再次调用init方法,Servlet一般

只初始化一次

11 Server不再需要Servlet时,比如当Server要关闭时,Server调用Servletdestroy

至此关于Servlet的内容已经讲解完毕,你通过对比Servlet与传统静态网页的区别,应该能大概理

Web应用程序的概念,Web应用的出现,使得呆板的Web页面变得生动,具有交互能力。JavaWeb

用方面算不上独树一帜,但是却是做的相当优秀的。通过Servlet与下面我们要讲解的JSP的配合,可以

方便的构建出功能强大的Web应用。

学习Servlet,其实最主要的已经不是Java本身,我们也已经看到Servlet和一般Java程序是没有

什么区别的。要学好Servlet,除了掌握基本Servlet API之外,最关键的还在于如何从整体上把握整个

Web应用,如何合理的使用Servlet,使Servlet在构建Web网站的时候起到画龙点睛的作用,而不是复杂

冗余的重复性劳动。在真正编写Servlet的时候,一般是没有什么大的困难的。所以你在学习之余,最好

能找一些规模大一点的例子,通过阅读代码,分析结构,更好的掌握Servlet的使用方法,知道什么时候

该用Servlet实现,什么时候应该用其他的方法实现更为合适,而不必深究Servlet的语法或其他的一些

小技巧。如果你对Web网站不熟悉,在学习的时候可能有困难,那么建议先学习基本的Web网站的知识。

可以这么说Servlet只是一个工具,思想是需要在实践中慢慢体会的,当你有了成熟的思想之后再来学习

Servlet,一定会有驾轻就熟的感觉的。


本文发布于:2023-11-28,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何打开jsp文件

发布评论

评论列表(有0条评论)
    福州电脑网_福州电脑维修_福州电脑之家_福州iThome

    福州电脑网_福州电脑维修_福州电脑之家_福州iThome

    福州电脑维修网(fzithome.com)专业的电脑维修,笔记本维修,上门维修各种电脑,笔记本,平板等,快速上门.电脑知识频道内容覆盖:计算机资讯,电脑基础应用知识,各种电脑故障维修学习,电脑外设产品维修维护,病毒,软件,硬件,常识.

      你的姓名:"+name+"
      你的性别:");

      if(("1")) n(new String(new String("