javaee-----网络介绍(四)

HttpServletRequest和HttpServletResponse继承关系

  1. HttpServletRequest 和 HttpServletResponse 属于javax.servlet.http包下面的
  2. ServletRequest 和 ServletResponse 属于javax.servlet包下面的

在这里插入图片描述

HttpServletRequest方法介绍

  1. 获得客户机信息
getRequestURL()返回客户端发出请求时的完整URL。
getRequestURI()返回请求行中的资源名部分。
getQueryString ()返回请求行中的参数部分。
getRemoteAddr()返回发出请求的客户机的IP地址。
getPathInfo()返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以"/"开头。
getRemoteHost()返回发出请求的客户机的完整主机名。
getRemotePort()返回客户机所使用的网络端口号。
getLocalAddr()返回WEB服务器的IP地址。
getLocalName()返回WEB服务器的主机名。
private void RequestMessages(HttpServletRequest req, HttpServletResponse resp) throws IOException{
    String reqUrl = req.getRequestURL().toString();//得到请求的URL地址
    String reqUri = req.getRequestURI();//得到请求的资源
    String queryString = req.getQueryString();//得到请求的URL地址中附带的参数
    String remoteAddr = req.getRemoteAddr();//得到来访者的IP地址
    String remoteHost = req.getRemoteHost();
    int remotePort = req.getRemotePort();
    String remoteUser = req.getRemoteUser();
    String method = req.getMethod();//得到请求URL地址时使用的方法
    String pathInfo = req.getPathInfo();
    String localAddr = req.getLocalAddr();//获取WEB服务器的IP地址
    String localName = req.getLocalName();//获取WEB服务器的主机名
    resp.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器
    //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
    resp.setHeader("content-type", "text/html;charset=UTF-8");
    PrintWriter out = resp.getWriter();
    out.write("获取到的客户机信息如下:");
    out.write("<br/>");
    out.write("请求的URL地址:"+reqUrl);
    out.write("<br/>");
    out.write("请求的资源:"+reqUri);
    out.write("<br/>");
    out.write("请求的URL地址中附带的参数:"+queryString);
    out.write("<br/>");
    out.write("来访者的IP地址:"+remoteAddr);
    out.write("<br/>");
    out.write("来访者的主机名:"+remoteHost);
    out.write("<br/>");
    out.write("使用的端口号:"+remotePort);
    out.write("<br/>");
    out.write("remoteUser:"+remoteUser);
    out.write("<br/>");
    out.write("请求使用的方法:"+method);
    out.write("<br/>");
    out.write("pathInfo:"+pathInfo);
    out.write("<br/>");
    out.write("localAddr:"+localAddr);
    out.write("<br/>");
    out.write("localName:"+localName);
}

在这里插入图片描述

  1. 获得客户机请求头
getHeader(string name)根据name获取头
getHeaders(String name)根据name获取头Enumeration
ggetHeaderNames()获取头名称
private void RequestHead(HttpServletRequest req, HttpServletResponse resp) throws IOException{
  resp.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器
  //通过设置响应头控制浏览器以UTF-8的编码显示数据
  resp.setHeader("content-type", "text/html;charset=UTF-8");
  PrintWriter out = resp.getWriter();
  Enumeration<String> reqHeadInfos = req.getHeaderNames();//获取所有的请求头
  out.write("获取到的客户端所有的请求头信息如下:");
  out.write("
");
  while (reqHeadInfos.hasMoreElements()) {
      String headName = (String) reqHeadInfos.nextElement();
      String headValue = req.getHeader(headName);//根据请求头的名字获取对应的请求头的值
      out.write(headName+":"+headValue);
      out.write("
");
  }
  out.write("
");
  out.write("获取到的客户端Accept-Encoding请求头的值:");
  out.write("
");
  String value = req.getHeader("Accept-Encoding");//获取Accept-Encoding请求头对应的值
  out.write(value);
  
Enumeration<String> e = req.getHeaders("Accept-Encoding");
while (e.hasMoreElements()) {
    String string = (String) e.nextElement();
    System.out.println(string);
}
}
  1. 获得客户机请求参数
getParameter(String name)根据name获取请求参数(常用)
getParameterValues(String name)根据name获取请求参数列表(常用)
getParameterMap()返回的是一个Map类型的值,该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系。(编写框架时常用)

服务器端的编码统一

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置服务器以UTF-8的编码接收数据
        req.setCharacterEncoding("UTF-8");
        String name = req.getParameter("name");
        System.out.println("名字:" + name);
    }
  @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        //以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串
        name = new String(name.getBytes("ISO8859-1") , "UTF-8");
        System.out.println("名字:" + name);
    }

请求转发和重定向

转发

RequestDispatcher reqDispatcher =this.getServletContext().getRequestDispatcher("/test.jsp");
reqDispatcher.forward(request, response);

重定向

resp.sendRedirect();

区别:
一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发/307。
一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源进行处理,称之为请求重定向/302。

参考文章

https://cloud.tencent.com/developer/article/1328308

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值