servlet概述以及API中文版及学习笔记综合
- 格式:doc
- 大小:190.50 KB
- 文档页数:28
1、Servlet概述:Servlet是运行在Web服务器或应用服务器上的Java程序,是Java Web应用程序的核心组件之一,是Java EE的重要组成部分,是在Web上创建动态内容的有效而强大的解决方案之一。
与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web 服务器必须包含支持Servlet的Java虚拟机。
Servlet以线程的方式运行,具有Java语言的特性。
2、Servlet API(应用程序编程接口):Servlet API是原sun公司定义的一套专门用于开发Servlet程序的Java类和接口。
Web容器和Servlet程序之间通过ServletAPI进行通信。
Servlet API类和接口的框图如下:3、Servlet的部署:(1)、在tomcat安装目录中的webapps目录中新建/hello/WEB-INF/classes路径,在WEB-INF 目录中编写web.xml如下:<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><servlet><servlet-name>hello</servlet-name><servlet-class>HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping></web-app>(2)、编写Servlet源程序,保存名为HelloServlet.java:import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HelloServlet extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//doGet方法处理get方式的请求。
servlet知识点总结servlet:运⾏在服务器端的⼩程序Servlet是⼀个接⼝,定义⾃⼰的servlet实现接⼝⼊门:1、创建⼀个Myservlet 实现servlet接⼝复写⽅法2、在init(),service(),destroy()⽅法中添加输出语句3、在web.xml中注册我们创建的servlet<servlet><servlet-name>MyServlet</servlet-name><servlet-class>com.xmcc.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/myServlet</url-pattern></servlet-mapping>servlet的⽣命周期:init(), 第⼀次访问servlet的时候调⽤(初始化)service(),每⼀个访问都会调⽤,(处理请求和响应)destroy(),服务器关闭执⾏原理:1、当服务器接收到客户端浏览器的请求后,会解析URL路径,获取到访问的Servlet的资源路径2、拿到资源路径通过web.xml⽂件进⾏查找,是否有对应的url-pattern3、如果有,则查找对应的servlet-class 获取全路径名4、tomcat会将字节码⽂件加载进内容,并创建对象5、调⽤⽅法注意:通过web.xml⽅式配置servlet是web3.0版本以前常⽤的⽅式那么在3.0版本后,使⽤注解的⽅式代替配置⽂件servlet注解⽅式:@WebServlet(value="/myServlet1",name = "MyServlet1")String name() default ""; 名字String[] value() default {}; 访问路径String[] urlPatterns() default {}; 访问路径int loadOnStartup() default -1; 启动时机WebInitParam[] initParams() default {}; 初始化参数loadOnStartup:servlet初始化时机默认是第⼀次访问servlet的时候初始化这个时候loadOnStartup值为-1servlet重要的对象:ServletConfig:servlet配置对象1、获取取当前servlet的名字2、获取当前servlet的初始化数据3、获取servletContext对象(域对象)ServletContext: 上下⽂对象(全局管理者,整个项⽬共享的对象)每个web项⽬启动的时候,都会创建⼀个servletContext对象,servletContext会随着web的启动⽽创建销毁则销毁1、数据共享setAttribute()getAttribute()removeAttribute()2、获取⽂件的真实路径getRealPath()3、以流的形式返回⽂件getResourceAsStream()4、获取web的初始化参数在web.xml的根⽬录下⾯进⾏配置<context-param><param-name></param-name><param-value></param-value></context-param>context.getInitParameter()request:请求:处理请求相关response:响应:处理响应相关什么是请求浏览器,访问服务器,什么是响应服务器,反馈浏览器request:域对象(⼀次请求)getParameter():获取单个数据(input框)getParameterValues();获取多个数据(checkedbox)getParameterMap():获取所有的参数key:name值value:name对应的value值获取请求头信息:request.getHeader("")获取请求⽅式:request.getMethod();获取项⽬路径:getContextPath();//请求转发:request.getRequestDispatcher("/hello.html").forward(request,response );地址栏不变,页⾯发⽣跳转如果发⽣了请求转发,还是⼀次请求路径相关;内部路径;直接写资源相对:./ ../绝对:带主机和协议的路径(访问站外资源)不带主机和协议的路径(最常⽤的)/项⽬名/资源路径response对象:响应码(状态码):200 成功404:访问的资源不存在500:服务器代码有问题304:读缓存302:重定向常⽤⽅法://设置编码response.setContentType("text/html;charset=utf-8");//回写数据response.getWriter().print("我已收到请求");getOutputStream():获取字节流注意:两个流是互斥的不能同时存在⾃⼰写的:字符流其他所有:字节流sendRedirect():重定向页⾯发⽣跳转地址栏要发⽣改变,两次请求请求转发和重定向的区别:1、重定向2次请求,请求转发1次请求2、重定向地址栏变化,请求转发地址栏不变3、重定向转发通过浏览器,请求转发通过服务器内部4、重定向可以访问站外资源(除开当前服务器以外),请求转发不能访问站外资源了解:setHeader(); 设置响应头addHeader();添加响应头,如果有就覆盖,没有就添加响应头:location:配合状态码实现重定向refresh:刷新cookie:⼩饼⼲Content-Disposition:下载相关//重定向⽅式⼀:sendRedirect():⽅式⼆:response.setStatus(302);response.setHeader("location", "/myServlet6");。
servlet概述Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。
它担当Web浏览器或其他HTTP客户程序发出请求,与HTTP服务器上的数据库或应用程序之间的中间层。
Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet 的Java虚拟机。
servlet由来servlet是在服务器上运行的小程序。
这个词是在Java applet的环境中创造的,Java applet 是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。
服务器上需要一些程序,常常是根据用户输入访问数据库的程序。
这些通常是使用公共网关接口(CGI)应用程序完成的。
然而,在服务器上运行Java,这种程序可使用Java编程语言实现。
在通信量大的服务器上,Java servlet的优点在于它们的执行速度更快于CGI 程序。
各个用户请求被激活成单个程序中的一个线程,而创建单独的程序,这意味着各个请求的系统开销比较小。
Java Servlet 与Applet 的比较相似之处:* 它们不是独立的应用程序,没有main()方法。
%* 它们不是由用户或程序员调用,而是由另外一个应用程序(容器)调用。
* 它们都有一个生存周期,包含init()和destroy()方法。
不同之处:* Applet具有很好的图形界面(AWT),与浏览器一起,在客户端运行。
* Servlet 则没有图形界面,运行在服务器端。
与传统CGI的比较Java Servlet 与CGI(Common Gateway Interface) 的比较:与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。
Servlet API 中文版基本类和接口一、javax.servlet.Servlet接口servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理的方法集。
Servlet接口的基本目标是提供生命周期方法init()、service()和destroy()方法。
servlet接口中的方法void init(ServletConfit config)throws ServletException 在servlet被载入后和实施服务前由servlet引擎进行?次性调用。
如果init()产生溢出UnavailableException,则 servle退出服务。
ServletConfig getServletConfig()返回传递到servlet的init()方法的ServletConfig对象Void service(ServletRequest request, ServletResponse response)throws ServletException,IOException处理request对象中描述的请求,使用response对象返回请求结果String getServletInfo()返回描述servlet的一个字符串void destory()当servlet将要卸载时由servlet引擎调用二、javax.servlet.GenericServlet类(协议无关版本)GenericServlet是一种与协议无关的servlet,是一种跟本不对请求提供服务的servlet,而是简单地从init()方法启动后台线程并在destory()中杀死。
它可以用于模拟操作系统的端口监控进程。
servlet API提供了Servlet接口的直接实现,称为GenericServlet。
此类提供除了service()方法外所有接口中方法的缺省实现。
Servlet学习笔记(一)1.一个Servlet程序就是一个实现了特殊接口的Java类,它由支持servlet(具有servlet引擎)的web服务器调用和启动运行。
一个Servlet程序负责处理它所对应的一个或一组url地址的访问请求,并接收客户端发出的访问请求信息和产生响应内容。
2.所有的servlet(自定义的)都必须实现servlet接口(javax.servlet.Servlet)。
由于Servlet接口中有很多方法不需要实现,因此可以继承GenericServlet类。
GenericServlet实现了servlet接口的基本特征和功能。
javax.servlet.http.HTTPServlet类继承了GenericServlet类,并在其基础上进行了一些对HTTP 协议的扩充。
3.客户端每次访问一个支持HTTP的Servlet程序时,Servlet引擎都将调用Servlet的service 方法来进行处理。
HTTPServletRequest用于封装HTTP请求,HTTPServletResponse用于封装HTTP响应。
HTTPServletResponse对象的getWrite()方法可以获得一个文本输出流对象。
其内容可以作为响应消息的内容。
4.Servlet的注册与运行:(1).Servlet程序必须通过Servlet引擎来启动运行,并且存储目录有特殊要求,通常需要存储在<Web应用程序>/WEB-INF/classes/目录中。
(2).Servlet程序必须在Web应用程序的web.xml文件中进行注册和映射其访问路径,才可以被servlet引擎加载和被外界访问。
(3).<servlet>元素用于注册一个servlet。
<servlet-name>用于设置注册名,<servlet-class>用于设置servlet的完整路径。
Servlet第一天2007年6月21日一、简述1、Servlet,服务器端的小程序,它是相对于Applet而言的,Applet是客户端小程序。
Servlet,是接受来自网络的请求(form表单,以及其他的请求),并对不同请求作出不同的响应Servlet,是基于Http协议的,是运行在web服务器中的程序。
这里要提出一个容器的概念。
servlet是运行在web容器中,在后面会详细地讲解,这个web容器可以控制Servlet对象的生命周期,控制请求由Servlet对象处理。
2、web服务器,这里的服务器不是硬件概念,而是软件,常用的web服务器有Tomcat,Jboss 等,我们所用到的Tomcat是一个开源的服务器,Tomcat是一个用java语言编写的web服务器,所以需要有相应的java运行环境,也就是JVM,还要配置tomcat的具体路径。
二、Tomcat的配置JA V A_HOME=/XXX/XXX/(JDK路径,bin的上一层目录)CA TALINA_HOME=/XXXX/XXX(tomcat的绝对路径windows中X:\xxx\xxx)在启动Tomcat时,是运行Tomcat的bin目录下的startup.sh(windows中使用startup.bat)判断Tomcat是否启动成功,可以在浏览器的地址栏中使用http://localhost:8080/或http://127.0.0.1:8080/可以访问到tomcat的主页就是启动成功了。
要想停止tomcat服务器要使用shutdown.sh(windows中使用shutdown.bat),如果直接关闭启动窗口,就会造成8080端口占用错误,这时可以在使用shutdown.sh关闭一下服务器。
startup.sh,shutdown.sh,shutdown.bat,startup.bat这些文件其实是一些脚本文件用来执行大量的命令,也就是大量java命令。
一、Servlet基础1、什么是servlet?2、servlet的优点?3、什么是servlet容器?4、怎么写一个servlet?二、Servlet核心1、核心的接口与类ServletGenericServletHttpServletServletRequest,ServletResponseHttpServletRequest,HttpServletResponseServletConfigServletContext2、HttpServletRequest,HttpServletResponse的常用方法request.getParameter();request.getParameterValues();request.getSession(); request.getSession(boolean);request.getRequestURI();request.setAttribute(), getAttribute(),removeAttribute(); request.getRequestDispatcher();request.setCharacterEncoding();request.getCookies();response.getWriter();response.setContentType();response.sendRedirect();response.encodeURL(), encodeRedirectURL();response.addCookie();3、表单处理(1)如何获得表单中数据(2)表单中,有中文,如何处理(3)表单的提交方式4、比较get,post提交方式链接、表单默认提交方式、地址栏直接输入:get方式对于method="post" 是post方式。
此外,还要知道两者之间的不同,查笔记。
5、重定向与转发(1)什么是重定向、重定向的特点(2)编程(3)什么是转发,转发的特点(4)转发的编程(5)比较二者之间的不同。
servlet总结Servlet是Java编写的服务器端编程技术,用于处理HTTP请求和响应。
它被广泛应用于Web开发领域,具有高效、可靠、可扩展的特点。
本文将对Servlet进行总结,介绍它的基本概念、工作原理、生命周期以及常见应用场景。
一、Servlet的基本概念Servlet是Java语言编写的服务器端组件,可以接收和处理客户端(如浏览器)发送的HTTP请求,并返回相应的HTTP响应。
它是Java EE(Enterprise Edition)规范中定义的一种接口,开发者可以实现这个接口以实现自己的Servlet类。
通过Servlet容器(如Tomcat)的支持,Servlet能够运行在Web服务器上,与客户端进行通信。
二、Servlet的工作原理当客户端发送HTTP请求到服务器时,Servlet容器接收到这个请求并创建一个Servlet实例。
然后,Servlet容器调用Servlet的生命周期方法来处理这个请求,常用的生命周期方法包括init()、service()和destroy()。
在service()方法中,Servlet根据请求的类型(GET、POST 等)执行相应的操作,并生成HTTP响应返回给客户端。
三、Servlet的生命周期Servlet的生命周期可以分为三个阶段:初始化、处理请求和销毁。
1. 初始化阶段:当Servlet容器接收到请求时,会先调用Servlet的init()方法,用于初始化Servlet的资源。
开发者可以在这个方法中进行一些配置操作,例如读取配置文件、建立数据库连接等。
2. 处理请求阶段:当初始化完成后,Servlet容器会调用Servlet的service()方法来处理请求。
在这个方法中,开发者可以编写处理业务逻辑的代码,如根据请求类型执行相应的操作、从请求中提取参数等。
这个方法可以根据实际需求多次调用。
3. 销毁阶段:当Servlet容器关闭或重启时,会调用Servlet的destroy()方法,用于释放资源和清理工作。
JavaEE API 中文手册一、介绍JavaEE(Java Enterprise Edition)是Java平台上用于开发企业级应用程序的一系列API的集合。
它提供了许多标准的、通用的企业级应用程序开发的API接口,使得开发人员可以更加方便地构建可伸缩、可靠和安全的应用程序。
本文将全面介绍JavaEE API,并提供对各个API的详细解释和使用示例。
二、Servlet API1. 概述Servlet API是JavaEE中用于处理HTTP请求和生成HTTP响应的标准API。
它提供了一种用于生成动态内容的通用方法,并可以与Web服务器进行交互。
2. 核心接口Servlet API包含了一些核心的接口,如下:•Servlet:Servlet是与客户端交互的Java类。
它处理来自客户端的请求,并生成相应的响应。
开发人员需要实现这个接口来创建自己的Servlet。
•ServletRequest:ServletRequest是Servlet请求对象的抽象表示。
它提供了访问请求参数、请求头和其他与请求相关的信息的方法。
•ServletResponse:ServletResponse是Servlet响应对象的抽象表示。
它提供了向客户端发送响应的方法,如发送数据、设置响应头等。
3. 使用示例下面是一个简单的Servlet示例,展示如何接收请求并生成响应:import javax.servlet.*;import javax.servlet.http.*;import java.io.IOException;import java.io.PrintWriter;public class HelloWorldServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse respo nse) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<html>");out.println("<head><title>Hello World</title></head>");out.println("<body>");out.println("<h1>Hello World!</h1>");out.println("</body></html>");}}该示例中,我们创建了一个继承自HttpServlet的Servlet类,并重写了doGet方法来处理GET请求。
背景知识介绍J2EE的13种技术java->servlet->jsp [技术总是有一个演变过程]zip粘贴到word设置回顾一下我们现有的技术java 基础(面向对象,集合,界面,线程,文件,网络)jdbc (java 的数据库编程)oracle / mysql / sqlserverhtml css javascript (web 开发) ->网页设计xmlserlvet+jsp ->java web开发[使用java技术做 web开发]java ee 体系的介绍servlet项目演示web 开发介绍①静态页面 (html)②动态页面1.用户可以输入数据,和页面交互(注册,购物,发帖子,付款...)2.不同时间打开页面,内容是变化.3.目前比较流行的左动态页面的技术 ( servlet/jsp , php , , asp, cgi )动态网页技术的比较(了解)bs 和 cs的比较(1)BS:browser server 浏览器服务器(2)cs client server 客户服务为什么需要的web服务器/web究竟是干什么的模拟一个web服务器import .*;import .*;public class MyWebServer{public static void main(String []args) throws Exception{ServerSocket ss=new ServerSocket(80);Socket s=();.");OutputStream os=();BufferedReader br=new BufferedReader(new FileReader("d:\\"));String buf="";while((buf=())!=null){());}到conf/ 文件中修改<Connector connectionTimeout="20000" port="8088"(去修给config->的端口号)protocol="" redirectPort="8443"/>(3) 能够正常启动,但是会导航到另外一个页面.去修改工具->管理加载项,把默认的导航给禁用即可.(4) 在访问 tomcat时候,一定保证 tomcat 服务器是启动tomcat的目录结构文件bin: 启动和关闭tomcat的bat文件conf: 配置文件--> : 该文件用于配置和 server 相关的信息, 比如 tomcat启动端口后,配置Host, 配置Context 即web应用--> : 该文件配置与 web应用(web应用就相当于是一个 web站点)-->: 该文件用户配置tomcat 的用户密码和权限lib目录: 该目录放置运行tomcat 运行需要的jar包logs目录:存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息.webapps目录: 该目录下,放置我们的web应用(web 站点), 比如:建立 web1 目录下面放置我们的html 文件 jsp 文件..图片... 则 web1就被当做一个web应用管理起来(☞特别说明tomcat 以后支持 tomcat 5 版本还有别的设置)work: 工作目录: 该目录用于存放jsp被访问后生成的对应的 server文件和.class文件如何去访问一个 web 应用的某个文件首页面设置及目录规范结构现在我们要求:把文件设置成该 web应用的首页,则需要把web应用的目录格式做的更加规范:①在web文件夹下配置WEB-INF文件夹②在文件中添加配置的代码:<welcome-file-list><welcome-file></welcome-file></welcome-file-list>③通过 classes目录将来是存放 class文件lib 目录将来时存放 jar文件配置当前这个web应用的信息.tomcat如何去管理虚拟目录需求: 当我们把 web 应用放到 webapps目录,tomcat会自动管理,如果我们希望tomcat 可以管理其它目录下的web应用->虚拟目录配置我在d 盘有一个web应用.虚拟目录配置步骤:①找到文件②编辑host节点添加Context path在中添加:<Context path="/myweb2" docBase="d:\web2"/>myweb2:是访问时输入的web名,实际取出的是web2中的资源"d:\web2":绝对路径下web2中存放资源如:实际访问时输入的地址:需要重启tomcat,才能生效.(因为是采用的dom技术讲信息加载到内存中)context 的几个属性的说明path:docbase:reloadable ;如果设为ture ,表示 tomcat 会自动更新 web应用,这个开销大,建议在开发过程中,可以设为true, 但是一旦真的发布了,则应当设为false;upackWAR: 如果设为 ture ,则自动解压,否则不自动解压.①:打war包 cd:d/web2 然后jar –cvf *②:浏览打好的war包 Deploy发布后会在webapps中自动生存改文件配置域名我们看和一个如何配置自己的主机名:我们在实际访问网站的过程中,不可能使用应用/资源名的方式去访问网站,实际上使用类似或者的方式去访问网站,这个又是怎么实现的呢看看ie浏览器访问一个web站点的流程.实现的步骤如下:(1) 在C:\WINDOWS\system32\drivers\etc 下的host文件添加在tomcat 的文件添加主机名<Host name="" appBase="d:\web3”><Context path="/" docBase="d:\web3" /></Host>(3) 在d:\web3 加入了一个 /WEB-INF/ 把设为首页面如果连端口都不希望带,则可以吧tomcat的启动端口设为80即可.(4) 重启生效tomcat体系的再说明图:如何配置默认主机:在tomcat/conf/ 文件<Engine name="Catalina" defaultHost="主机名">为什么需要servlet技术比如需求:我们希望用户可以贴,用户还可以回复 ....这样一些和用户可以交互的功能,用普通的java技术就完成不了, sun 就开发了 servlet技术供程序员使用.servlet的介绍①servlet 其实就是java程序(java类)②该 java 程序(java 类)要遵循servlet开发规范③serlvet是运行在服务端④serlvet 功能强大,几乎可以完成网站的所有功能⑤是学习jsp基础tomcat 和 servlet 在网络中的位置servlet的生命周期是怎样的/servlet究竟是怎样工作的UML 时序图帮助大家理解参看execel面试题: 请简述servlet的生命周期(工作流程)答:标准版本:①WEB服务器首先会检查是否已经装载并创建了该servlet实例对象。
servlet概述Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。
它担当Web浏览器或其他HTTP客户程序发出请求,与HTTP服务器上的数据库或应用程序之间的中间层。
Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet 的Java虚拟机。
servlet由来servlet是在服务器上运行的小程序。
这个词是在Java applet的环境中创造的,Java applet 是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。
服务器上需要一些程序,常常是根据用户输入访问数据库的程序。
这些通常是使用公共网关接口(CGI)应用程序完成的。
然而,在服务器上运行Java,这种程序可使用Java编程语言实现。
在通信量大的服务器上,Java servlet的优点在于它们的执行速度更快于CGI 程序。
各个用户请求被激活成单个程序中的一个线程,而创建单独的程序,这意味着各个请求的系统开销比较小。
Java Servlet 与Applet 的比较相似之处:* 它们不是独立的应用程序,没有main()方法。
* 它们不是由用户或程序员调用,而是由另外一个应用程序(容器)调用。
* 它们都有一个生存周期,包含init()和destroy()方法。
不同之处:* Applet具有很好的图形界面(AWT),与浏览器一起,在客户端运行。
* Servlet 则没有图形界面,运行在服务器端。
与传统CGI的比较Java Servlet 与CGI(Common Gateway Interface) 的比较:与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。
在未来的技术发展过程中,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编写,Servlet API具有完善的标准。
因此,为IPlanet Enterprise Server 写的Servlet无需任何实质上的改动即可移植到Apache、Microsoft IIS或者WebStar。
几乎所有的主流服务器都直接或通过插件支持Servlet。
* 节省投资不仅有许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。
Java Servlet 与JSP 的比较JavaServer Pages(JSP) 是一种实现普通静态HTML和动态HTML混合编码的技术,JSP 并没有增加任何本质上不能用Servlet实现的功能。
但是,在JSP中编写静态HTML更加方便,不必再用println语句来输出每一行HTML代码。
更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计者进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。
HTTP Servlet应用编程接口HTTP Servlet 使用一个HTML 表格来发送和接收数据。
要创建一个HTTP Servlet,请扩展HttpServlet 类,该类是用专门的方法来处理HTML 表格的GenericServlet 的一个子类。
HTML 表单是由<FORM> 和</FORM> 标记定义的。
表单中典型地包含输入字段(如文本输入字段、复选框、单选按钮和选择列表)和用于提交数据的按钮。
当提交信息时,它们还指定服务器应执行哪一个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() 方法service() 方法是Servlet 的核心。
每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。
在HttpServlet 中已存在service() 方法。
缺省的服务功能是调用与HTTP 请求的方法相应的do 功能。
例如,如果HTTP 请求方法为GET,则缺省情况下就调用doGet() 。
Servlet 应该为Servlet 支持的HTTP 方法覆盖do 功能。
因为HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖service() 方法。
只需覆盖相应的do 方法就可以了。
Servlet的响应可以是下列几种类型:一个输出流,浏览器根据它的内容类型(如text/HTML)进行解释。
一个HTTP错误响应, 重定向到另一个URL、servlet、JSP。
(3)doGet()方法当一个客户通过HTML 表单发出一个HTTP GET请求或直接请求一个URL时,doGet()方法被调用。
与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。
当不会修改服务器端的数据时,应该使用doGet()方法。
(4)doPost()方法当一个客户通过HTML 表单发出一个HTTP POST请求时,doPost()方法被调用。
与POST请求相关的参数作为一个单独的HTTP 请求从浏览器发送到服务器。
当需要修改服务器端的数据时,应该使用doPost()方法。
(5) destroy() 方法destroy() 方法仅执行一次,即在服务器停止且卸装Servlet 时执行该方法。
典型的,将Servlet 作为服务器进程的一部分来关闭。
缺省的destroy() 方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。
例如,如果Servlet 在运行时会累计统计数据,则可以编写一个destroy() 方法,该方法用于在未装入Servlet 时将统计数字保存在文件中。
另一个示例是关闭数据库连接。
当服务器卸装Servlet 时,将在所有service() 方法调用完成后,或在指定的时间间隔过后调用destroy() 方法。
一个Servlet 在运行service() 方法时可能会产生其它的线程,因此请确认在调用destroy() 方法时,这些线程已终止或完成。
(6) GetServletConfig()方法GetServletConfig()方法返回一个ServletConfig 对象,该对象用来返回初始化参数和ServletContext。
ServletContext 接口提供有关servlet 的环境信息。
(7) GetServletInfo()方法GetServletInfo()方法是一个可选的方法,它提供有关servlet 的信息,如作者、版本、版权。
当服务器调用sevlet 的Service()、doGet()和doPost()这三个方法时,均需要"请求"和"响应"对象作为参数。
"请求"对象提供有关请求的信息,而"响应"对象提供了一个将响应信息返回给浏览器的一个通信途径。
javax.servlet 软件包中的相关类为ServletResponse和ServletRequest,而javax.servlet.http 软件包中的相关类为HttpServletRequest 和HttpServletResponse。
Servlet 通过这些对象与服务器通信并最终与客户机通信。
Servlet 能通过调用"请求"对象的方法获知客户机环境,服务器环境的信息和所有由客户机提供的信息。
Servlet 可以调用"响应"对象的方法发送响应,该响应是准备发回客户机的。
Servlet API 中文版基本类和接口一、javax.servlet.Servlet接口servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理的方法集。
Servlet接口的基本目标是提供生命期方法init()、service()和destroy()方法。
servlet接口中的方法void init(ServletConfit config)throws ServletException 在servlet被载入后和实施服务前由servlet引擎进行?次性调用。