JavaWeb-Request学习

  • request对象和response对象的原理在这里插入图片描述

    • request和response是由服务器创建的,我们来使用它们
    • requset对象是用来获取请求消息的,response是用来设置响应消息的
    1. tomcat服务器会根据url中的资源路径,创建ServletDemo1对象
    2. tomcat服务器,会创建request和response对象,request对象中封装请求消息数据
    3. tomcat将request和response两个对象传递给service方法,并调用service方法。
    4. 程序员可以通过request对象来获取请求数据,可以通过response来设置相应消息数据
    5. 服务器在给浏览器做出响应之前,会从response中拿程序员设置的响应消息数据
  • request对象继承体系结构:
    ServletRequest: --接口
    |继承
    HttpServletRequest: --接口
    |实现
    org.apach.catalina.connector.RequestFacade类(tomcat)

  • request:获取请求消息

    1. 获取请求数据
      1. 获取请求行数据
        *GET/day14/demo1?name=zhanggsan HTTP/1.1
        *获取请求方法:GET,String getMethod()
        *(重点)获取虚拟目录:/day14,String getContextPath()
        *获取Servlet路径:/demo1,String getServletPath()
        *获取请求参数:name=zhangsan,String getQueryString()
        *(重点)获取请求的URI:/day14/demo1,getRequestURI(),getRequestURL():带有http协议
        *获取协议以及版本:HTTP/1.1,String getProtocol()
        *获取客户机的IP地址:String getRemoteAddr()
        在这里插入图片描述
package Request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
* y演示Request获取请求行数据
* */
@WebServlet("/RequestDemo1")
public class RequestDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
        		1. 获取请求行数据
			*GET/day14/demo1?name=zhanggsan HTTP/1.1
			*获取请求方法:GET,`String getMethod()`
			*(重点)获取虚拟目录:/day14,`String getContextPath()`
			*获取Servlet路径:/demo1,`String getServletPath()`
			*获取请求参数:name=zhangsan,`String getQueryString()`
			*(重点)获取请求的URI:/day14/demo1,`getRequestURI(),getRequestURL():带有http协议`
			*获取协议以及版本:HTTP/1.1,`String getProtocol()`
			*获取客户机的IP地址:`String getRemoteAddr()`
         */
        //获取请求方式,GET
        String method = request.getMethod();
        System.out.println(method);
        //获取虚拟目录
        String contextPath = request.getContextPath();
        System.out.println(contextPath);
        //获取Servlet路径
        String servletPath = request.getServletPath();
        System.out.println(servletPath);
        //获取请求参数
        String queryString = request.getQueryString();
        System.out.println(queryString);
        //获取请求的url
        String requestURI = request.getRequestURI();
        StringBuffer requestURL = request.getRequestURL();
        System.out.println(requestURI);
        System.out.println(requestURL);
        //获取协议以及版本
        String protocol = request.getProtocol();
        System.out.println(protocol);
        //获取客户机ip地址
        String remoteAddr = request.getRemoteAddr();
        System.out.println(remoteAddr);
    }
}

在这里插入图片描述

    1. 获取请求头数据
      *重点String getHeader(String name):通过请求头名称获取请求头的值
      *Enumeration<String> getHeaderNames():获取所有的请求头名称
package Request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/RequestDemo2")
public class RequestDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //演示获取请求头数据

        //获取所有的请求头名称
        Enumeration<String> headerNames = request.getHeaderNames();
        //遍历
        while(headerNames.hasMoreElements()){
            String name = headerNames.nextElement();
            String header = request.getHeader(name);
            System.out.println(name+"="+header);
        }
    }
}

根据头判断浏览器类型

package Request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/RequestDemo3")
public class RequestDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String header = request.getHeader("user-agent");
        if(header.contains("Chrome")){
            System.out.println("google 来了");
        }else if (header.contains("Firofox")){
            System.out.println("火狐来了");
        }
    }
}

  • 获取请求体数据
    • 请求体:只有POST请求方式才有请求体,在请求体中封装了POST请求的请求参数
    • 步骤:
      1. 获取流对象
        *BufferedReader getReader():获取字符输入流,自己能操作字符数据
        *ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据,在文件上传时使用
      2. 从流对象中获取数据
  • 其他功能
    1. 获取请求参数通用方法(可以兼容GET和POST,都可以使用下列方法请求参数)

      1. String getParameter(String name):根据参数名称获取参数值,如username=zhangsan&password=123
      2. String[] getParameterValues(String name):根据参数名称获取参数值数组
      3. Enumeration<String> getParameterNames():获取所有参数名称
      4. Ma<String,String[]> getParameterMap():获取所有参数的map集合
        *post中文乱码:设置一下流的编码:request.setCharacterEncoding("UTF-8");
    2. 请求转发:一种在服务器内部的资源跳转方式

      • 步骤:1.通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
      • 使用这个对象进行转发:forward(ServletRequest request,ServletResponse reponse)
      • 特点:浏览器地址栏路径不发生变化,只能转发到当前的服务器内部资源中,转发是一次请求
    3. 共享数据:

      1. 域对象:一个有作用范围的对象,可以在范围内共享数据
        1. request域:代表一次请求 ,一般用于请求转发的多个资源中共享数据
          方法: setAttribute(String name,Object obj):存储数据,Object getAttribute(String name):通过键获取值,void removeAttribute(String):通过键移出键值对
          在这里插入图片描述
    4. 获取servletContext对象

      1. ServletContext geteServletContext()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值