|
|
| 了解Servlet |
作者:未知
文章来源:www.jspcn.net
访问次数:1658次
加入时间:2005年01月19日
|
|
什么是servlets ?明白Servlet API以及与CGI相比较 ?知道在servlet的主要的类的使用。 ?能够实现简单的servlets
?什么是servlet? ?一般地,服务器端Java应用程序扩展了Web服务器的功能。 .在服务器上可以完整地运行 .没有必要下载到浏览器 .代替CGI脚本 ?Servlets的优势在于: .方便性与灵活性 .安全性 .执行效率
安全性优势 ?在服务器的范围中调用 ?能够约束servlet的调用 ?在安全体系中能够成为单一(全局)信号的一部分
性能优势 ?Run in the same context as application server ?执行并且驻留在内存中 ?有请求时提前被装入或装入 ?通过HTTP请求维持对话 ?减轻后置系统的负担 ?多线程 ?可伸缩于多处理器以及多机种系统(IBM WebSphere Performance Pack)
一般的Servlet调用 ?客户建立一个Web服务请求,命名为一个Servlet,就如同URL的一部分 ?Web服务器向由一个servlet类的对象所定位的Servlet引擎发送一个请求 ?servlet引擎调用一个Servlets服务方法:
浏览器(客户)<====URL请求=====>Web服务器<===>servlet对象(应用程序服务器)
Java Servlet 应用程序接口API ?JSDK包括了两个包: javax.servlet javax.servlet.http
javax.servlet.Servlet | 实现 javax.servlet.GenericServlet A | javax.servlet.http.HttpServlet A
Servlet ?表现一项服务 ?一般通过URL请求 ?Servlets通过应用程序服务器被装入 ?在服务的初始化阶段(如果是预装入) ?在客户端首次请求时 ?在servlet重新装入时
servlet的生命周期 ?在装入时init()方法被调用 ?仅这一次 ?当每个客户发出请求时,service()方法被调用 ?当它被卸载时,destroy()方法被调用
init() | service() | destroy()
HTTP Servlet ?一个HTTP-specific请求处理器 ?加入两个HTTP-specific的方法 ?doGet()--处理一个GET请求(URL) ?doPost()--处理一个POST请求(HTML) ?子类代替了这两个信息并且可能代替init()和destroy() ?doGet()和doPost()作这些工作并且被service()调用
请求与响应 ?service(),doGet()和doPost()方法都具体有两个参数: ?HttpServletRequest--提供请求数据(参数)HttpSession信息等访问。 ?HttpServletResponse--提供允许servelt向发出请求的客户的响应的服务 ?大多数servlet程序是用来读出请求并且写入响应
HttpServletResponse ?向客户提供通讯的通道 ?允许servlet返回内容并且/或者是错误 ?设置内容头(类型,长度......) ?重定向服务器以返回一个指的URL
应答协议 ?getWriter() ?返回一个输出的PrintWriter ?setContentType(String type) ?为这个响应设置内容的类型 ?类型是MIME型 ?sendRedirect(String anURL) ?重定向浏览器到一个新的URL
简单的servelt
public class MyServlet extends HttpServlet { public void doGet( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // get stream to output HTML on! res. setContentType(" text/ html"); PrintWriter out = res. getWriter();
// send out a simple banner out. println("< HTML>< BODY>"); out. println("< h1> Hello World!</ h1>"); out. println("</ BODY></ HTML>"); } }
HttpServletRequest ?提供客户请求 ?"Getters"请求的特征,比如: ?请求头部,内容类型,长度,方法.... ?请求URL如同一个String ?Servlet"path" ?客户安全性类型 ?访问请求参数(通过name) ?请求中,数据在参与对象中的共享范围
请求协议 ?getParmeterNames() ?在HTML页上,返回一个的枚举的参数 ?getParmeterValues(String name) ?返回multi-valued参数的值 ?getParameter(String name) ?返回一个指定的命名的参数的值 ?getReader() ?返回BufferedReader到输入视图
案例: <P> Please fill out this form with your name. Thanks! <FORM METHOD=" POST" ACTION="/ servlet/ NameServlet"> <P> Please enter your name: <P> First name: <INPUT NAME=" first" TYPE=" TEXT" SIZE=" 12" MAXLENGTH=" 20"> Surname: <INPUT NAME=" surname" TYPE=" TEXT" SIZE=" 15" MAXLENGTH=" 25"> <P> Thank you! <INPUT TYPE=" SUBMIT"> <INPUT TYPE=" RESET"> </ FORM>
读入一个post public void doPost( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { … Enumeration enum = req. getParameterNames(); while (enum. hasMoreElements()) { String name = (String) enum. nextElement(); String value = req. getParameter( name); //… do something with each pair... } }
调用servelet 最普遍使用的调用HttpServlet是通过类名(classname)比如: http://www.ibm.com/servlets/com.ibm.a.Myservlet
?"load/run by classname"的支持通过另一个称为"Invoker"的servlet所提供 ?"Invoker"servlet试图找到servlet的类的路径 ?考虑到会有无名的servlet,一个servlet用这种方法装入运行 在WebSphere中的servlet ?另一方面,大多数的servlet引擎支持servlet通过名字注册 ?被使用的参数可以初始化 ?参数约束servlet的行为 ?一个servlet可以提供不同的服务(在不同的"short names") ?参数在init()方法中使用 ?允许servlet被预装入 ?通过RequestDispatcher,允许简单定位 ?允许servlet被保护
摘要 ?我们已经看到Servlets的优势大于CGI ?安全性,灵活性,效率 ?我们已经介绍了Servlet的基本类和接口 ?Servlets,GenericServlet,HttpServlet,HttpServletRequest,HttpServletResponse
VisulalAge for Java 的复习 ?首先,需要知道: ?IBM VisualAge for Java 基本概念 ?IDE ?Scrapbook ?Debugger ?VisualAge for Java与WebSphere之间的关系 ?VisualAge for Java:
?Visual Builders ?Visual Application Builder ?Enterprise Access Builder ?Data,CICS,RMI,C++ ? Many others 工具: ?IDE ?AppletViewer ?Smart Guides ?Debugger ?Browsers ?Scrapbook 类库 ?JDK1.1.7 ?JDK1.2 ?IBM Enterprise Connectivity 编译器和虚拟机 ?Incremental ?Java to byte code ?Byte code to machine code translation ?Multiple VMs 部件: ? JavaBeans ?EJB develpement environment ?WebSphere Test environment 技术支持 ?Integrated team environment ?Scaleable
集成开发环境 ?组织管理项目,类,方法 ?组队开发--聚宝库 ?导入及导出类文件到开发环境同Java文件一样 ?优化编译 ?视图:项目,类,界面,所有的问题 ?搜索,智慧向导 ?剪贴本,Debugger
|
|
|