二、GET和POST分发处理

140 阅读2分钟
  1. 在servlet_helloServlet\web下创建register.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <h1>注册用户</h1>
    <form action="http://localhost:8080/servlet_helloServlet/helloServlet" method="POST">
        user: <input type="text" name="username"><br><br>
        <input type="submit" value="注册用户">
    </form>
</body>
</html>
  1. 在helloServlet.java中通过getMethod()方法获取表单的提交方式,用不同的业务代码处理
  2. 以下没有业务代码,只是演示分发两种不同的请求处理
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    System.out.println("Hello, Servlet");


    /**
     *  从servletRequest 对象来获取请求方式
     *  1. ServletRequest 没有得到提交方式的方法
     *  2. 看看 ServletRequest 子接口有没有相关想法 (选中ServletRequest 按ctrl+alt+B 可以看到接口的子接口和实现子类)
     *  3. 把servletRequest转成 HttpServletRequest引用(因为HttpServletRequest中有getMethod方法)
     */
    HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    String method = httpServletRequest.getMethod();
    if ("GET".equals(method)){
        doGet(); // 处理GET请求
    } else if ("POST".equals(method)){
        doPost(); // 处理POST请求
    }
}

/**
 * 用于响应get请求
  */
public void doGet(){
    System.out.println("doGet()....被调用");
}

/**
 * 用于响应post请求
 */
public void doPost(){
    System.out.println("doPost()....被调用");
}
  1. 运行结果(截图中有两个doPost被调用是因为请求了两次)

image.png

  1. helloServlet.java全部代码
package com.ljysty.servlet;


import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 *  1. 开发一个 Servlet 需要实现 Servlet 接口
 *  2. 实现 Servlet 接口的方法(5个)
 */
public class helloServlet implements Servlet {
    /**
     * 1. 初始化 Servlet
     * 2. 当 tomcat 创建 helloServlet 实例时,会调用 init 方法
     * 3. 该方法只会被调用一次
     */

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init()...被调用");
    }
    
    
    /**
     * 返回 ServletConfig 也就是返回 Servlet 的配置
     */

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }


    /**
     *  1. service 方法处理浏览器的请求(包括 get/post)
     *  2. 当浏览器每次请求 Servlet 时,就会调用一次 service
     *  3. 当tomcat调用该方法时,会把http请求的数据封装成实现 ServletRequest 接口的 request 对象
     *  4. 通过 ServletRequest 对象, 可以得到用户提交的数据
     *  5. ServletResponse 对象可以用于返回数据给 tomcat => 浏览器
     */

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello, Servlet");


        /**
         *  从servletRequest 对象来获取请求方式
         *  1. ServletRequest 没有得到提交方式的方法
         *  2. 看看 ServletRequest 子接口有没有相关想法 (选中ServletRequest 按ctrl+alt+B 可以看到接口的子接口和实现子类)
         *  3. 把servletRequest转成 HttpServletRequest引用(因为HttpServletRequest中有getMethod方法)
         */
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String method = httpServletRequest.getMethod();
        if ("GET".equals(method)){
            doGet(); // 处理GET请求
        } else if ("POST".equals(method)){
            doPost(); // 处理POST请求
        }
    }

    /**
     * 用于响应get请求
      */
    public void doGet(){
        System.out.println("doGet()....被调用");
    }

    /**
     * 用于响应post请求
     */
    public void doPost(){
        System.out.println("doPost()....被调用");
    }


    /**
     * 返回 servlet 信息,使用较少
     * @return
     */
    @Override
    public String getServletInfo() {
        return null;
    }


    /**
     *  1. 该方法是在servlet销毁时被调用
     *  2. 只会调用一次
     */
    @Override
    public void destroy() {

    }
}