JBuilder2005 Servlet开发之开发必备

servlet

  用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网页。

时间: 2024-09-15 08:47:21

JBuilder2005 Servlet开发之开发必备的相关文章

android 求职-Android开发求职应聘必备书籍??

问题描述 Android开发求职应聘必备书籍?? 请教各位前辈.大神,校招季已经开始了,我是应届毕业生,想找一份Android的开发工作,请问要哪些知识储备和条件,准备应聘面试有哪些经典的Android书可以看看啊?请教各路大神.前辈.小弟感激不尽!! 解决方案 第一行代码.....

VS.NET IDE(集成开发环境) 开发环境界面介绍

VS.NET IDE(集成开发环境) 开发环境界面介绍 本文章基于VS.NET BETA2版本,发行版本可能会与本文章介绍内容不同 作者:闻怡洋 http://www.vchelp.net 目录 主界面 菜单与工具条 属性窗口 帮助功能 对话框资源编辑 菜单,工具条资源编辑 图片,图标编辑 代码编辑 VS.NET的IDE环境和以前相比更加强大,而且将VC,VC#,VB的开发界面全部都集中到一起,建立一解决方案依托的代码项目组织.但新的IDE对资源要求非常高,并且目前稳定性不是很好.但我们可以相信

微信公众平台开发 JS-SDK开发(图像接口实例)

本文并非是对微信JS-SDK说明文档的复制,而是通过一个简单的例子来更深入的了解使用微信JS-SDK,具体文档请参考官方说明文档<微信JS-SDK说明文档>.微信公众平台面向开发者开放微信内网页开发工具包(微信JS-SDK),通过微信JS-SDK提供的11类接口集,开发者不仅能够在网页上使用微信本身的拍照.选图.语音.位置等基本能力,还可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 微信JS-SDK提供的11类接口(分享接口.图像接口.音频接口.智能

大数据处理-大数据 模式识别及其软件开发 数据库开发

问题描述 大数据 模式识别及其软件开发 数据库开发 这三个都是学习什么的 需要哪方面的知识 我想学习这其中一个 但是不知道需要学习哪方面知识 需要哪方面的能力 求帮助啊 还有推荐一本入门的模式识别及其软件开发的这方面的书吧 解决方案 从你所提的问题来看,似乎你还在对软件一知半解. 对不起,这句话并非含有贬意,只是客观分析,如果让你感觉不爽,很抱歉. 大数据也好,模式识别也好,都是软件行业综合应用的方向,它所需要的知识包括了很多方面,而软件开发和数据库开发则是软件从业人员的两个从业方向. 换句话说

php wamp appache-用wamp集成开发环境开发项目,项目是不是必须布置在wamp/www下面??

问题描述 用wamp集成开发环境开发项目,项目是不是必须布置在wamp/www下面?? 用wamp集成开发环境开发项目,项目是不是必须布置在wamp/www下面?? 请问这样是不是可以的,把wamp环境装在c盘,而项目在d盘? 解决方案 不是必须的.可以修改.

c++-C++ UI开发 界面开发 窗口开发

问题描述 C++ UI开发 界面开发 窗口开发 自学C++的,目前都是照着书本写程序的,书上从win32 API开始讲解,然后讲MFC 很简略,所以我只会用Winmain(win32 API)写很简单的窗体,但是win32 api写 窗口很丑,而且学win32 API主要是打基础,了解程序的运行方式, 然后呢MFC书本讲的很简单,找不到书也找不到相应MSDN, win32 API好歹有个MSDN 所以呢,C++UI开发有哪些软件呢?我要所有的软件名字好有个概念,然后求推荐其中哪个好用 解决方案

C++开发系统开发的火车票订票系统里,管理员登录,用户登录是一个窗口的么?

问题描述 C++开发系统开发的火车票订票系统里,管理员登录,用户登录是一个窗口的么? C++开发系统开发的火车票订票系统里,管理员登录,用户登录是一个窗口的么? 解决方案 一个窗口足够了,不同的角色在你的后台判断,并且开放对应的功能. 解决方案二: 这个是自己设计的,想怎么样就怎么样. 解决方案三: 一个页面重复使用,只是换了不同请求ULR,

移动开发-android开发中常用的framework 以及其应用场合

问题描述 android开发中常用的framework 以及其应用场合 在android开发的过程中 我们总会遇到这样或者那样的问题 从底层一路写过来 希望再了解android框架之后可以给我们的开发提高效率 谢谢大家了 解决方案 我对framework的理解是,做应用开发,开发出一套framework,在此基础进行app开发,就不用太操心适配的问题了. 解决方案二: 它可以复用,可以嵌入到其他activity,也可以放到viewpaper中,实现滑动翻页

在arcgis desktop10.0上安装arcobject sdk for .net framework后进行二次开发 可以开发出独立的应用平台

问题描述 在arcgisdesktop10.0上安装arcobjectsdkfor.netframework后进行二次开发可以开发出独立的应用平台,不在需要arcgis的环境. 解决方案 解决方案二:为什么我ArcGis里的arcobjectsdkfor.netframework装不起来呢?

获取手机号码-android 开发 移动开发 获取手机号

问题描述 android 开发 移动开发 获取手机号 因项目需要,需要获取本机的手机号码,找的资料试了一下不行,各位有这方面经验的大神帮个忙 telephonyManager.getLine1Number(); 这个方法是行不通的,多谢,分数不多了,不好意思 解决方案 移动的,通过这个方法可以获取得到,联通的通过发短信,监听短信也能够获取得到,就是电信的,不知道怎么去获取.. 解决方案二: 不是所有的卡都能获得号码,有的卡,电信公司没有把号码写进去,你就读不出来 解决方案三: 现在的sim卡厂商