首页 > 开发 > 综合 > 正文

JBuilder2005 Servlet开发之开发必备

2024-07-21 02:15:18
字体:
来源:转载
供稿:网友
  用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网页。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表