Servlet的Get方法和Post方法的请求处理

package request;/**
 * @Author ZRX
 * @Date 2023/6/25 15:18
 * @Description
 * @Version
 */


import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Map;

@WebServlet(urlPatterns = "/RS01")
public class RequestServlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //测试request对象get获取请求相关信息
        //一、获取请求行数据
        //(1)获取请求方式
        String method = request.getMethod();
        System.out.println(method);

        //(2)获取项目路径(虚拟目录 项目运行的上下文)
        String contextPath = request.getContextPath();// /web07_maven
        System.out.println("contextPath = " + contextPath);

        //(3) 获取项目的URL(绝对路径),统一资源定位符
        StringBuffer requestURL = request.getRequestURL();
        System.out.println("requestURL.toString() = " + requestURL.toString());

        //(4)获取项目的URI(相对路径),统一资源标识符
        String requestURI = request.getRequestURI();
        System.out.println("requestURI.toString() = " + requestURI.toString());

        //(5)获取参数,也可以用post请求获取参数的通用方法,所以一般在doget方法下调用dopost方法即可
        String queryString = request.getQueryString();
        System.out.println("queryString = " + queryString);

        /*request.getMethod();//请求方式
        request.getContextPath();//项目路径
        request.getRequestURL();//绝对路径
        request.getRequestURI();//相对路径
        request.getQueryString();//获取参数*/

        //二、获取请求头(除非有需要否则毫无意义)
        /*request.getHeader("请求头的key:如User-Agent");//靠键值对获取值*/
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //测试request对象获取post请求相关信息
        //post请求和get请求只是获取请求参数不同,获取路径及请求头的方法一样
        //post请求可以是传入的普通数据,也可以是文件里的内容

        //一般方法
        //1、字符缓冲流获取数据,读取后用字符的截取方法获得数据
        BufferedReader bre=request.getReader();
        String s = bre.readLine();
        System.out.println("s = " + s);

        //2、如果是字节流
        /*ServletInputStream inputStream=request.getInputStream();
        int re=inputStream.read();*/


        //get请求和post请求获取参数的通用方法
        //1、获取请求参数作为一个Map集合,可以容纳一个键多个值的请求参数
        Map map = request.getParameterMap();
        //循环去除map中的所有key,map.keySet中的set是所有的key的集合,
        for (String key:map.keySet()) {
            System.out.println("key = " + key);

            String[] strings = map.get(key);
            for (String st:strings) {
                System.out.println("st = " + st);
            }
        }

        //2、根据参数名取值,得到的是数组,针对多个值的属性
        String[] hobbies = request.getParameterValues("hobbies");
        for (String ss:hobbies) {
            System.out.println("ss = " + ss);
        }

        //3、根据参数名称获取值,但不能用于多个值的属性,只能取单个值
        String username = request.getParameter("username");
        String password=request.getParameter("password");


        //设置请求参数的编码
        request.setCharacterEncoding("UTF-8");
        
    }
}

注意:doPost方法里获取参数的通用方法也可以用于doget方法,故可以在doget方法里调用doPost方法即可

你可能感兴趣的:(servlet,java,前端)