JSP Servlet.docx
- 文档编号:5245903
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:63
- 大小:66.18KB
JSP Servlet.docx
《JSP Servlet.docx》由会员分享,可在线阅读,更多相关《JSP Servlet.docx(63页珍藏版)》请在冰豆网上搜索。
JSPServlet
Servlet与JSP教程
(1)-Servlet和JSP概述
一、Servlet和JSP概述
1.1JavaServlet及其特点
Servlet是Java技术对CGI编程的回答。
Servlet程序在服务器端运行,动态地生成Web页面。
与传统的CGI和许多其他类似CGI的技术相比,JavaServlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资(更重要的是,Servlet程序员收入要比Perl程序员高:
-):
高效。
在传统的CGI中,每个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。
而在Servlet中,每个请求由一个轻量级的Java线程处理(而不是重量级的操作系统进程)。
在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet类代码。
在性能优化方面,Servlet也比CGI有着更多的选择,比如缓冲以前的计算结果,保持数据库连接的活动,等等。
方便。
Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。
功能强大。
在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。
例如,Servlet能够直接和Web服务器交互,而普通的CGI程序不能。
Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。
可移植性好。
Servlet用Java编写,ServletAPI具有完善的标准。
因此,为I-PlanetEnterpriseServer写的Servlet无需任何实质上的改动即可移植到Apache、MicrosoftIIS或者WebStar。
几乎所有的主流服务器都直接或通过插件支持Servlet。
节省投资。
不仅有许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。
1.2JSP及其特点
JavaServerPages(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术,有关JSP基础概念的说明请参见《JSP技术简介》。
许多由CGI程序生成的页面大部分仍旧是静态HTML,动态内容只在页面中有限的几个部分出现。
但是包括Servlet在内的大多数CGI技术及其变种,总是通过程序生成整个页面。
JSP使得我们可以分别创建这两个部分。
例如,下面就是一个简单的JSP页面:
<!
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD><TITLE>欢迎访问网上商店</TITLE></HEAD>
<BODY>
<H1>欢迎</H1>
<SMALL>欢迎,
<!
--首次访问的用户名字为"NewUser"-->
<%out.println(Utils.getUserNameFromCookie(request));%>
要设置帐号信息,请点击
<AHREF="Account-Settings.html">这里</A></SMALL>
<P>
页面的其余内容。
.
</BODY></HTML>
下面是JSP和其他类似或相关技术的一个简单比较:
JSP和ActiveServerPages(ASP)相比
Microsoft的ASP是一种和JSP类似的技术。
JSP和ASP相比具有两方面的优点。
首先,动态部分用Java编写,而不是VBScript或其他Microsoft语言,不仅功能更强大而且更易于使用。
第二,JSP应用可以移植到其他操作系统和非Microsoft的Web服务器上。
JSP和纯Servlet相比
JSP并没有增加任何本质上不能用Servlet实现的功能。
但是,在JSP中编写静态HTML更加方便,不必再用println语句来输出每一行HTML代码。
更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:
比如,由页面设计专家进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。
JSP和服务器端包含(Server-SideInclude,SSI)相比
SSI是一种受到广泛支持的在静态HTML中引入外部代码的技术。
JSP在这方面的支持更为完善,因为它可以用Servlet而不是独立的程序来生成动态内容。
另外,SSI实际上只用于简单的包含,而不是面向那些能够处理表单数据、访问数据库的“真正的”程序。
JSP和JavaScript相比
JavaScript能够在客户端动态地生成HTML。
虽然JavaScript很有用,但它只能处理以客户端环境为基础的动态信息。
除了Cookie之外,HTTP状态和表单提交数据对JavaScript来说都是不可用的。
另外,由于是在客户端运行,JavaScript不能访问服务器端资源,比如数据库、目录信息等等。
Servlet与JSP教程
(2)-设置开发、运行环境
二、设置开发、运行环境
2.1安装Servlet和JSP开发工具
要学习Servlet和JSP开发,首先你必须准备一个符合JavaServlet2.1/2.2和JavaServerPages1.0/1.1规范的开发环境。
Sun提供免费的JavaServerWebDevelopmentKit(JSWDK),可以从下载。
安装好JSWDK之后,你还要告诉javac,在编译文件的时候到哪里去寻找Servlet和JSP类。
JSWDK安装指南对此有详细说明,但主要就是把servlet.jar和jsp.jar加入CLASSPATH。
CLASSPATH是一个指示Java如何寻找类文件的环境变量,如果不设置CLASSPATH,Java在当前目录和标准系统库中寻找类;如果你自己设置了CLASSPATH,不要忘记包含当前目录(即在CLASSPATH中包含“.”)。
另外,为了避免和其他开发者安装到同一Web服务器上的Servlet产生命名冲突,最好把自己的Servlet放入包里面。
此时,把包层次结构中的顶级目录也加入CLASSPATH会带来不少方便。
请参见下文具体说明。
2.2安装支持Servlet的Web服务器
除了开发工具之外,你还要安装一个支持JavaServlet的Web服务器,或者在现有的Web服务器上安装Servlet软件包。
如果你使用的是最新的Web服务器或应用服务器,很可能它已经有了所有必需的软件。
请查看Web服务器的文档,或访问查看支持Servlet的服务器软件清单。
虽然最终运行Servlet的往往是商业级的服务器,但是开始学习的时候,用一个能够在台式机上运行的免费系统进行开发和测试也足够了。
下面是几种当前最受欢迎的产品。
ApacheTomcat.
Tomcat是Servlet2.2和JSP1.1规范的官方参考实现。
Tomcat既可以单独作为小型Servlet、JSP测试服务器,也可以集成到ApacheWeb服务器。
直到2000年早期,Tomcat还是唯一的支持Servlet2.2和JSP1.1规范的服务器,但已经有许多其它服务器宣布提供这方面的支持。
Tomcat和Apache一样是免费的。
不过,快速、稳定的Apache服务器安装和配置起来有点麻烦,Tomcat也有同样的缺点。
和其他商业级Servlet引擎相比,配置Tomcat的工作量显然要多一点。
具体请参见http:
//jakarta.apache.org/。
JavaServerWebDevelopmentKit(JSWDK).
JSWDK是Servlet2.1和JSP1.0的官方参考实现。
把Servlet和JSP应用部署到正式运行它们的服务器之前,JSWDK可以单独作为小型的Servlet、JSP测试服务器。
JSWDK也是免费的,而且具有很好的稳定性,但它的安装和配置也较为复杂。
具体请参见。
AllaireJRun.
JRun是一个Servlet和JSP引擎,它可以集成到NetscapeEnterprise或FastTrackServer、IIS、MicrosoftPersonalWebServer、版本较低的Apache、O`eilly的WebSite或者StarNineWebSTAR。
最多支持5个并发连接的限制版本是免费的,商业版本中不存在这个限制,而且增加了远程管理控制台之类的功能。
具体请参见。
NewAtlanta的ServletExec
ServletExec是一个快速的Servlet和JSP引擎,它可以集成到大多数流行的Web服务器,支持平台包括Solaris、Windows、MacOS、HP-UX和Linux。
ServletExec可以免费下载和使用,但许多高级功能和管理工具只有在购买了许可之后才可以使用。
NewAtlanta还提供一个免费的Servlet调试器,该调试器可以在许多流行的JavaIDE下工作。
具体请参见。
Gefion的LiteWebServer(LWS)
LWS是一个支持Servlet2.2和JSP1.1的免费小型Web服务器。
Gefion还有一个免费的WAICoolRunner插件,利用该插件可以为NetscapeFastTrack和EnterpriseServer增加Servlet2.2和JSP1.1支持。
具体请参见。
Sun的JavaWebServer.
该服务器全部用Java写成,而且是首先提供Servlet2.1和JSP1.0规范完整支持的Web服务器之一。
虽然Sun现在已转向Netscape/I-PlanetServer,不再发展JavaWebServer,但它仍旧是一个广受欢迎的Servlet、JSP学习平台。
要得到免费试用版本,请访问。
Servlet与JSP教程(3)
如果某个类要成为Servlet,则它应该从HttpServlet继承,根据数据是通过GET还是POST发送,覆盖doGet、doPost方法之一或全部。
doGet和doPost方法都有两个参数,分别为HttpServletRequest类型和HttpServletResponse类型。
HttpServletRequest提供访问有关请求的信息的方法,例如表单数据、HTTP请求头等等。
HttpServletResponse除了提供用于指定HTTP应答状态(200,404等)、应答头(Content-Type,Set-Cookie等)的方法之外,最重要的是它提供了一个用于向客户端发送数据的PrintWriter。
对于简单的Servlet来说,它的大部分工作是通过println语句生成向客户端发送的页面。
注意doGet和doPost抛出两个异常,因此你必须在声明中包含它们。
另外,你还必须导入java.io包(要用到PrintWriter等类)、javax.servlet包(要用到HttpServlet等类)以及javax.servlet.http包(要用到HttpServletRequest类和HttpServletResponse类)。
最后,doGet和doPost这两个方法是由service方法调用的,有时你可能需要直接覆盖service方法,比如Servlet要处理GET和POST两种请求时。
3.2输出纯文本的简单Servlet
下面是一个输出纯文本的简单Servlet。
3.2.1HelloWorld.java
packagehall;
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclassHelloWorldextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
PrintWriterout=response.getWriter();
out.println("HelloWorld");
}
}
3.2.2Servlet的编译和安装
不同的Web服务器上安装Servlet的具体细节可能不同,请参考Web服务器文档了解更权威的说明。
假定使用JavaWebServer(JWS)2.0,则Servlet应该安装到JWS安装目录的servlets子目录下。
在本文中,为了避免同一服务器上不同用户的Servlet命名冲突,我们把所有Servlet都放入一个独立的包hall中;如果你和其他人共用一个服务器,而且该服务器没有“虚拟服务器”机制来避免这种命名冲突,那么最好也使用包。
把Servlet放入了包hall之后,HelloWorld.java实际上是放在servlets目录的hall子目录下。
大多数其他服务器的配置方法也相似,除了JWS之外,本文的Servlet和JSP示例已经在BEAWebLogic和IBMWebSphere3.0下经过测试。
WebSphere具有优秀的虚拟服务器机制,因此,如果只是为了避免命名冲突的话并非一定要用包。
对于没有使用过包的初学者,下面我们介绍编译包里面的类的两种方法。
一种方法是设置CLASSPATH,使其指向实际存放Servlet的目录的上一级目录(Servlet主目录),然后在该目录中按正常的方式编译。
例如,如果Servlet的主目录是C:
\JavaWebServer\servlets,包的名字(即主目录下的子目录名字)是hall,在Windows下,编译过程如下:
DOS>setCLASSPATH=C:
\JavaWebServer\servlets;%CLASSPATH%
DOS>cdC:
\JavaWebServer\servlets\hall
DOS>javacYourServlet.java
第二种编译包里面的Servlet的方法是进入Servlet主目录,执行“javacdirectory\YourServlet.java”(Windows)或者“javacdirectory/YourServlet.java”(Unix)。
例如,再次假定Servlet主目录是C:
\JavaWebServer\servlets,包的名字是hall,在Windows中编译过程如下:
DOS>cdC:
\JavaWebServer\servlets
DOS>javachall\YourServlet.java
注意在Windows下,大多数JDK1.1版本的javac要求目录名字后面加反斜杠(\)。
JDK1.2已经改正这个问题,然而由于许多Web服务器仍旧使用JDK1.1,因此大量的Servlet开发者仍旧在使用JDK1.1。
最后,Javac还有一个高级选项用于支持源代码和.class文件的分开放置,即你可以用javac的“-d”选项把.class文件安装到Web服务器所要求的目录。
3.2.3运行Servlet
在JavaWebServer下,Servlet应该放到JWS安装目录的servlets子目录下,而调用Servlet的URL是http:
//host/servlet/ServletName。
注意子目录的名字是servlets(带“s”),而URL使用的是“servlet”。
由于HelloWorldServlet放入包hall,因此调用它的URL应该是http:
//host/servlet/hall.HelloWorld。
在其他的服务器上,安装和调用Servlet的方法可能略有不同。
大多数Web服务器还允许定义Servlet的别名,因此Servlet也可能用http:
//host/any-path/any-file.html形式的URL调用。
具体如何进行配置完全依赖于服务器类型,请参考服务器文档了解细节。
3.3输出HTML的Servlet
大多数Servlet都输出HTML,而不象上例一样输出纯文本。
要输出HTML还有两个额外的步骤要做:
告诉浏览器接下来发送的是HTML;修改println语句构造出合法的HTML页面。
第一步通过设置Content-Type(内容类型)应答头完成。
一般地,应答头可以通过HttpServletResponse的setHeader方法设置,但由于设置内容类型是一个很频繁的操作,因此ServletAPI提供了一个专用的方法setContentType。
注意设置应答头应该在通过PrintWriter发送内容之前进行。
下面是一个实例:
HelloWWW.java
packagehall;
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclassHelloWWWextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html");
PrintWriterout=response.getWriter();
out.println("<!
DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.0"+
"Transitional//EN\">\n"+
"<HTML>\n"+
"<HEAD><TITLE>HelloWWW</TITLE></HEAD>\n"+
"<BODY>\n"+
"<H1>HelloWWW</H1>\n"+
"</BODY></HTML>");
}
}
3.4几个HTML工具函数
通过println语句输出HTML并不方便,根本的解决方法是使用JavaServerPages(JSP)。
然而,对于标准的Servlet来说,由于Web页面中有两个部分(DOCTYPE和HEAD)一般不会改变,因此可以用工具函数来封装生成这些内容的代码。
虽然大多数主流浏览器都会忽略DOCTYPE行,但严格地说HTML规范是要求有DOCTYPE行的,它有助于HTML语法检查器根据所声明的HTML版本检查HTML文档合法性。
在许多Web页面中,HEAD部分只包含<TITLE>。
虽然许多有经验的编写者都会在HEAD中包含许多META标记和样式声明,但这里只考虑最简单的情况。
下面的Java方法只接受页面标题为参数,然后输出页面的DOCTYPE、HEAD、TITLE部分。
清单如下:
ServletUtilities.java
packagehall;
publicclassServletUtilities{
publicstaticfinalStringDOCTYPE=
"<!
DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.0Transitional//EN\">";
publicstaticStringheadWithTitle(Stringtitle){
return(DOCTYPE+"\n"+
"<HTML>\n"+
"<HEAD><TITLE>"+title+"</TITLE></HEAD>\n");
}
//其他工具函数的代码在本文后面介绍
}
HelloWWW2.java
下面是应用了ServletUtilities之后重写HelloWWW类得到的HelloWWW2:
packagehall;
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclassHelloWWW2extendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html");
PrintWriterout=response.getWriter();
out.println(ServletUtilities.headWithTitle("HelloWWW")+
"<BODY>\n"+
"<H1>HelloWWW</H1>\n"+
"</BODY></HTML>");
}
}
Servlet与JSP教程(4)
四、处理表单数据
4.1表单数据概述
如果你曾经使用过Web搜索引擎,或者浏览过在线书店、股票价格、机票信息,或许会留意到一些古怪的URL,比如“http:
//host/path?
user=Marty+Hall&origin=bwi&dest=lax”。
这个URL中位于问号后面的部分,即“user=Marty+Hall&origin=bwi&dest=lax”,就是表单数据,这是将Web页面数据发送给服务器程序的最常用方法。
对于GET请求,表单数据附加到URL的问号后面(如上例所示);对于POST请求,表单数据用一个单独的行发送给服务器。
以前,从这种形式的数据提取出所需要的表单变量是CGI编程中最麻烦的事情之一。
首先,GET请求和POST请求的数据提取方法不同:
对于GET请求,通常要通过QUERY_STRING环境
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP Servlet
![提示](https://static.bdocx.com/images/bang_tan.gif)