zoukankan      html  css  js  c++  java
  • Servlet概述

    Servlet概述

    学号:201631062509

    姓名:杨菓

    1.Servlet 是什么?

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

    使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

    Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:

    • 性能明显更好。
    • Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
    • Servlet 是独立于平台的,因为它们是用 Java 编写的。
    • 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
    • Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。

    2.Servlet 架构

    下图显示了 Servlet 在 Web 应用程序中的位置。

    Servlet 架构

    3.Servlet 任务

    Servlet 执行以下主要任务:

    • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
    • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
    • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
    • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
    • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

    4.Servlet 包

    Java Servlet 是运行在带有支持 Java Servlet 规范的解释器的 web 服务器上的 Java 类。

    Servlet 可以使用 javax.servletjavax.servlet.http 包创建,它是 Java 企业版的标准组成部分,Java 企业版是支持大型开发项目的 Java 类库的扩展版本。

    这些类实现 Java Servlet 和 JSP 规范。在写本教程的时候,二者相应的版本分别是 Java Servlet 2.5 和 JSP 2.1。

    Java Servlet 就像任何其他的 Java 类一样已经被创建和编译。在您安装 Servlet 包并把它们添加到您的计算机上的 Classpath 类路径中之后,您就可以通过 JDK 的 Java 编译器或任何其他编译器来编译 Servlet。

    5.环境设置

    已经在上一个作业中设置过环境,所以就不再阐述。

    6.Servlet 生命周期

    Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

    • Servlet 通过调用 init () 方法进行初始化。
    • Servlet 调用 service() 方法来处理客户端的请求。
    • Servlet 通过调用 destroy() 方法终止(结束)。
    • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

    架构图

    下图显示了一个典型的 Servlet 生命周期方案。

    • 第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
    • Servlet 容器在调用 service() 方法之前加载 Servlet。
    • 然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。
    Servlet 生命周期

    7.工作原理

    Tomcat容器—>Servlet容器—>Context容器

     

      所以,真正管理 Servlet 的容器是 Context 容器,一个 Context 对应一个 Web 工程(非用户),新建一个servlet的时候,就会新建一个context的,同时加载它所需要的config,容器的配置属性由应用的 web.xml 指定。tomcat是基于观察者模式设计的,
    与 Servlet 主动关联的是三个类,分别是 ServletConfig、ServletContext 、ServletRequest 和 ServletResponse。这三个类都是通过容器传递给 Servlet 的。ServletConfig:获取这个 Servlet 的一些配置属性。ServletContext :交易场景就由 ServletContext 来描述,而定制的参数集合就由 ServletConfig 来描述。
    启动tomcat时,Servlet容器被创建,每一个web应用都会对应于一个context容器。客户端发起了一次请求的时候,请求根据url地址指定的ip和端口号就能够找到tomcat服务器,然后根据后面工程名也能找到对应的web服务,此时创建一个线程,根据ServletRequest进行请求的发起,servlet只是作为控制器而存在,然后根据页面的请求内容,查找相应的服务,将结果通过servletResonse返回给客户端。注意这里是每个请求一个线程,不是每个用户一个线程,容器并不关心是谁发起的请求。servlet一般只会存在一个实例,是单例模式设计的,如果容器使用了群集,即将容器布置在多个JVM上,那么每个JVM也只会有一个Servlet实例。

    1、Web Client 向Servlet容器(Tomcat)发出Http请求

    2、Servlet容器接收Web Client的请求

    3、Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中

    4、Servlet容器创建一个HttpResponse对象

    5、Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数

         传给 HttpServlet对象

    6、HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息

    7、HttpServlet调用HttpResponse对象的有关方法,生成响应数据

    8、Servlet容器把HttpServlet的响应结果传给Web Client

    8.实例

    下面是 Servlet 输出 Hello World 的示例源代码:

    // 导入必需的 java 库
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    // 扩展 HttpServlet 类
    public class HelloWorld extends HttpServlet {
     
      private String message;
    
      public void init() throws ServletException
      {
          // 执行必需的初始化
          message = "Hello World";
      }
    
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
                throws ServletException, IOException
      {
          // 设置响应内容类型
          response.setContentType("text/html");
    
          // 实际的逻辑是在这里
          PrintWriter out = response.getWriter();
          out.println("<h1>" + message + "</h1>");
      }
      
      public void destroy()
      {
          // 什么也不做
      }
    }

    编译 Servlet

    让我们把上面的代码写在 HelloWorld.java 文件中,把这个文件放在 C:ServletDevel(在 Windows 上)或 /usr/ServletDevel(在 UNIX 上)中,还需要把这些目录添加到 CLASSPATH 中。

    进入 ServletDevel 目录,并编译 HelloWorld.java,如下所示:

    $ javac HelloWorld.java

    如果 Servlet 依赖于任何其他库,必须在 CLASSPATH 中包含那些 JAR 文件。在这里,只包含了 servlet-api.jar JAR 文件,因为没有在 Hello World 程序中使用任何其他库。

    该命令行使用 Sun Microsystems Java 软件开发工具包(JDK)内置的 javac 编译器。为使该命令正常工作,您必须 PATH 环境变量中使用的 Java SDK 的位置。

    如果一切顺利,上面编译会在同一目录下生成 HelloWorld.class 文件。

    Servlet 部署

    默认情况下,Servlet 应用程序位于路径 <Tomcat-installation-directory>/webapps/ROOT 下,且类文件放在 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中。

    有一个完全合格的类名称 com.myorg.MyServlet,那么这个 Servlet 类必须位于 WEB-INF/classes/com/myorg/MyServlet.class 中。

    现在,把 HelloWorld.class 复制到 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中,并在位于 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/ 的 web.xml 文件中创建以下条目:

    <web-app>      
        <servlet>
            <servlet-name>HelloWorld</servlet-name>
            <servlet-class>HelloWorld</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>HelloWorld</servlet-name>
            <url-pattern>/HelloWorld</url-pattern>
        </servlet-mapping>
    </web-app>

    上面的条目要被创建在 web.xml 文件中的 <web-app>...</web-app> 标签内。

    使用 <Tomcat-installation-directory>instartup.bat(在 Windows 上)或 <Tomcat-installation-directory>/bin/startup.sh(在 Linux/Solaris 等上)启动 tomcat 服务器,最后在浏览器的地址栏中输入 http://localhost:8080/HelloWorld

    得到结果:

    Servlet 实例
  • 相关阅读:
    把自己电脑搭建为服务器(免费内网穿透心得)
    多态复习
    hadoop 第一个 mapreduce 程序(对MapReduce的几种固定代码的理解)
    Anaconda下的 Jupyter Notebook 安装 多python环境
    C++读写内存工具类X64 X86
    VS中MFC项目文件特别大的解决办法
    python记事本实现查询替换
    java格式化代码(java格式化代码工具类)
    Vue 之 slot(插槽)
    Vue全家桶之——Vuex
  • 原文地址:https://www.cnblogs.com/Yy-Gg/p/10607203.html
Copyright © 2011-2022 走看看