走进Java(三)Java Servlet

来源:互联网 发布:seo分析师 编辑:程序博客网 时间:2024/06/05 00:44

一、什么是Servlet

  Servlet是在服务器上运行的小程序,一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问这个驻存在服务器内存中的Servlet程序。

  这里提出一个问题,ServletJSP?在学习J2EE的时候,初次接触了JSPJava ServerPages),这个Java服务器页面,是一个简化的Servlet设计,二者都是在服务端执行,然后返回客户端HTML文本。但二者的区别呢?发展的先后顺序呢?为什么?

 

二、生命周期

  1、客户端请求该 Servlet;

  2、加载 Servlet 类到内存;

  3、实例化并调用init()方法初始化该Servlet;

  4、执行service()方法,获得请求的信息。(根据请求方法不同调用doGet() 或者doPost(),此外还有doGet()、doPut()、doTrace()、doDelete()、doOptions());

  5destroy()销毁。


 

  Servlet只初始化一次,它是单实例,多线程使用,所以它不是线程安全的。

 

三、实现过程

  Servlet的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:

   1) 客户端发送请求至服务器端;

   2) 服务器将请求信息发送至 Servlet;

   3) Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;

   4) 服务器将响应返回给客户端。


四、Servlet相关包的介绍

  --javax.servlet.*:存放与HTTP 协议无关的一般性Servlet 类;

  --javax.servlet.http.*:除了继承javax.servlet.* 之外,并且还增加与HTTP协议有关的功能。

    所有的Servlet都必须实现javax.servlet.Servlet 接口(Interface)。

    若Servlet程序和HTTP协议无关,那么必须继承javax.servlet.GenericServlet类;

    若Servlet程序和HTTP协议有关,那么必须继承javax.servlet.http.HttpServlet 类。


  --HttpServlet:提供了一个抽象类用来创建Http Servlet。

    public voiddoGet()方法:用来处理客户端发出的 GET 请求

    public voiddoPost()方法:用来处理 POST请求 


  --javax.servlet包的接口:

    ServletConfig接口:在初始化的过程中由Servlet容器使用

    ServletContext接口:定义Servlet用于获取来自其容器的信息的方法

    ServletRequest接口:向服务器请求信息

    ServletResponse接口:响应客户端请求


  --javax.servlet包的类:

    ServletInputStream类:用于从客户端读取二进制数据

    ServletOutputStream类:用于将二进制数据发送到客户端 


  --javax.servlet.http包的接口:

    HttpServletRequest接口:提供Http请求信息

    HttpServletResponse接口:提供Http响应


五、第一个Servlet小例子

  还是习惯在IDE环境下开发,使用MyEclipse工具,建立web project。


  这个小例子包括Get方式请求和Post方式请求,如果你不能区分二者,那就以浏览地址的后缀是否带参数来区分吧。我的jsp页面:

 <body>    <h1>第一个Servlet小例子</h1>    <hr>    <a href="servlet/HelloServlet">Get方式请求</a>    <br>    <form action="servlet/HelloServlet" method="post">    <input type="submit" value="Post方式请求">    </form>      </body>
  

  HelloServlet类

//继承于HttpServletpublic class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("处理Get()请求...");PrintWriter out = resp.getWriter();//指定输出文件类型resp.setContentType("text/html;charset=utf-8");out.println("<strong>Hello Servlet!</strong><br>"); }@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("处理Post()请求...");PrintWriter out = resp.getWriter();//指定输出文件类型resp.setContentType("text/html;charset=utf-8");out.println("<strong>Hello Servlet!</strong><br>");}}
  

  最重要的就是web配置文件的配置,我一直认为,它就是一个承上启下的连接点,把浏览器的地址URL和Servlet类关联起来。

  <servlet>  <servlet-name>HelloServlet</servlet-name>  <servlet-class>servlet.HelloServlet</servlet-class>  </servlet>    <servlet-mapping>  <servlet-name>HelloServlet</servlet-name>  <url-pattern>/servlet/HelloServlet</url-pattern>  </servlet-mapping>


  还有必要解释一下配置文件吗?有点类似键值对key、value。根据截取浏览器中的URL,匹配<servlet-mapping>映射中的url,然后找到其对应的servlet-name。2个servlet-name其实是一个,根据name就可以找到要执行的Servlet类。

  希望能给Java新手解疑答惑,继续努力!


0 0