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方法。

原文地址:https://www.cnblogs.com/HigginCui/p/5954412.html