zoukankan      html  css  js  c++  java
  • 11_Servlet基础知识

    【概念】

    Servlet通常被称为服务端小程序,是运行在服务端的程序,用于处理及相应客户端的请求。

    Servlet是用java语言开发网页动态资源的技术。

    【特点】

    1.Servlet是个特殊的Java类,这个Java类必须继承HttpServlet类。

    2.一个普通的java类实现了Servlet接口,也叫作Servlet程序。通常继承HttpServlet是为了创建一个基于Http协议的Servlet。

    3.Servlet程序要部署到服务器(如Tomcat)运行。

    【Servlet提供的响应客户端请求的方法】

    1. doGet()      用于响应客户端的GET请求。

    2. doPost()     用于响应客户端的POST请求。

    3. doPut()      用于响应客户端的PUT请求。

    4. doDelete()  用于响应客户端的DELETE请求

    注:客户端的请求通常只有GET和POST两种,Servlet为了响应这两种请求,必须重写doGet()和doPost()方法。

    【Servlet开发1(Servlet3.0之前)】

    [ 第1步 ]

    编写java类,继承HttpServlet 。重写doGet()和doPost()方法。

    package com.Higgin.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class FirstServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        public FirstServlet() {
            super();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("doGet方法执行---");
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("doPost方法执行---");
        }
    }

    [ 第2步 ](没有使用IDE的情况下)

    把Servlet的class字节码拷贝到WEB-INF/classes目录下

    [ 第3步 ]

    在web.xml中配置对应的servlet

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns
    ="http://java.sun.com/xml/ns/javaee"
          xsi:schemaLocation
    ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
          id
    ="WebApp_ID" version="3.0"> <display-name>HelloServlet</display-name> <servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>com.Higgin.servlet.FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>

    【运行结果】

    【对于web.xml中Servlet配置的注释】

    1.由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把Servlet程序映射到一个URL地址上,这个工作是在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成,在servlet3.0之后,可以使用@WebServlet("....")代替。

    2.<servlet>元素用于注册Servlet,它包含两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称Servlet的完整类名

    3.一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问的路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称Servlet的对外访问名称

      <!-- 配置一个Servlet -->
      <servlet>
          <!-- Servlet内部名称,自定义 -->
          <servlet-name>FirstServlet</servlet-name>
          <!-- Servlet的 类全名 -->
          <servlet-class>com.Higgin.servlet.FirstServlet</servlet-class>
      </servlet>
      <!-- Servlet的 映射配置 -->
      <servlet-mapping>
          <!-- Servlet的内部名称,一定要和上面的保持一致 -->
          <servlet-name>FirstServlet</servlet-name>
          <!-- Servlet的映射路径(访问Servlet的名称) -->
          <url-pattern>/test</url-pattern>
      </servlet-mapping>

    【Servlet开发2:利用Servlet3.0新特性@WebServlet注释】

    最大不同:直接在对应的Servlet类名(如上面的FirstServlet类)上加上注释@WebServlet("/test"),无需在web.xml中进行配置就可以实现相同的效果。

    package com.Higgin.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class FirstServlet
     */
    @WebServlet("/test")  //servlet3.0新特性
    public class FirstServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        public FirstServlet() {
            super();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("doGet方法执行---");
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("doPost方法执行---");
        }
    
    }

     【Servlet的执行过程】

    前提:TomCat服务器启动,首先加载webapps中的每个web应用的web.xml配置文件。

    1.在浏览器输入对应的url, http://localhost:8080/HelloServlet/test

    2.截取到URL的字符串,得到需要访问的资源名称:     /test

    3.在HelloServlet网站下的web.xml信息中搜索是否存在  /test匹配的  url-pattern。

    4.匹配到对应的url-pattern之后,取出当前映射信息中的servlet-name的名称,然后在web.xml信息中搜索是否存在一个相同servlet-name名称的servlet配置信息。

    5.找到对应的servlet配置信息之后,取出当前配置信息的servlet-class的内容,即字符串 com.Higgin.servlet.FirstServlet

    6.创建FirstServlet对象,然后调用FirstServlet类中的方法。

    7.Servlet就把内容返回给浏览器用户。

    【关于http://localhost:8080/HelloServlet/test】

    浏览器中输入:http://localhost:8080/HelloServlet/test

    http ://             http协议(1.本地hosts文件查找域名和ip映射 2.找不到,联网到DNS服务器找有名和ip映射器 )

    8080      端口 (TomCat:8080)

    /HelloServlet      站点下的web应用名称

    /test       资源名称,截取到/test 字符串

              1.在HelloServlet应用下的web.xml文件中查找是否存在匹配的url-pattern

              2.使用Servlet的内部名称在web.xml文件中查找是否存在相同名称的Servlet配置

              3.得到对应的servlet-class内容,字符串 com.Higgin.servlet.FirstServlet

    通过反射构造HelloServlet对象,调用方法(doGet///),将内容返回输出到浏览器,看到效果。

    【关于Servlet接口实现类HttpServlet

    Servlet接口定义了两个默认实现类:HttpServlet和GenericServlet。

    * HttpServlet指能够处理HTTP请求的Servlet,它在原有的Servlet接口上添加了一些与HTTP协议处理相关的方法,它比Servlet接口的功能更为强大。因此在编写Servlet时,通常应该继承这个HttpServlet类,避免直接去实现Servlet接口。

    * HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如果为GET请求,则调用HttpServlet的doGet方法;如果为POST请求,则调用doPost()方法。因此,我们在编写Servlet时,通常只需要编写doGet()或doPost()方法,而不需要去复写service方法。

  • 相关阅读:
    355. Design Twitter
    54. Spiral Matrix
    143. Reorder List
    324. Wiggle Sort II
    365. Water and Jug Problem
    洛谷 P3527 [POI2011]MET-Meteors 解题报告
    洛谷 P4592 [TJOI2018]异或 解题报告
    单调序列 解题报告
    洛谷 P4735 最大异或和 解题报告
    洛谷 P1527 [国家集训队]矩阵乘法 解题报告
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5954412.html
Copyright © 2011-2022 走看看