JBuilder2005 Servlet开拓之开拓必备
副标题#e#
用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
#p#副标题#e#
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监听器
#p#分页标题#e#
J2EE界说了多个Web事件监听器接口,Servlet监听器是担任javax.servlet.Servlet并实现这些事件监听接口的类。假如Web应用处事器对某个Web容器的事件感乐趣,就可以结构一个实现该事件监听接口的Servlet,以便在该事件产生时做相应的处理惩罚。机动利用Servlet监听器,可以使一些本来很难实现的操纵变得易如反掌。
另外,假如一个动态网页的页面揭示逻辑少,而业务处理惩罚逻辑多,如一个计较圆周率并返回功效页面的请求,这时利用Servlet比JSP更适合。所以需要建设一个动态网页,在到底利用Servlet照旧JSP的问题上举棋不按时,请这记着下面这句经典的话:Servlet是包括HTML代码的Java措施,而JSP是包括Java代码的HTML网页。