|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。servlet|编程 1、概述
Servlet是一种自力于平台和协定的服务器真个Java使用程序,能够天生静态的Web页面。
Servlet是位于Web服务器外部的服务器真个Java使用程序,与传统的从命令行启动的Java使用程序分歧,Servlet由Web服务器举行加载,该Web服务器必需包括撑持Servlet的Java假造机。
JavaServlet与Applet的对照:
类似的地方:
*它们不是自力的使用程序,没有main()办法。
*它们不是由用户或程序员挪用,而是由别的一个使用程序(容器)挪用。
*它们都有一个保存周期,包括init()和destroy()办法。
分歧的地方:
*Applet具有很好的图形界面(AWT),与扫瞄器一同,在客户端运转。
*Servlet则没有图形界面,运转在服务器端。
JavaServlet与CGI(CommonGatewayInterface)的对照:
与传统的CGI和很多其他相似CGI的手艺比拟,JavaServlet具有更高的效力,更简单利用,功效更壮大,具有更好的可移植性,更节俭投资。在将来的手艺开展过程当中,Servlet有大概完全代替CGI。
*高效
在传统的CGI中,每一个哀求都要启动一个新的历程,假如CGI程序自己的实行工夫较短,启动历程所必要的开支极可能反而凌驾实践实行工夫。而在Servlet中,每一个哀求由一个轻量级的Java线程处置(而不是分量级的操纵体系历程)。
在传统CGI中,假如有N个并发的对统一CGI程序的哀求,则该CGI程序的代码在内存中反复装载了N次;而关于Servlet,处置哀求的是N个线程,只必要一份Servlet类代码。在功能优化方面,Servlet也比CGI有着更多的选择。
*便利
Servlet供应了大批的有用工具例程,比方主动地剖析息争码HTML表双数据、读取和设置HTTP头、处置Cookie、跟踪会话形态等。
*功效壮大
在Servlet中,很多利用传统CGI程序很难完成的义务都能够轻松地完成。比方,Servlet可以间接和Web服务器交互,而一般的CGI程序不克不及。Servlet还可以在各个程序之间共享数据,使得数据库毗连池之类的功效很简单完成。
*可移植性好
Servlet用Java编写,ServletAPI具有完美的尺度。因而,为IPlanetEnterpriseServer写的Servlet无需任何本色上的修改便可移植到Apache、MicrosoftIIS大概WebStar。几近一切的支流服务器都间接或经由过程插件撑持Servlet。
*节俭投资
不但有很多便宜乃至收费的Web服务器可供团体或小范围网站利用,并且关于现有的服务器,假如它不撑持Servlet的话,要加上这部分功效也常常是收费的(或只必要少少的投资)。
JavaServlet与JSP(JavaServerPages)的对照:
JavaServerPages(JSP)是一种完成一般静态HTML和静态HTML夹杂编码的手艺,JSP并没有增添任何实质上不克不及用Servlet完成的功效。可是,在JSP中编写静态HTML加倍便利,不用再用println语句来输入每行HTML代码。更主要的是,借助内容和表面的分别,页面制造中分歧性子的义务能够便利地分隔:好比,由页面计划者举行HTML计划,同时留出供Servlet程序员拔出静态内容的空间。
JavaServletAPI2.2简介
JavaServletAPI2.2的类和接口构成两个Java包,即:javax.servlet和javax.servlet.http(还包含javax.servlet.jsp包,不在本篇文章会商局限以内)。
javax.servlet包供应了把持Servlet性命周期所必须的Servlet接口,是编写Servlet时必需要完成的。
javax.servlet.http包供应了从Servlet接口派生出的专门用于处置HTTP哀求的笼统类和一样平常的工具类。一切的Servlet对象都要完成Servlet接口,年夜多半情形下是作为已完成了Servlet接口的javax.servlet.GenericServlet和javax.servlet.http.HttpServlet这两个笼统类的子类来直接完成Servlet接口。
javax.servlet包界说的类和接口:
interfaceRequestDispatcher
//界说一种对象,用于从客户承受哀求,并将哀求发送到服务器上任何指定的资本,如一个Servlet、JSP或HTML文件。
interfaceServlet
//界说了一切Servlet必需完成的办法。
interfaceServletConfig
//界说Servletconfig对象,由Servlet引擎用在Servlet初始化时,向Servlet传送信息。
interfaceServletContext
//界说了一系列办法,以便Servlet与其运转的情况通讯。
interfaceServletRequest
//界说了用于向Servlet传送客户哀求信息的对象。
interfaceServletResponse
//界说了一个对象,由Servlet用于向客户发送呼应。
interfaceSingleThreadModel
//用于包管Servlet在任一时候,只处置一个哀求。
classGenericServlet
//承继Servlet接口,界说了一个通用的,与协定有关的Servlet。
classServletInputStream
//界说了一个输出流,用于由Servlet从中读取客户哀求的二进制数据。
classServletOutputStream
//界说了一个输入流,用于由Servlet向客户发送二进制数据。
classServletException
//界说了一个当Servlet碰到成绩时能够抛出的非常。
classUnavailableException
//界说了一种非常,用于由Servlet指明它永久或临时不成用。
javax.servlet.http包界说的类和接口:
interfaceHttpServletRequest
//承继了ServletRequest接口,为HTTPServlet供应哀求信息。
interfaceHttpServletResponse
//承继了ServletResponse接口,为HTTPServlet输入呼应信息供应撑持。
interfaceHttpSession
//为保护HTTP用户的会话形态供应撑持。
interfaceHttpSessionBindingListener
//使得某对象在到场一个会话或从会话中删除时可以失掉关照。
interfaceHttpSessionContext
//由Servlet2.1界说,该对象在新版本已不被撑持。
classCookie
//用在Servlet中利用Cookie手艺
classHttpServlet
//界说了一个笼统类,承继GenericServlet笼统类,应被HTTPServlet承继。
classHttpSessionBindingEvent
//界说了一种对象,当某一个完成了HttpSessionBindingListener接口的对象被到场会话或从会//话中删除时,会收到该类对象的一个句柄
classHttpUtils
//供应了一系列便于编写HTTPServlet的办法。
上面次要先容javax.servlet.http供应的HTTPServlet使用编程接口。
HTTPServlet利用一个HTML表格来发送和吸收数据。要创立一个HTTPServlet,请扩大HttpServlet类,该类是用专门的办法来处置HTML表格的GenericServlet的一个子类。HTML表单是由和标志界说的。表单中典范地包括输出字段(如文本输出字段、复选框、单选按钮和选择列表)和用于提交数据的按钮。当提交信息时,它们还指定服务器应实行哪个Servlet(或别的的程序)。HttpServlet类包括init()、destroy()、service()等办法。个中init()和destroy()办法是承继的。
(1)init()办法
在Servlet的性命期中,仅实行一次init()办法。它是在服务器装进Servlet时实行的。能够设置服务器,以在启动服务器或客户机初次会见Servlet古装进Servlet。不管有几客户机会见Servlet,都不会反复实行init()。
缺省的init()办法一般是切合请求的,但也能够用定制init()办法来掩盖它,典范的是办理服务器端资本。比方,大概编写一个定制init()来只用于一次装进GIF图象,改善Servlet前往GIF图象和含有多个客户机哀求的功能。另外一个示例是初始化数据库毗连。缺省的init()办法设置了Servlet的初始化参数,并用它的ServletConfig对象参数来启动设置,因而一切掩盖init()办法的Servlet应挪用super.init()以确保仍旧实行这些义务。在挪用service()办法之前,应确保已完成了init()办法。
(2)service()办法
ervice()办法是Servlet的中心。每当一个客户哀求一个HttpServlet对象,该对象的service()办法就要被挪用,并且传送给这个办法一个"哀求"(ServletRequest)对象和一个"呼应"(ServletResponse)对象作为参数。在HttpServlet中已存在service()办法。缺省的服务功效是挪用与HTTP哀求的办法响应的do功效。比方,假如HTTP哀求办法为GET,则缺省情形下就挪用doGet()。Servlet应当为Servlet撑持的HTTP办法掩盖do功效。由于HttpServlet.service()办法会反省哀求办法是不是挪用了得当的处置办法,不用要掩盖service()办法。只需掩盖响应的do办法就能够了。
当一个客户经由过程HTML表单收回一个HTTPPOST哀求时,doPost()办法被挪用。与POST哀求相干的参数作为一个独自的HTTP哀求从扫瞄器发送到服务器。当必要修正服务器真个数据时,应当利用doPost()办法。
当一个客户经由过程HTML表单收回一个HTTPGET哀求或间接哀求一个URL时,doGet()办法被挪用。与GET哀求相干的参数增加到URL的前面,并与这个哀求一同发送。当不会修正服务器真个数据时,应当利用doGet()办法。
Servlet的呼应能够是以下几品种型:
一个输入流,扫瞄器依据它的内容范例(如text/HTML)举行注释。
一个HTTP毛病呼应,重定向到另外一个URL、servlet、JSP。
(3)destroy()办法
destroy()办法仅实行一次,即在服务器中断且卸装Servlet时实行该办法。典范的,将Servlet作为服务器历程的一部分来封闭。缺省的destroy()办法一般是切合请求的,但也能够掩盖它,典范的是办理服务器端资本。比方,假如Servlet在运转时会累计统计数据,则能够编写一个destroy()办法,该办法用于在未装进Servlet时将统计数字保留在文件中。另外一个示例是封闭数据库毗连。
当服务器卸装Servlet时,将在一切service()办法挪用完成后,或在指定的工夫距离事后挪用destroy()办法。一个Servlet在运转service()办法时大概会发生别的的线程,因而请确认在挪用destroy()办法时,这些线程已停止或完成。
(4)GetServletConfig()办法
GetServletConfig()办法前往一个ServletConfig对象,该对象用来前往初始化参数和ServletContext。ServletContext接口供应有关servlet的情况信息。
(5)GetServletInfo()办法
GetServletInfo()办法是一个可选的办法,它供应有关servlet的信息,如作者、版本、版权。
当服务器挪用sevlet的Service()、doGet()和doPost()这三个办法时,均必要"哀求"和"呼应"对象作为参数。"哀求"对象供应有关哀求的信息,而"呼应"对象供应了一个将呼应信息前往给扫瞄器的一个通讯路子。
javax.servlet软件包中的相干类为ServletResponse和ServletRequest,而javax.servlet.http软件包中的相干类为HttpServletRequest和HttpServletResponse。
Servlet经由过程这些对象与服务器通讯并终极与客户机通讯。Servlet能经由过程挪用"哀求"对象的办法获知客户机情况,服务器情况的信息和一切由客户机供应的信息。Servlet能够挪用"呼应"对象的办法发送呼应,该呼应是筹办发还客户机的。
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。 |
|