HttpServletRequest类

  • 有什么作用?

    • 每次只要有请求进入 tomcat服务器,tomcat服务器就会吧请求过来的http协议解析封装到 request对象中
    • 然后传递到 service 方法 doGet doPost 供使用者调用,
    • 可以通过httpservletRequest对象获取到所有的请求信息

      HttpServletRequest 类的常用方法

      1. getRequestURI * 获取请求的资源路径
      2. getRequestURL * 获取请求的统一资源定位符 绝对路径
      3. getRemoteHost * 获取客户端的ip地址
      4. getHeader * 获取请求头
      5. getParameter * 获取请求参数
      6. getParameterValues * 获取请求的参数 (多个值的时候使用
      7. getMethod * 获取请求的方式 get或者post
      8. setAttributekv * 设置 域数据
      9. getAttributekv * 获取域数据
      10. getRequestDispatcher() 获取请求转发对象

      乱码问题

  • 使用request对象设置编码格式

    1. request.setCharacterEncoding("UTF-8");

    请求转发

  • 请求转发指,服务器收到请求之后,从一次资源跳转到另一个服务器资源的操作

    特点

    1 浏览器地址栏没有变化 与 重定向要进行区别,重定向 浏览器请求地址发生变化。
    2 他们是一次请求
    3 他们共享 reuest域中的数据
    4 可以转发到web-inf 目录下的页面
    5 但是不可转发到工程以外的资源,比如baidu.com

    base标签的作用

  • base标签可以设置在当前页面中,对当前页面中的所有路径生效,比如说要发生跳转的时候相对与哪个路径进行跳转

    1. <html>
    2. <head>
    3. <title>$Title$</title>
    4. <base href="url">
    5. </head>
    6. <body>
    7. $END$
    8. </body>
    9. </html>

    web 中的相对路径和绝对路径

  • 在javaweb中,路径分为相对路径和绝对路径两种

  • 相对路径是
    • . 表示当前目录
    • .. 表示上一级目录
    • 资源名 表示当前目录/资源名
  • 绝对路径

  • 在web中 / 斜杠 是一种绝对路径

  • / 斜杠 如果被浏览器解析 得到的是 http://ip:port/
  • / 斜杠如果被服务器解析 得到的是 http://ip:port/工程路径

    特殊情况

  • response.sendRedirect(“/“) 重定向则是 单纯吧 斜杠 发给浏览器解析

  • 得到的是 http://ip:port/

    HttpServletResponse 类

  • response 类的作用

    • 同 request类一样,每次请求进来, tomcat都会创建一个response对象传递给servlet程序去使用。相对的,request表示请求,respoonse表示所有响应的信息
    • 如果需要设置返回给客户端的信息,都可以通过HttpServletResponse来进行设置

      输出流的说明

  • httpServletResponse 中支持两个输出流 ```java

// 注意点 ,二者只能同时出现一种流 否则就会报错 PrintWriter writer = response.getWriter();// 字符输出流对象获取 // ServletOutputStream outputStream = response.getOutputStream(); // 字节输出流获取

  1. - getOutPutStream() 常用语下载 传递 二进制数据 字节流
  2. - getWriter() 常用语传回字符串 -- 更为常用 字符流
  3. <a name="dHiaF"></a>
  4. ## 注意点
  5. - 两个流使用时只能存在一个,否则会报错
  6. <a name="TDvYn"></a>
  7. # 如何往客户端回传数据
  8. - get字符流输出对象,writer方法直接回显到页面
  9. ```java
  10. writer.write("输出response 返回的内容~"); // 直接回显到页面 ,但是出现了中文乱码

响应内容中文乱码问题解决

# 方式1  设置 服务器的字符集为utf-8 同时设置浏览器的字符集也使用utf-8    
   System.out.println(response.getCharacterEncoding()); //ISO-8859-1 默认值
            // 设置服务器字符集为 UTF-8
   response.setCharacterEncoding("UTF-8");
            //杈撳嚭response 杩斿洖鐨勫唴瀹癸綖 出现这种情况是因为 服务器和浏览器的字符集编码不一直

            // 通过响应头,设置浏览器也使用utf-8
   response.setHeader("Content-Type","text/html;charset=UTF-8");

# 方式2  直接同时设置服务器和客户端都使用utf-8 还顺便设置了响应头
# 但是使用需要注意,一定要在获取流对象之前调用才有效
            response.setContentType("text/html; charset=UTF-8");

请求重定向问题

  • 想必我们都遇到过一重情况,一直去的网站,某天突然不行了,而你再去访问的时候,会显示吧你重定向到一个新网站。这个过程,就是重定向 ```java 请求重定向

      请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说,给你一个新地址,你去新地址访问 叫请求重定向
    
      客户端 浏览器                                  服务器
      http://ip:port/工程路径response1  - 》       随着时间的退役和项目的不断更新升级,response1这个接口慢慢被废弃了
                                                  由新的接口response2 取代
      解析 response1的结果,知道已经搬迁    《-              由义务告诉客户端,我已搬迁 =》 响应码为302
      再次发起请求 新地址的请求
                                                      并且告诉新的地址 =》 响应头Location
    
                                          -》       response2 程序
                                                  取代了 response1 功能更完善,安全性更高
    
       收到最终返回,解析展示到页面             《-       
    
<a name="B2Y8C"></a>
## 重定向的方式
```java
# 第一种方式
response.setStatus(302);
response.setHeader("Location","重定向到的目标地址");

# 第二种方式最为便利,
response.sendRedirect("目标地址即可")

重定向的特点

  • 浏览器的地址会发生变化
  • 总共发生两次请求
  • 不共享request域中数据,因为已经是两次不同的请求了
  • 不能访问web-inf下的资源,
  • 可以访问工程外的资源,比如 baidu.com