当前位置: 首页 > article >正文

JavaWeb的小结02

第2章-第2节

一、知识点

HttpServletRequest请求对象、HttpServletResponse响应对象、响应内容类型Content-Type、请求转发、重定向、ServletContext对象。

二、目标

  1. 深刻理解HttpServletRequest对象的作用。

  2. 深刻理解HttpServletResponse对象的作用。

  3. 掌握HttpServletRequest获取参数的常用方法。

  4. 掌握HttpServletResponse响应内容的方法。

  5. 理解响应内容类型Content-Type。

  6. 理解请求转发和重定向的区别。

  7. 掌握ServletContext对象的使用。

三、内容分析

  1. 重点

    • HttpServletRequest对象的作用。

    • HttpServletRequest对象获取客户端参数的方法。

    • HttpServletResponse对象的作用。

    • HttpServletResponse响应数据给客户端。

    • 理解请求转发和重定向的区别。

  2. 难点

    • 请求与响应的理解。

    • 响应内容类型Content-Type的理解。

四、内容

1、HttpServletRequest

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

一个完整的HTTP请求包括:请求行、请求头、请求体。

我们可以通过浏览器,【开发者工具】-【Network】-【Name】-【Headers】看到请求信息。

1.1 获取请求行信息

假设使用请求 http://localhost:8080/web/test?name=张三&age=18 测试以下方法,结果展示在示例结果列。

方法名说明示例结果
getMethod()获取请求方式。GET
getRequestURL()获取完整路径。http://localhost:8080/web/test
getRequestURI()获取除了域名或者IP部分的路径。/web/test
getServletPath()获取Servlet路径。/test
getContextPath()获取虚拟目录。/web
getQueryString()获取参数,键=值,即?号后面的部分。name=%E5%BC%A0%E4%B8%89&age=18
getProtocol()获取协议及版本。HTTP/1.1
getRemoteAddr()返回IP地址。0:0:0:0:0:0:0:1(属于ipv6,服务器和客户端都在同一台电脑上会出现)

1.2 获取请求头信息

请求头包含许多有关的前端环境和请求正文的有用信息。

请求头存在的主要意义是: 将前端的一些信息告诉后端

方法名说明
String getHeader(String name)根据请求头名字获取对应的请求头值。
Enumeration<string> getHeaderNames()获取所有的请求头名字。
//获取请求头
String accept = req.getHeader("Accept");
​
//迭代请求头信息
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
    String name = headerNames.nextElement();
    String value = request.getHeader(name);
    System.out.println(value);
}
1.3 获取请求体信息

请求体主要包含前端发送给后端的数据(参数)

对于GET请求, 一般不需要请求体, 因为GET参数直接体现在URL上。

对于POST请求, 需要请求体, 请求体里保存POST参数。

方法名说明
BufferedReader getReader()获取字符输入流,只能操作字符数据。
ServletInputStream getInputStream()获取字节输入流,可以操作所有类型的数据(文件上传)。
String getParameter(String name)根据参数名获取参数值,get、post通用。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String name = req.getParameter("name");
    System.out.println(name);
}
​
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // post请求中文会乱码
    req.setCharacterEncoding("utf8");
​
    String name = req.getParameter("name");
    System.out.println(name);
}
1.4 请求转发

一种服务器内部资源跳转的方法,servlet之间的跳转。(可以理解为函数之间的互相调用)

  1. 使用步骤

    • 通过request请求对象获取请求转发器对象。

    • 通过RequestDispatcher对象进行转发。

    request.getRequestDispatcher("转发路径").forward(request, response)
  2. 特点

    • 浏览器地址路径不发生变化。

    • 转发是一次请求。

    • 只能转发到服务器内部资源。

  3. 共享数据

    请求转发中涉及到的多个servlet,可以共享数据。

    setAttribute(String name, Object object) // 存储数据
    getAttribute(String name) // 通过键获取数据
    removeAttribute(String name) // 通过键移除数据

2、HttpServletResponse

当客户端通过HTTP协议访问服务器时,如果服务器要给客户端一些相响应的信息,就可以使用HttpServletResponse提供的方法进行设置。

1.1 核心方法
方法说明
void setStatus(int sc)设置响应状态码
void setHeader(String name,String value)设置一个带有给定的名称和值的Header,如果name已经存在,则覆盖旧的值
void setContentType(String type)设置被发送到客户端的响应的内容类型
PrintWriter getWriter()用于往 body 中写入文本格式数据

响应状态码:服务器告诉客户端浏览器本次请求响应的一个状态,都是三位数。

  1. 1xx:服务器接收客户端消息,但是没有接收完成,等待一段时间后,发送1xx状态码

  2. 2xx:成功,200

  3. 3xx:重定向。302重定向,304访问缓存

  4. 4xx:客户端错误。404找不到后端地址,401缺少权限,403权限认证失败

  5. 5xx:服务器端错误。500服务器内部错误

1.2 重定向
resp.sendRedirect("www.baidu.com")

特点:

  1. 地址栏发生变化。

  2. 重定向是两次请求,不能使用request对象来共享数据。

  3. 重定向可以访问其他站点的资源。

3、ServletContext

ServletContext官方叫Servlet上下文。服务器会为每一个工程创建一个ServletContext对象。这个对象全局唯一,工程内所有的servlet都共享这个对象。所以叫全局应用程序共享对象。

3.1 获取方式
  1. req.getServletContext()

  2. this.getServletContext()

3.2 核心方法
方法说明
setAttribute(name, value)添加数据
getArrtibute(name)获取数据
removeAttribute(name)删除数据

3.3 获取MIME类型

在互联网通信过程中定义的一种文件数据类型。

String filename = "a.jpg";
String mimeType = context.getMimeType(filename);
System.out.println(mimeType);

http://www.kler.cn/news/335448.html

相关文章:

  • 【无人水面艇路径跟随控制2】(C++)USV代码阅读: SetOfLos 类的从路径点和里程计信息中计算期望航向
  • 数据结构:将复杂的现实问题简化为计算机可以理解和处理的形式
  • 530、二叉搜索树的最小绝对差
  • 2020大厂web前端面试常见问题总结
  • 计算机毕业设计 基于Python的人事管理系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
  • 疾风大模型气象,基于气象数据打造可视化平台
  • SpringBoot框架下校园资料库的构建与优化
  • 鸿蒙开发(NEXT/API 12)【管理应用与Wear Engine服务的连接状态】手机侧应用开发
  • Go-Micro客户端请求报500错误的解决方法
  • 健康信息管理:SpringBoot的创新应用
  • 怎样用python+sqlalchemy获得mssql视图对应物理表关系(二)
  • npm包管理深度探索:从基础到进阶全面教程!
  • MySQL 数据库的备份与恢复
  • 知识付费APP开发指南:基于在线教育系统源码的技术详解
  • STL-unordered_set容器总结
  • Oracle架构之物理存储中各种文件详解
  • 自动驾驶汽车横向控制方法研究综述
  • 【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操作案例。
  • 数据结构_绪论(选择题)
  • 前端的全栈混合之路Meteor篇(二):RPC方法注册及调用