当前位置: 首页 > 工具软件 > java-requests > 使用案例 >

JavaWeb——Request

储毅
2023-12-01

JavaWeb——Request

tomcat服务器会创建request和response对象,其中request对象封装了请求消息的数据

一、请求消息数据格式

请求消息数据格式包括哟了 3个部分:请求行,请求头,请求体

1. 请求行

//请求地址
Request URL: https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/mancard/img/qrcode_download-02b84e1f66.png
//请求方式
Request Method: GET
//请求状态码
Status Code: 200  (from memory cache)

2. 请求头

//告诉服务器,从哪里进来(用于:放盗链,统计)
Referer: https://www.baidu.com/
//浏览器告诉服务器,访问你使用的浏览器版本信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36

3. 请求空行

就是一个空行用于分隔请求体

4. 请求体

只有post有请求体 请求体是参数

二、Request

tomcat服务器会把request和esponse对象传递给service方法 并且调用service方法

  • 获得请求行数据
返回类型方法名称作用
StringgetMethod()获得请求方式
StringgetContextPath()获得虚拟目录
StringgetServletPath()获得servlet路径
StringgetRequestURI()获得URI地址(虚拟路径servlet)
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    {
        //1.获取请求方式
        String method = req.getMethod();
        System.out.println(method);
        //2.获取虚拟路径
        String contextPath = req.getContextPath();
        System.out.println(contextPath );
        //3.获得servlet路径
        String servletPath = req.getServletPath();
        System.out.println(servletPath);
        //4.获得URI地址(虚拟路径+servlet)
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
    }
}
  • 获得请求头数据
返回类型方法名作用
StringgetHeader(String name)通过请求头名称得到请求头的值
EnumerationgetHeaderNames()获得所有的请求头名称
//通过请求头名称得到请求头的值
String host = req.getHeader("host");
System.out.println(host);
//获得所有的请求头名称
Enumeration<String> headerNames = req.getHeaderNames();
while (headerNames.hasMoreElements())   System.out.println(headerNames.nextElement()+req.getHeader(headerNames.nextElement()));
  • 获得请求体中数据流

    只有post才有请求体

    • 获取流对象
      BufferedReader br=req.getReader();
    
    • 从流对象拿数据
    while ((line=br.readLine())!=null)
        System.out.println(line);
    
  • 获取请求参数常用方式(get和post通用)

返回值方法名作用
StringgetParameter(String name)根据参数名称获取参数值
String []getParameterValues(String name)根据参数名称获取参数值的数组
EnumerationgetParameterNames()获取所有的请求参数名称
Map<String String[]>getParameterMap()获取所有参数的map集合
   //根据参数名称获取参数值
   String password = req.getParameter("password");
        System.out.println(password);
   //根据参数名称获取参数值的数组	
   String[] hobbies = req.getParameterValues("hobby");
        for (String hobby : hobbies) {
            System.out.println(hobby);
        }
  //获取所有的请求参数名称
  Enumeration<String> parameterNames = req.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            String s = parameterNames.nextElement();
            System.out.println(s);
            String parameter = req.getParameter(s);
            System.out.println(parameter);
            System.out.println("==========");
        }
//获取所有参数的map集合
      //获取所有参数的map集合
        Map<String, String[]> parameterMap = req.getParameterMap();
        //遍历
		//得到键值对中的键
        Set<String> strings = parameterMap.keySet();
        for (String string : strings) {
            System.out.println(string);
            //得到键值对中的值
            String[] strings1 = parameterMap.get(string);
            for (String s : strings1) {
                System.out.println(s);
            }
  • 乱码问题
req.setCharacterEncoding("utf-8");

3. 请求转发

  • 浏览器地址栏路径不发生变化
  • 只能转发到当前服务器内部资源中
  • 转发是一次请求
RequestDispatchergetRequestDispatcher(String s);
请求转发器
voidforward(ServletRequest var1, ServletResponse var2)
将请求转发到另一个servlet服务中
RequestDispatcher requestDemo1 = req.getRequestDispatcher("requestDemo1");
requestDemo1.forward(req,resp);

3.1共享数据

在同一个请求中可以共享数据源

返回值方法名作用
voidsetAttribute(String var1, Object var2);共享一个键值对
voidremoveAttribute(String var1);通过键删除一个共享数据
ObjectgetAttribute(String var1);通过键得到共享资数据的值
req.setAttribute("name","张三");
req.getAttribute("name");
req.removeAttribute("name");
 类似资料: