WEB开发网      濠电姷鏁告慨鐑藉极閸涘﹦绠鹃柍褜鍓氱换娑欐媴閸愬弶鎼愮痪鍓ф嚀閳规垿鎮╃€圭姴顥濋梺姹囧€楅崑鎾诲Φ閸曨垰绠涢柛顐f礃椤庡秹姊虹粙娆惧剳闁哥姵鍔欐俊鐢稿礋椤栨艾鍞ㄩ梺闈浤涙担鎻掍壕闁圭儤顨嗛埛鎺楁煕閺囥劌浜滄い蹇e弮閺屸€崇暆鐎n剛鏆犻柧浼欑到閵嗘帒顫濋悡搴d画缂佹鍨垮缁樻媴缁涘娈┑顔斤公缁犳捇銆佸鎰佹▌濠电姭鍋撳ù锝囩《閺€浠嬫煟濡鍤嬬€规悶鍎辫灃闁绘ê寮堕崯鐐电磼閸屾氨效鐎规洘绮忛ˇ瀵哥棯閹佸仮鐎殿喖鐖煎畷鐓庘槈濡警鐎崇紓鍌欑劍椤ㄥ棗鐣濋幖浣歌摕闁绘棃顥撻弳瀣煟濡も偓閻楀棗鈻撳Δ鍛拺閻犲洠鈧櫕鐏€闂佸搫鎳愭慨鎾偩閻ゎ垬浜归柟鐑樼箖閺呮繈姊洪棃娑氬婵☆偅鐟╅、娆掔疀閺冨倻鐦堥梺姹囧灲濞佳勭閿曞倹鐓曢柕濞垮劤閸╋絾顨ラ悙鏉戝妤犵偞锕㈤、娆撴嚃閳哄骞㈤梻鍌欐祰椤鐣峰Ο鑲╃煋妞ゆ棁锟ユ禍褰掓煙閻戞ɑ灏ù婊冪秺濮婅櫣绱掑Ο铏逛桓闂佹寧娲嶉弲娑滅亱闂佸憡娲﹂崹閬嶅煕閹达附鐓欓柤娴嬫櫅娴犳粌鈹戦垾鐐藉仮闁诡喗顨呴埥澶愬箳閹惧褰囩紓鍌欑贰閸犳牠顢栭崨鎼晣闁稿繒鍘х欢鐐翠繆椤栨粎甯涙繛鍛喘濮婄粯鎷呴悷閭﹀殝缂備浇顕ч崐鍨嚕缂佹ḿ绡€闁搞儯鍔嶅▍鍥⒑缁嬫寧婀扮紒瀣崌瀹曘垽鎮介崨濠勫幗闁瑰吋鐣崹濠氬煀閺囥垺鐓ユ慨妯垮煐閻撶喖鐓崶銉ュ姢缂佸宕电槐鎺旂磼濡偐鐣虹紓浣虹帛缁诲牆鐣峰鈧俊姝岊槺缂佽鲸绻堝缁樻媴缁涘娈愰梺鎼炲妺閸楀啿鐣烽鐐茬骇闁瑰濮靛▓楣冩⒑缂佹ɑ鈷掗柍宄扮墦瀵偊宕掗悙瀵稿幈闂佹娊鏁崑鎾绘煛閸涱喚鎳呮俊鍙夊姇铻i悶娑掑墲閺傗偓闂備胶绮崝鏇炍熸繝鍥у惞闁绘柨鐨濋弨鑺ャ亜閺冨洦顥夐柛鏂诲€濋幗鍫曟倷閻戞ḿ鍘遍梺鍝勬储閸斿本鏅堕鐐寸厱婵炲棗绻掔粻濠氭煛鐏炵晫效鐎规洦鍋婂畷鐔碱敆閳ь剙鈻嶉敐鍥╃=濞达絾褰冩禍鐐節閵忥絾纭炬い鎴濇川缁粯銈i崘鈺冨幍闁诲孩绋掑玻璺ㄧ不濮椻偓閺屻劌鈽夊Ο澶癸絾銇勯妸锝呭姦闁诡喗鐟╅、鏃堝礋椤撴繄绀勯梻鍌欐祰椤曟牠宕伴弽顐ょ濠电姴鍊婚弳锕傛煙椤栫偛浜版俊鑼额嚙閳规垿鍩勯崘銊хシ濡炪値鍘鹃崗妯侯嚕鐠囨祴妲堥柕蹇曞閳哄懏鐓忓璺虹墕閸旀挳鏌涢弬娆炬Ш缂佽鲸鎸婚幏鍛矙鎼存挸浜鹃柛婵勫劤閻挾鎲搁悧鍫濈瑨闁哄绶氶弻鐔煎礈瑜忕敮娑㈡煛閸涱喗鍊愰柡灞诲姂閹倝宕掑☉姗嗕紦 ---闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏃堟暜閸嬫挾绮☉妯哄箻婵炲樊浜滈悡娑㈡煕濞戝崬骞樻い鏂挎濮婅櫣鎹勯妸銉︾彚闂佺懓鍤栭幏锟�
开发学院软件开发Java Servlet简介(一) 阅读

Servlet简介(一)

 2007-12-23 12:23:58 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偛顦甸弫鎾绘偐閹绘帞鈧參姊哄Ч鍥х仼闁诲繑鑹鹃悾鐑藉蓟閵夛妇鍘甸梺瑙勵問閸犳牠銆傛總鍛婄厱閹艰揪绱曟牎闂侀潧娲ょ€氫即鐛幒妤€绠f繝闈涘暙娴滈箖鏌i姀鈶跺湱澹曟繝姘厵闁绘劦鍓氶悘杈ㄤ繆閹绘帞澧涚紒缁樼洴瀹曞崬螖閸愬啠鍓濈换娑樼暆婵犱胶鏁栫紓浣介哺閹瑰洤鐣烽幒鎴僵闁瑰吀鐒﹂悗鎼佹⒒娴g儤鍤€闁搞倖鐗犻獮蹇涙晸閿燂拷濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩缁狀垶鏌涢幇闈涙灈鐎瑰憡绻冮妵鍕箻鐎靛摜鐣奸梺纭咁潐濞茬喎顫忕紒妯肩懝闁逞屽墮宀h儻顦查悡銈夋煏閸繃鍋繛宸簻鎯熼梺瀹犳〃閼冲爼宕濋敃鈧—鍐Χ閸℃鐟愰梺鐓庡暱閻栧ジ宕烘繝鍥у嵆闁靛骏绱曢崢顏堟⒑閹肩偛鍔楅柡鍛⊕缁傛帟顦寸紒杈ㄥ笚濞煎繘鍩℃担閿嬵潟闂備浇妗ㄩ悞锕傚箲閸ヮ剙鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹  闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柤鍝ユ暩娴犳氨绱撻崒娆掑厡缂侇噮鍨堕妴鍐川閺夋垹鍘洪悗骞垮劚椤︻垶宕¢幎鑺ョ厪闊洦娲栨牎闂佽瀵掗崜鐔奉潖閾忓湱纾兼俊顖氭惈椤秴顪冮妶鍡楀闁告鍥х叀濠㈣泛谩閻斿吋鐓ラ悗锝庡厴閸嬫挻绻濆顓涙嫼閻熸粎澧楃敮鎺撶娴煎瓨鐓曢柟鎯ь嚟閳藉鏌嶇紒妯荤叆妞ゎ偅绻堥幊婊呭枈濡顏归梻鍌欑閹诧紕绮欓幋锔哄亼闁哄鍨熼弸鏃堟煛閸愶絽浜剧紓浣虹帛缁嬫挻绂掗敃鍌氱<婵﹩鍓﹂悗鎶芥⒒娴e摜锛嶇紒顕呭灦楠炴垿宕堕鍌氱ウ闁诲函缍嗘禍鏍绩娴犲鐓欓梺顓ㄧ畱婢ь垱銇勯弬鍨偓瑙勭┍婵犲洦鍊锋い蹇撳閸嬫捇寮借濞兼牕鈹戦悩瀹犲闁稿被鍔庨幉姝岀疀濞戞ḿ鐤呴梺鍦檸閸犳寮查幖浣圭叆闁绘洖鍊圭€氾拷
核心提示:目录:1. 关于Servlets* 举例* 结构介绍* Lifecycle2. 怎样编写一个servlet程序* 客户端的交互性* Lifecycle 方法* 提供有关Servlet的信息3. 怎样用servletrunner运行一个Servlet程序关于ServletsServlets是java 2.0中新增的一个全

  目录:

1. 关于Servlets
* 举例
* 结构介绍
* Lifecycle
2. 怎样编写一个servlet程序
* 客户端的交互性
* Lifecycle 方法
* 提供有关Servlet的信息
3. 怎样用servletrunner运行一个Servlet程序

关于Servlets

Servlets是java 2.0中新增的一个全新功能。

JAVA Servlets 是运行在请求/面向请求服务器上的模块,比如一个Java-enabled web 服务器, 和类似这样的延伸场合. 例如, 一个servlet可以从一个Html订单表中获取数据然后用一些商业上的算法来更新公司相应的订单数据库。

也就是说:servlet能够象CGI脚本一样扩展WEB服务器功能,但是servlet占用很少密集资源,有很多用CGI脚本编制的一些站点由于访问量剧增,性能迅速下降,这是CGI脚本一个缺点,有关CGI脚本概念请参照本斋"CGI入门学习" 。同时由于servlet是用java编写的,因此是跨平台的。
实际servlet是电子商务真正的开始。

Servlet API, 是用来写servlet的, 编写servlet是已没有CGI脚本那样诸如关心一个servlet是这样被装载, servlet运行的服务器环境是什么, 或者用来传输数据的协议是什么等等,这样servlets就可以融合在不同的web服务器中.

Servlet可以相当有效地替代CGI脚本: 它可以方便地产生容易编写而且运行快的动态文本. 可以很方便的调试寻找出程序问题. Servlet程序是用Java Servlet API开发的, a standard Java extension. 但不是Java核心框架的一部分,可以作为通用的附加产品包被商家购买使用.
举例

下面是一些servlet应用范围:

* 用于处理HTML表单通过HTTPS产生POSTed数据, 包括买卖订单或信用卡数据. 因此servlet可以成为订单处理系统的一部分, 和产品存货数据库一道工作,也许可以用在在线支付系统上.
* 允许人们之间的合作. 一个servlet能并发处理多个请求; 他们可以使用在诸如在线会议这样的同步请求支持系统.
* 转送请求. Servlet可以转送请求给其他的服务器和servlets. 这就允许在镜象同样内容的几个服务器之间平衡负载. 按照任务类型或组织范围,可以允许被用来在几个服务器中划分逻辑上的服务器.
* servlet 编写者们可以定义彼此之间共同工作的激活代理,每个代理者是一个servlet, 而且代理者能够在他们之间传送数据.

Servlet 结构总视

在具体掌握servlet之前,须对java语言有所了解。下面是基于您了解java基础上的,在Servlet API中最重要的是Servlet interface. 所有的servlets implement(执行)这个interface, 方式多种:或者是直接的,或者通过extending 这个class执行它,如 HttpServlet. 这个Servlet interface 提供安排servlet与客户端联系的方法. Servlet 编写者可以在他们开发servlet程序时提供更多一些或所有的这样方法.

当一个servlet接收来自客户端的调用请求, 它接收两个对象: 一个是ServletRequest,另外一个是ServletResponse. 这个ServletRequest class 概括从客户端到服务器之间的联系, 而 ServletResponse class 概括从servlet返回客户端的联系.

ServletRequest interface 可以获取到这样一些信息如由客户端传送的阐述名称,客户端正在使用的协议, 产生请求并且接收请求的服务器远端主机名. 它也提供获取数据流的servlet, ServletInputStream, 这些数据是客户端引用中使用HTTP POST 和 PUT 方法递交的. 一个ServletRequest的子类可以让servlet获取更多的协议特性数据. 例如: HttpServletRequest 包含获取HTTP-specific头部信息的方法.

ServletResponse interface 给出相应客户端的servlet方法. 它允许servlet设置内容长度和回应的mime类型, 并且提供输出流, ServletOutputStream, 通过编写者可以发回相应数据. ServletResponse子类可以给出更多PRotocol-specific容量的信息。 例如: HttpServletResponse 包含允许servlet操作HTTP-specific头部信息的方法.

上面有关classes 和 interfaces描述构成了一个基本的Servlet框架. HTTP servlets有一些附加的可以提供session-tracking capabilities的方法. servlet编写者可以用这些API在有他人操作时维护servlet与客户端之间的状态.
Servlet Lifecycle

服务器装载运行servlets:接收来自客户端的多个请求并且返回数据给客户端. 然后在删除移开servlets. 这就是servlets lifecycle过程. 下面详细描述:

当一个服务器装载servlet时, 它运行servlet的 init 方法. 这个方法不能反复调用,一旦调用就是再装载servlet. 直到服务器调用 destroy 方法卸载servlet后才能再调用.

在服务器装载初始化后servlet, servlet就能够处理客户端的请求. 用service 方法做到这一点. 每个客户端请求有它自己service方法: 这些方法接收客户端请求, 并且发回相应的响应.

Servlets能同时运行多个service. 这是很重要的, 这样, service方法可以按一个thread-safe 样式编写. 如:service方法更新servlet对象中的一个字段field, 这个字段可以同时存取的. 假如某个服务器不能同时并发运行service方法,也可以用SingleThreadModel interface. 这个 interface 保证不会有两个以上的线程threads并发运行.

Servlets一直运行到他们被服务器卸载。
在servlet的lifecycle中, 编写一个thread-safe编码以卸载servlet是很重要的。
编写Servlet

Servlets 执行 javax.servlet.Servlet interface. 当servlet编写者可以通过直接implement interface开发servlet, 但这样通常没有必要. 因为大多数servlet是针对用HTTP协议的web服务器, 这样最通用开发servlet办法是用 javax.servlet.http.HttpServlet 内.

HttpServlet 类通过extend GenericServlet基类执行 Servlet interface, 提供了处理HTTP协议的功能. 他的service方法支持标准HTTP/1.1请求.

一般地, 用HttpServlet指定的类编写的servlets可以多线程地并发运行service方法.

与客户端的交互性

Servlet编写者注意HttpServlet类有几个欠缺的方法,你可以自己定义方法中内容,但是必须使用这些方法名称以使servlet知道你想做什么,

* doGet, 用于处理 GET、有条件的GET 和头部 HEAD请求
* doPost, 用户处理 POST 请求
* doPut, 用于处理 PUT 请求
* doDelete, 用于处理 DELETE请求

HttpServlet的service方法, 一般地, 当它接收到一个OPTIONS请求时,会调用doOptions 方法, 当接收一个TRACE请求是调用doTrace . doOptions缺省执行方式是自动决定什么样的HTTP被选择并且返回哪个信息.

在你使用这些方法时,必须带两个阐述. 第一个包含来自客户端的数据HttpServletRequest. 第二个参数包含客户端的响应HttpServletResponse. 在下例中是这样的情况.

一个HttpServletRequest对象提供到达HTTP 头部数据, 也允许你获取客户端的数据. 怎样获取这些数据取决于HTTP端请求方法.

* 不管任何HTTP方式, 你可以用 getParameterValues 方法, 这个用来返回特定名称的参数值.
* 对于用 HTTP GET 请求的方式, 这个 getQueryString 方法将会返回一个可以用来解剖分析的.
* 对于用HTTP POST, PUT, 和 DELETE请求的方式, 你有两种方法可以选择. 如果是文本数据,你能通过getReader方法用BufferedReader获取 ; 如果是二进制数据, 能通过getReader 方法用 ServletInputStream获取.

为了响应客户端, 一个HttpServletResponse对象提供返回数据给用户的两个方法. 你可以用getWriter 方法返回,或者 getOutputStream 方法以输出流返回. 你应该用getWriter返回文本数据,而用getOutputStream返回二进制数据.

在使用Writer 或 OutputStream之前, HTTP 头部应该先被设置. HttpServletResponse内提供这样一个方法,之后可以用writer 或 outputstream 将响应主体部分发回用户. 完成后要关闭 writer 或 output stream以便让服务器知道响应已经完毕.
一个HTTP Servlet处理GET和HEAD方法的例子

public class SimpleServlet extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
// 首先设置头部
res.setContentType("text/html");

// 用 writer方法返回响应数据
PrintWriter out = res.getWriter();
out.println("<HEAD><TITLE> SimpleServlet Output</TITLE></HEAD><BODY>");
out.println("<h1> SimpleServlet Output </h1>");
out.println("<P>This is output is from SimpleServlet.");
out.println("</BODY>");
out.close();
}

public String getServletInfo() {
return "A simple servlet";
}

}

这个例子完整地现实了一个servlet.
一个HTTP Servlet处理POST方式的例子

这里是个用HTML带POST表单的例子:

<html>
<head><title>JdcSurvey</title></head>
<body>
<form action=http://demo:8080/servlet/survey method=POST>
<input type=hidden name=survey value=Survey01Results>

<BR><BR>How Many Employees in your Company?<BR>
<BR>1-100<input type=radio name=employee value=1-100>
<BR>100-200<input type=radio name=employee value=100-200>
<BR>200-300<input type=radio name=employee value=200-300>
<BR>300-400<input type=radio name=employee value=300-400>
<BR>500-more<input type=radio name=employee value=500-more>

<BR><BR>General Comments?<BR>
<BR><input type=text name=comment>

<BR><BR>What IDEs do you use?<BR>
<BR>JavaWorkShop<input type=checkbox name=ide value=JavaWorkShop>
<BR>J++<input type=checkbox name=ide value=J++>
<BR>Cafe'<input type=checkbox name=ide value=Cafe'>

<BR><BR><input type=submit><input type=reset>
</form>
</body>
</html>

这里的servlet将表单数据写入一个文件,并且用一个thank you信息响应用户. 这里servlet的方法,如下例:

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
// 首先设置响应的 "content type" 头部
res.setContentType("text/html");

//得到响应的 PrintWriter以返回文本给客户端.
PrintWriter toClient = res.getWriter();

try {
//打开一个文件写入Survey的结果.
String surveyName = req.getParameterValues("survey")[0];
FileWriter resultsFile = new FileWriter(resultsDir
+ System.getProperty("file.separator")
+ surveyName + ".txt", true);
PrintWriter toFile = new PrintWriter(resultsFile);

// 从客户端得到表单数据 & 存贮在这个文件中
toFile.println("<BEGIN>");
Enumeration values = req.getParameterNames();
while(values
}
toFile.println("<END>");

//关闭文件.
resultsFile.close();

// 用一个thank you返回客户端
toClient.println("<html>");
toClient.println("<title>Thank you!</title>");
toClient.println("Thank you for participating");
toClient.println("</html>");

} catch(IOException e) {
e.printStackTrace();
toClient.println(
"A problem occured while recording your answers. "
+ "Please try again.");
}

// 关闭writer; 响应完成.
toClient.close();
}

这个doPost方法是用getParameterNames和getParameterValues方法来从表单中获取数据的. 因为它返回文本给客户端, doPost 将调用 getWriter 方法. 在写入响应主体部分之前,它设置了响应头部字段的设置, 但响应完成后,关闭.
Lifecycle 方法
重编Init 初始化方法

在初始化过程中, servlet应当准备好它要安排的一些资源, 以便这个servlet能够接收请求,做到这些可以不用考虑多线程, 因为在servlet初始化是只能是单进程的。 一旦初始化方法完成, servlet就能接收客户端的请求。 当然如果初始化不能成功,这个方法会扔出throw UnavailableException解释的.

初始化方法使用ServletConfig 对象作为参数. 这个方法应该保存这个对象, 以便它能有方法getServletConfig返回. 最简单的办法是,搞出一个新类,他的初始化方法数调用super.init. 如果确实这样做, 你就应当自己保存ServletConfig对象, 并且自己重编getServletConfig 方法以便它能从新的位置得到对象.

下面是个初始化方法的例子. 它是来自Survey Servlet的初始化方法, 从一个表单接收输入然后存储到文件中,为了存储survey信息, 它需要一个目录. 它以初始化参数接收这个目录.

public void init(ServletConfig config)
throws ServletException
{
super.init(config);

//获取目录
resultsDir = getInitParameter("resultsDir");

//如果没有目录, 不处理客户端
if (resultsDir == null) {
throw new UnavailableException (this,
"Not given a Directory to write survey results!");
}
}

这里的初始化方法调用super.init 方法来管理安排ServletConfig对象. 这个初始化方法也设置了一个字段: resultsDir, 作为初始化参数提供的目录名. 如果没有目录名被提供, 这个 servlet扔出一个不适用的解释. 如果初始化方法成功完成,servlet将能处理客户端请求
初始化参数

初始化参数的规定是一个服务器方面的规定。

如果初始化参数被规定, 都可以用同样的方法得到: 用 getInitParameter 方法. 这个方法将参数名作为自己的参数项.
重编Destroy 方法

当服务器卸载一个servlet, 它将调用servlet的destroy方法. 这个destroy方法是与初始化方法相反,同时从内存中释放servlet.

并不是所有的调用了初始化init方法是也必须调用destroy方法.

对于大多数的servlets, 一些初始化的工作必须反做的. 如, 假设有一个servlet,它在初始化时打开一个数据库连接,他的destroy 方法如下显示:需要关闭这个连接的

/**
* 关闭数据库连接
*/
public void destroy() {
try {
con.close();
} catch (SQLException e) {
while(e != null) {
log("SQLException: " + e.getSQLState() + '\t' +
e.getMessage() + '\t' +
e.getErrorCode() + '\t');
e = e.getNextException();
}
} catch (Exception e) {
e.printStackTrace();
}
}

关于一个Servlet中断涉及的多线程

但一个服务器卸载一个servlet, 它会在所有的service已经完成后调用destroy. 如果你的操作运行需要很长时间, 但destroy 被调用时还有线程在运行. 这个servlet编写者有责任确保所有的线程都已经完成;

长时间运行响应客户端请求的那些servlet应当保留当前有多少方法在运行的记录. 他的 long-running 方法应当周期性地轮询以确保他们能够继续运行下去. 如果servlet被destroy方法调用, 那么这个long-running 方法如果必要必须停止工作或清除.

举例, 变量serviceCounter用来统计有多少service方法在运行, 变量shuttingDown显示这个servlet是否被destory. 每个变量有它自己的获取方法:

public ShutdownExample extends HttpServlet {
private int serviceCounter = 0;
private Boolean shuttingDown;
...
// serviceCounter
protected synchronized void enteringServiceMethod() {
serviceCounter++;
}
protected synchronized void leavingServiceMethod() {
serviceCounter--;
}
protected synchronized int numServices() {
return serviceCounter;
}
//shuttingDown
protected setShuttingDown(Boolean flag) {
shuttingDown = flag;
}
protected Boolean isShuttingDown() {
return shuttingDown;
}
}

这个service方法每次在它进入时要增加,而在它返回退出时要减少:

protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
enteringServiceMethod();
try {
super.service(req, resp);
} finally {
leavingServiceMethod();
}
}

destroy方法应当检查serviceCounter, 如果存在长时间方式运行的话, 设置变量shuttingDown . 这个变量将会让那个正在处理请求的线程知道:该结束了,关闭吧! destroy 方法应当等待这几个service 方法完成, 这样就是一个清楚的关闭过程了.

public void destroy() {
/* 检查是否有线程在运行,如果存在,告诉他们stop. */
if (numServices() > 0) {
setShuttingDown(true);
}

/* 等待他们stop. */
while(numService() > 0) {
try {
thisThread.sleep(interval);
} catch (InterruptedException e) {
}
}
}

long-running 方法如必要应当检查这个变量,并且解释他们的工作:

public void doPost( catch (InterruptedException e) {
}
}
}

提供关于Servlet的信息

/**
* This is a simple example of an HTTP Servlet. It responds to the GET
* and HEAD methods of the HTTP protocol.
*/
public class SimpleServlet extends HttpServlet {

...

public String getServletInfo() {
return "A simple servlet";
}
}进入讨论组讨论。

(出处:http://www.cncms.com)


Tags:Servlet 简介

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接