JSP开发Servlet技术与应用Word文件下载.docx

上传人:b****8 文档编号:22274895 上传时间:2023-02-03 格式:DOCX 页数:37 大小:331.45KB
下载 相关 举报
JSP开发Servlet技术与应用Word文件下载.docx_第1页
第1页 / 共37页
JSP开发Servlet技术与应用Word文件下载.docx_第2页
第2页 / 共37页
JSP开发Servlet技术与应用Word文件下载.docx_第3页
第3页 / 共37页
JSP开发Servlet技术与应用Word文件下载.docx_第4页
第4页 / 共37页
JSP开发Servlet技术与应用Word文件下载.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

JSP开发Servlet技术与应用Word文件下载.docx

《JSP开发Servlet技术与应用Word文件下载.docx》由会员分享,可在线阅读,更多相关《JSP开发Servlet技术与应用Word文件下载.docx(37页珍藏版)》请在冰豆网上搜索。

JSP开发Servlet技术与应用Word文件下载.docx

Servlet接口丰富,几乎所有Web应用服务器都可以直接或通过插件支持Servlet。

(4)开发难度底

相对于其他CGI程序,Servlet技术开发难度较小,可以完成较为轻松地开发复杂的Web应用程序。

8.2Servlet与JSP的区别

JSP网页是在Html脚本中嵌入Java代码,而Servlet是在Java代码中嵌入Html脚本。

虽然JSP是Servlet技术发展的结果,但二者存在着以下三几个方面的区别。

1.编程方式不同

Servlet是服务器端的Java程序,用于接受客户端的请求并返回响应。

Servlet可以简单理解为嵌有Html代码的Java程序,它更关注程序的逻辑而非页面的展现。

JSP是Servlet技术的扩展和延伸,可以用来设计带有少量逻辑的网页。

Servlet可以简单理解为嵌有Html代码的Java程序,而JSP可以理解为嵌有Java代码的Html程序,它更关注页面的展现而非程序的逻辑。

在JSP出现之前,Servlet技术是Web应用开发的重要技术,随着JSP的出现和应用,Servlet技术将逐渐被JSP技术代替,可以说JSP是Servlet技术发展的结果,它从根本上改变了Servlet的编程方式。

在Servlet中,业务逻辑和Html代码大量搀杂在一起,给程序的维护带来了不便,给大型Web项目的开发应用带来了困难。

JSP实现了实现了页面表现和商业逻辑的分离,比较容易上手,而且开发工具丰富,可以实现快速开发。

2.运行方式不同

Servlet必须在编译后才能运行,并且Servlet在每次修改代码后都必须进行编译才能执行。

JSP在执行前必须转换为Servlet,所以JSP的运行速度比Servlet要相对慢一些,而一旦编译转换完成,以后在执行JSP代码时,如果JSP文件没有改变,则速度就大为加快,如果JSP文件有所改变,则重新将JSP文件转换为Servlet,然后再提交给客户端用户。

3.应用范围不同

JSP和Servlet技术各有所长,实际应用中可以根据工程项目的特点有所取舍,比如,如果页面的显示逻辑多些就用JSP,如果处理的业务逻辑多些就用Servlet。

随着JSP的成熟和JavaEE应用的发展,Servlet技术的应用将越来越少,尽管如此,Servlet在JavaEE应用中仍然有它的用处,如处理小型的Web应用项目,或者用来作为现在比较流行的Web设计模式MVC(Model-View-Controller)中的控制器Controller。

【要点提示】

由于Servlet与JSP十分相似,其选用的原则在某种程度上也取决于个人的爱好。

JSP并没有增加任何本质上不能用Servlet实现的功能,但在JSP中编写静态Html更加方便,不必再用println语句逐行输出Html代码。

8.3Servlet的生命周期

Servlet生命周期可以分为三个阶段:

初始阶段、服务阶段和卸载阶段,这三个阶段分别对应至三个方法:

init()、service()和destroy()。

Servlet生命周期可以分为如下三个阶段。

1.Servlet的初始阶段

当Servlet接收到客户端请求时,首先会调用的init()方法初始化Servlet应用程序。

如果您想设置Servlet的初始化信息,只要改写init()方法即可。

只要Servlet未被卸载,同一个Servlet的初始化init()方法只能执行一次。

2.Servlet的服务阶段

Servlet仅在第一次载入Servlet时调用init()方法,如果以后接收到相同的Servlet处理请求,只会调用service()方法。

当Servlet接收到客户端的请求时,会调用Servlet的service()方法予以响应。

即应在service()方法内编写相应的程序代码,来处理客户端的请求。

以下是Servlet类所定义的service()方法原型:

Publicvoidservice(ServletRequestreq,ServletResponseres)

当Servlet调用service()方法时,会传入一个ServletRequest对象与一个ServletResponse对象。

可以从ServletRequest对象获取用户的请求内容,然后将Servlet的处理结果置于ServletResponse对象。

如果开发Servlet,在HttpServlet类所定义的service()方法原型:

Publicvoidservice(HttpServletRequestreq,HttpServletResponseres)

从HttpServletRequest对象获取用户的请求内容,然后将Servlet的处理结果置于HttpServletResponse对象。

3.Servlet的卸载阶段

  当Servlet容器认定某个Servlet不再需要提供服务时,它会调用Servlet的destroy()方法卸载Servlet,并释放这个Servlet所占用的资源,此Servlet的生命周期也随之结束。

在上面的三个过程中,init()方法只被调用一次,即第一次被请求时被调用。

service()方法在每次Servlet被请求时都会被执行。

编写Servlet必须熟悉Servlet相关的类的方法。

下面的小节将介绍Servlet相关的类的方法。

8.4Servlet相关的类与方法

开发Servlet相关的程序包主要有两个,即javax.Servlet和javax.Servlet.http。

Servlet执行javax.Servlet接口,可以通过直接执行javax.Servlet接口开发Servlet,但这样通常没有必要,因为大多数Servlet是针对HTTP协议的Web服务器,这样开发javax.Servlet的办法是使用javax.Servlet.http.HttpServlet类。

对于基于HTTP协议的Web开发,只需要使用javax.Servlet.http包中的类开发即可。

当客户端请求Servlet时,服务器端将接收两个类的对象,一个是ServletRequest,描述客户端对服务器的请求,另一个是ServletResponse,描述服务器端对客户端的响应。

Servlet类一般从HttpServlet类扩展而来,并拥有一些基本的方法。

这些方法可以被处理HTTP请求的HttpServlet类中的service()方法自动地调用。

这些方法如下。

1.doGet()

用来处理HTTP的GET请求。

这个方法响应客户端请求数据时的GET方法。

该方法默认抛出ServletExecption和IOexecption异常,返回一个HTTP的READ_REQUEST错误。

doGet()方法的格式为:

protectedvoiddoGet(HttpServletRequestRequest,HttpServletResponseResponse)throwsServletExecption,IOexecption;

2.doPost()

用来处理HTTP的Post请求。

这个方法响应客户端请求数据时的Post方法。

doPost()方法的格式为:

protectedvoiddoPost(HttpServletRequestRequest,HttpServletResponseResponse)throwsServletExecption,IOexecption;

3.init()

init()方法用来完成页面的一些初始化工作,如设置变量值和连接数据库等。

当Servlet第一次被请求时,该方法会被调用,以后再次请求时则不会调用。

该方法默认抛出ServletExecption异常。

init()方法的格式为:

protectedvoidinit(ServletConfigconfig)throwsServletExecption,

IOexecption;

4.service()

service()用来处理各个客户端的请求。

该方法默认抛出ServletExecption和IOexecption异常。

service()方法的格式为:

protectedvoidservice(HttpServletRequestRequest,HttpServletResponseResponse)throwsServletExecption,IOexecption;

5.destroy()

destroy()继承自HttpServlet类。

destroy()方法的格式为:

destroy()

6.doPut()

doPut()方法用来处理HTTP的PUT请求。

doPut()方法的格式为:

protectedvoiddoPut(HttpServletRequestRequest,HttpServletResponseResponse)throwsServletExecption,IOexecption;

7.doDelete()

doDelete()方法用来处理HTTP的DELETE请求。

doDelete()方法的格式为:

protectedvoiddoDelete(HttpServletRequestRequest,HttpServletResponseResponse)throwsServletExecption,IOexecption;

8.doHead()

doHead()方法用来处理HTTP的READ请求。

doHead()方法的格式为:

protectedvoiddoHead(HttpServletRequestRequest,HttpServletResponseResponse)throwsServletExecption,IOexecption;

9.doOptions()

doOptions()方法用来处理HTTP的PUT请求。

doOptions()方法的格式为:

protectedvoiddoOptions(HttpServletRequestRequest,HttpServletResponseResponse)throwsServletExecption,IOexecption;

10.doTrace()

doTrace()方法用来处理HTTP的PUT请求。

doTrace()方法的格式为:

protectedvoiddoTrace(HttpServletRequestRequest,HttpServletResponseResponse)throwsServletExecption,IOexecption;

8.5Servlet如何处理HTTP请求

当一个HTTP请求到来时,Web服务器会将请求对象封状在一个类型为HttpServletRequest的对象中,同时创建一个类型为HttpServletRequestHttpServletResponse的对象,提供给Servlet来输出响应信息,然后服务器就会调用被请求的doXXX()方法,并将这个对象作为参数输入。

每当客户浏览器的HTTP请求到来时,该HttpServlet对象的service()方法就会被自动调用,而不是直接调用doXXX()方法。

在HttpServlet中已经存在service()方法,其缺省的功能是调用与HTTP请求的doXXX()方法。

我们在实际编程时,一般只要覆盖响应的doXXX()方法即可,而不需要编写service()方法。

8.6Servlet的应用特性

虽然Servlet也可以用于生成动态网页,但随着JSP的出现,Servlet的这个功能逐渐让位给JSP了。

但Servlet依然具有JSP所不具备的功能和特性,主要体现在以下几个方面。

1.自动启动

JSP只有在客户端调用后,才能进行编译和初始化,而Servlet可以通过web.xml文件的项进行配置,使其在Web容器启动时自动初始化。

可以使用Servlet的这个特性完成Web应用程序的初始化工作,如下载数据字典、初始化配置信息等。

2.路径匹配影射

Servlet可以通过web.xml文件中的项配置路径匹配影射,对多个匹配的URL进行响应,而JSP只能通过一个具体的URL调用。

这个特性可以使你在请求进入某个具体的页面前截获并处理它,许多Web应用框架,如Struts、Spring都利用了Servlet的这个特性,在此基础上创建构架。

3.Servlet过滤器

Servlet过滤器继承自javax.servlet.http并实现javax.servlet.Filter的类,在请求到达服务器前和响应发往客户端前进行处理。

如可以利用Servlet的这个特性,实现以下功能。

●字符编码转换:

在JSP开发应用中,经常会遇到中文字符乱码现象。

在实际应用中,处理中文字符编码转换更是频繁和麻烦,因此,可以使用Servlet编写一个字符编码转换类来解决这一问题。

●网页添加统一的标题或注脚:

很多网页需要统一的标题或脚注,可以通过Servlet过滤器在响应返回到客户端前给网页添加统一的标题或脚注。

●进行安全控制:

用户登录系统后,一般都会将用户信息保存到会话session中,可以通过过滤器在请求进入JSP或Servlet之前判断session中是否有用户信息,如果有说明用户已经登录系统,否则,说明用户还没有登录,将请求重新登录到重定向到用户登录页面。

4.Servlet监听器

Servlet监听器是继承自javax.servlet.http并实现这些事件监听借接口的类。

如果Web应用服务器对某个Web容器的事件感兴趣,就可以构造一个实现该事件监听接口的Servlet,以便在该事件发生时实现某些功能。

在Web应用开发中灵活地使用Servlet监听器,可以使原来一些很难实现的操作变的容易和快捷。

如果一个动态网页的页面逻辑少而业务逻辑多,那么使用Servlet比使用JSP更为合适,否则使用JSP比使用Servlet更为合适。

8.7创建简单的Servlet

下面通过一个简单的Servlet应用介绍一下如何创建Servlet。

Eclipse提供了一个向导,可以轻松地创建一个Servlet应用程序。

关于Eclipse开发工具的应用将在第十章详细介绍。

(1)首先在Eclipse中创建工程ServletTest。

(2)在工程ServletTest中创建名为SampleServlet的Servlet。

打开File|New|Other,在New对话框的Web项下选择Servlet,点击Next按钮,弹出CreateServlet对话框,如图8-1所示。

图8-1“OblectGallery”对话框(选择StandardServlet)

(3)在CreateServlet对话框中,Javapackage填写包的名字com,Classname填写Servlet的名字SampleServlet,SupperclassServlet填写默认的javax.servlet.http.HttpServlet,单击【Finish】按钮,完成Servlet创建。

如图8-2所示。

图8-2Eclipse向导自动生成的Servlet

(4)修改Eclipse自动生成Servlet代码为如下代码。

具体代码如例程8-1所示。

【例程8-1】SampleServlet.java

packagecom;

importjavax.servlet.*;

importjavax.servlet.http.*;

importjava.io.*;

publicclassSampleServletextendsHttpServlet{

publicvoidinit()throwsServletException{

}

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

response.setContentType("

text/html;

charset=GB2312"

);

PrintWriterout=response.getWriter();

out.println("

<

html>

"

head>

title>

SampleServlet<

/title>

/head>

body>

p>

这是一个简单的Servlet<

/p>

/body>

/html>

out.close();

}

这段代码解释如下:

●packagecom:

指明Servlet所在的包;

●importjavax.servlet.*和importjavax.servlet.http.*:

指明Servlet所需要的基本包。

所有的Servlet都必须使用javax.servlet.http接口,通常将直接继承类HttpServlet,HttpServlet封装了编写基于HTTP协议Servlet的大部分功能。

如果编写的Servlet与HTTP协议无关,那么就必须继承GenericServlet类。

●publicclassSampleServletextendsHttpServlet:

声明了SampleServle类。

通过覆盖doGet方法来响应处理HTTP的GET请求。

doGet方法有两个参数request和response,他们的类型分别是HttpServletRequest和HttpServletResponse。

HttpServletRequest、HttpServletResponse和PrintWriter都是Servlet中应用最为广泛的对象。

●response.setContentType("

):

该语句调用HttpServletResponse对象的setContentType()方法来设置中文网页字符编码。

●PrintWriterout=response.getWriter():

该语句调用HttpServletResponse对象的getWriter()方法,返回字符流对象out。

●out.println():

该语句使用out对象的println()方法将Html脚本输出,这是编写Servlet最为常用的方法。

本例运行结果如图8-3所示。

图8-3简单的Servlet

8.8部署Servlet程序

部署Servlet程序的方法有两种,一种是部署后所有的应用程序都可以使用,可以把编译后的class文件拷贝到安装目录的classes子目录下;

另一种是在部署后仅在当前应用中有效,可以把class文件拷贝到当前应用的WEB-INF/classes子目录下。

部署Servlet程序要编写web.xml文件。

一个规范的Web应用程序,在WEB-INF目录下应该有一个web.xml文件,用于对Web应用程序的属性进行设置。

在web.xml文件中,可以定义以下内容:

●Web应用项目的名称和说明。

●环境参数的初始化。

●Servlet的名称和映射。

●TagLibrary的配置。

●JSP网页的相关配置。

●MIMETYE的配置。

●错误处理。

●JNDI的配置。

这里着重介绍一下Servlet的名称和映射关系。

web.xml文件中Servlet的一般语法如下。

?

xmlversion="

1.0"

encoding="

ASCII"

>

web-appxmlns:

xsi="

http:

//www.w3.org/2001/XMLSchema-instance"

xmlns="

xmlns:

web="

xsi:

schemaLocation="

version="

2.5"

<

display-name>

Servlet描述<

/display-name>

servlet>

description>

/description>

servle

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1