分享
 
 
 

JBuilder2005Servlet开发之开发必备

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

用Servlet可以创建协议、平台无关的Web应用程序,Applet运行于浏览器的JRE中,而Servlet则运行于Web应用服务器的Servlet容器中,Servlet没有用户图形界面,Servlet和Web应用服务器的Servlet容器交互以接收请求返回响应。请求最先由Web应用服务器的Servlet容器处理并传给Servlet,Servlet通过Web应用服务器返回响应给客户端。客户端程序可以使用任何可向Web应用服务器发送请求的语言开发。

Servlet最大的优势在于它的高性能,Servlet采用了和CGI截然不同的运行方式,首先Servlet在第一次初始化时装载并驻留在内存中,以后直接从内存中运行;其次,在默认情况下Servlet以单实例多线程的方式工作,一个新请求到达后,Servlet实例开启一个新的线程服务这个请求。

Servlet 结构和线程安全

所有的Servlet都直接或间接地实现javax.servlet.Servlet接口,这些接口规定了Servlet如何与Servlet容器进行通讯的方法,此外还定义了Servlet的生命周期。GenericServlet是和协议无关的通用Servlet,HttpServlet是专门针对HTTP协议开发的Servlet,Web应用程序的Servlet都直接继承HttpServlet。其类的继承体系如下图所示:

图 1 Servlet的类继承体系

javax.servlet.Servlet接口包括了3个控制Servlet生命周期的方法,它们分别是:

?init(ServletConfig config)方法

当Servlet初始化时,init()方法被调用执行初始化Servlet的工作,init()方法只被调用一次。Servlet初始化后就进入就绪态,随时准备响应客户端的请求。

?service(ServletRequest req, ServletResponse resp)方法

Servlet容器调用service()方法处理请求并返回响应。ServletRequest和ServletResponse作为入参传给service(),ServletRequest封装了请求的信息而ServletResponse封装了响应的信息。

?destroy()方法

Servlet容器可以在任何时候卸载Servlet,此时destory()被调用,你可以在这儿释放Servlet所占用的资源。

而javax.servlet.http包中的类用于支持HTTP协议,创建HTML网页。HTTP协议是基于请求/响应工作模式,这些HTTP的请求方式包括:

GET

POST

PUT

DELETE

HEAD

TRACE

CONNECT

OPTIONS

javax.servlet.http.HttpServlet定义了多个服务HTTP协议的方法,这些方法名为doXxx()的样式命名和HTTP请求方式名相呼应:如HTTP GET请求方式对应doGet(),而HTTP POST对应doPost()等。HttpServlet最初以service(HttpServletRequest req, HttpServletResponse resp)响应客户端请求,并依据HTTP的请求方式调用相应的doXxx()方法来处理。

一般的,你仅需要覆盖doGet()或doPost()方法,如果希望得到更多的控制,你也可以覆盖doPut()和doDelete()方法,其他的方法一般很少使用。如果你使用JBuilder的Servlet向导,你可以具体指定创建哪些方法。

特别需要指出的是Servlet是以多线程的方式工作的,Servlet可以同时处理多个请求。作为开发人员,需要注意Servlet成员变量的线程安全,在doGet()、doPost()中的局部域变量是线程安全的,而Servlet的成员变量则有线程安全的隐患。所以除非你有意需要应用这种特性,在一般情况下,不宜将一些可改写的变量定义成Servlet的成员变量,否则一定要采取线程同步的措施确保线程安全。

Servlet的特性及适用场合

虽然Servlet也可以用于生成动态网页,但这个功能已经逐渐让位给新锐JSP了,不过Servlet并没有因为江山代有才人而成为Java历史博物馆的古董,它依然身怀绝技笑傲江湖:

?自动启动

一般情况下,JSP只有在客户端第一次调用后,方才进行编译并初始化,而Servlet则可以通过web.xml的<load-on-startup配置,使其在Web容器启动时自动初始化。可使用Servlet这个特性完成Web应用程序的初始化工作:如下载字典表、控制表、初始化配置信息等,启动某个后台进程等。

?路径匹配映射

Servlet可以通过web.xml 中<servlet-mapping用通配符配置URI映射,对多个匹配的URI进行响应,而JSP只能通过一个具体的URI调用。这个特性可以使你在请求进入某个具体的页面前截获并处理它,许多Web应用框架,如Struts、Spring都利用了Servlet的这个特性,在此基础上创建构架。

?Servlet过滤器

Servlet过滤器继承于javax.servlet.Servlet并实现javax.servlet.Filter的类,在请求到达服务程序前和响应发往客户端前进行加工处理。如果有大量的页面都需要进行相同的处理,则可以使用一个Servlet过滤器对此一并处理。如你可以用Servlet过滤器进行编码转换、或者为每个页面添加一个统一的标题头等。

?Servlet监听器

J2EE定义了多个Web事件监听器接口,Servlet监听器是继承javax.servlet.Servlet并实现这些事件监听接口的类。如果Web应用服务器对某个Web容器的事件感兴趣,就可以构造一个实现该事件监听接口的Servlet,以便在该事件发生时做相应的处理。灵活使用Servlet监听器,可以使一些原来很难实现的操作变得易如反掌。

此外,如果一个动态网页的页面展现逻辑少,而业务处理逻辑多,如一个计算圆周率并返回结果页面的请求,这时使用Servlet比JSP更适合。所以需要创建一个动态网页,在到底使用Servlet还是JSP的问题上举棋不定时,请这记住下面这句经典的话:Servlet是包含HTML代码的Java程序,而JSP是包含Java代码的HTML网页。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有