Servlet详解---概述

来源:互联网 发布:mac 转码软件 编辑:程序博客网 时间:2024/04/29 11:09

Servlet(服务器端小程序)是使用Java语言编写的服务器端程序,可以像JSP一样,生成动态的WEB页,Servlet主要运行在服务器端,并由服务器调用执行,是一种按照Servlet标准开发的类。


Servlet程序是Java对CGI程序的实现,但是与传统CGI的多进程处理操作不同的是,Servlet采用了多线程的处理方式,这样就使得Servlet程序的运行效率比传统的CGI更高,而且Servlet还保留有Java的可移植性的特点,这样使得Servlet更容易使用,功能也更加强大。


之前所编写的JSP程序,基本上还是为了Servlet进行服务,如果说句更专业的话,从JSP的发展来看,是先产生了Servlet,之后再产生了JSP,因为Servlet的开发较为困难,所以为了JAVA技术可以走的更好,SUN公司向微软公司学习了ASP技术的特点,这才有了JSP程序,但是JSP程序在执行的时候依然是依靠*.class文件执行,所以JSP的本质依然是Servlet。

CGI公共网关接口,是一组标准,但是传统的CGI采用的是多进程的处理方式,所以性能是很差的,而Servlet采用多线程的处理方式,那么性能上是有很大提高的。


Servlet程序处理的基本流程:

1):客户端(很可能是WEB浏览器)通过HTTP提出请求。

2):WEB服务器接收该请求并将其发送给Servlet。如果这个Servlet尚未被加载,WEB服务器将把它加载到Java虚拟机并且执行它。

3):Servlet程序将接收该HTTP请求并执行某种处理。

4):Servlet会将处理后的结果向WEB服务器返回应答。

5):WEB服务器将从Servlet收到的应答发回给客户端。


 

Servlet与JSP一样,需要通过HTTP协议,并且使用web server进行数据的回应。


Servlet程序实现

在整个Servlet程序之中最重要的就是Servlet接口,在此接口下定义了一个GenericServlet的子类,但是一般不会直接继承此类,而是根据所使用的协议选择GenericServlet的子类继承。例如:现在是采用HTTP协议处理的,所以,一般而言当需要使用HTTP协议操作时,用户自定义的Servlet类都要继承HTTPServlet类。


如果要开发一个可以处理HTTP请求的Servlet程序,肯定是要继承HttpServlet类,而且在自定义的Servlet类中至少还要重写HttpServlet类中提供的doGet()方法。

Protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException。


【HelloServlet.java的内容如下:】

package com.skewrain.demo2;

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{

        PrintWriter out = resp.getWriter();

        out.println("<html>");

        out.println("<head><title>skewerain</title></head>");

        out.println("<body>");

        out.println("<h1>HELLO WORLD!!!</h1>");

        out.println("</body>");

        out.println("</html>");

        out.close();

    }

}

第一个servlet程序现在就已经开发完成了。但是,现在此Servlet并不能被外部所访问,因为还缺少了一个配置,这个配置就是映射的配置。即:每一个servlet都必须通过web.xml文件进行映射的路径指定。

    <servlet>

         <servlet-name>hello</servlet-name>

         <servlet-class>com.skewrain.demo2.HelloServlet</servlet-class>

    </servlet>

    <servlet-mapping>

         <servlet-name>hello</servlet-name>

         <url-pattern>/HelloServlet</url-pattern>

    </servlet-mapping>

以后直接在浏览器中输入HelloServlet就可以进行Servlet程序的访问了。

但是,需要注意的是,此时的Tomcat必须重新启动后以加载新的配置。


先进入虚拟目录之后,直接在地址栏输入“HelloServlet”即可。


现在的程序主要功能是让Servlet做为一个显示层的操作,但是现在的发展势头来看,Servlet基本上不会作为输出页面使用,因为太不方便了,而Servlet以后将作为一些中间的控制逻辑层使用。


当然,对于servlet本身还有一个最有意思的特点,即:可以为一个servlet配置映射名称,只需要配置多个<servlet-mapping>即可。只需将url-pattern标签中的内容修改即可。

    <servlet>

         <servlet-name>hello</servlet-name>

         <servlet-class>com.skewrain.demo2.HelloServlet</servlet-class>

    </servlet>

    <servlet-mapping>

         <servlet-name>hello</servlet-name>

         <url-pattern>/HelloServlet</url-pattern>

    </servlet-mapping>

    <servlet-mapping>

         <servlet-name>hello</servlet-name>

         <url-pattern>/hello.asp</url-pattern>

    </servlet-mapping>

也就是说,一个servlet可以映射多个名称,尤其是”*”这个路径一定要重点理解,表示任意的名称均可,以后在讲解struts的时候肯定会发现*的作用。

0 0