目录

  • HttpServletRequest
    • HttpServletRequest 类的作用
    • HttpServletRequest 类的常用方法
    • 如何获取请求参数
    • GET 请求的中文乱码解决
    • POST 请求的中文乱码解决
    • 请求的转发
    • base 标签的作用
    • Web 中的相对路径和绝对路径
    • web 中 / 斜杠的不同意义
  • HttpServletResponse
    • HttpServletResponse 类的作用
    • 两个输出流的说明
    • 往客户端回传数据,并且解决乱码问题
    • 请求重定向
      • 方式一
      • 方式二

HttpServletRequest

HttpServletRequest 类的作用

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中,然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息。

HttpServletRequest 类的常用方法

  1. getRequestURI()     获取请求的资源路径
  2. getRequestURL()     获取请求的统一资源定位符(绝对路径)
  3. getRemoteHost()     获取客户端的 ip 地址

在IDEA中,使用localhost访问时,得到的客户端 ip 地址是 ==>> 127.0.0.1;使用真实 ip 访问时,得到的客户端 ip 地址是真实的客户端 ip 地址。

  1. getHeader()        获取请求头
  2. getParameter()      获取请求的参数
  3. getParameterValues()   获取请求的参数(多个值的时候使用)
  4. getMethod()         获取请求的方式 GET 或 POST
  5. setAttribute(key, value);  设置域数据
  6. getAttribute(key);     获取域数据
  7. getRequestDispatcher()  获取请求转发对象

常用 API 示例代码:

public class RequestAPIServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        getRequestURI()     获取请求的资源路径System.out.println("URI => " + req.getRequestURI());
//        getRequestURL()     获取请求的统一资源定位符(绝对路径)System.out.println("URL =>" + req.getRequestURL());
//        getRemoteHost()     获取客户端的 ip 地址System.out.println("客户端 ip => " + req.getRemoteHost());
//        getHeader()        获取请求头System.out.println("请求头User-Agent ==>> " + req.getHeader("User-Agent"));}
}

如何获取请求参数

form.html代码示例

<body><form action="http://localhost:8080/07_servlet/parameterServlet" method="get">用户名:<input type="text" name="username"/><br/>密码:<input type="password" name="password"/><br/>兴趣爱好:<input type="checkbox" name="hobby" value="cpp"/>C++<input type="checkbox" name="hobby" value="java"/>Java<input type="checkbox" name="hobby" value="js"/>JavaScript<br/><input type="submit"/></form></body>

java代码示例:

public class ParameterServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求参数String username = req.getParameter("username");String password = req.getParameter("password");String[] hobby = req.getParameterValues("hobby");System.out.println("用户名:" + username);System.out.println("密码:" + password);// 将数组转换为列表System.out.println("兴趣爱好:" + Arrays.asList(hobby));}
}

GET 请求的中文乱码解决

// 获取请求参数String username = req.getParameter("username");//1. 先以 iso8859-1 进行编码//2. 再以 UTF-8 进行解码username = new String(username.getBytes("iso-8859-1"),"UTF-8");

POST 请求的中文乱码解决

// 设置请求体的字符集为UTF-8,从而解决中文乱码问题req.setCharacterEncoding("UTF-8");

请求的转发

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

请求转发图解:

Servlet1 代码:

public class Servlet1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");System.out.println("在 Servlet1(柜台1)中查看参数(材料) : " + username);// 给材料盖章,并传递到 Servlet2(柜台2)中去查看req.setAttribute("key1","柜台1的章");// 接下来问路:Servlet2(柜台2)怎么走//请求转发必须要以斜杠 / 开头, / 斜杠表示地址为:http://ip:port/工程名/,映射到 IDEA 代码的web目录RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");// 走向 Servlet2(柜台2)requestDispatcher.forward(req,resp);}
}

Servlet2 代码:

public class Servlet2 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求的参数(办事的材料)并查看String username = req.getParameter("username");System.out.println("在 Servlet2(柜台2) 中查看参数(材料):" + username);// 查看 柜台1 是否有盖章Object key1 = req.getAttribute("key1");System.out.println("柜台1是否有盖章:" + key1);// 处理自己的业务System.out.println("Servlet2 处理自己的业务");}
}

base 标签的作用

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

在 JavaWeb 中,路径分为相对路径和绝对路径两种:

相对路径:
  .    当前目录
  …    上一级目录
  资源名   当前目录/资源名

绝对路径:
  htttp://ip:port/工程路径/资源路径

web 中 / 斜杠的不同意义

在 web 中 / 斜杠 是一种绝对路径。
/ 斜杠 如果被浏览器解析,得到的地址是: http://op:port

/ 斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径

HttpServletResponse

HttpServletResponse 类的作用

  HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。
  HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置

两个输出流的说明

字节流  getOutputStream();  常用于下载(传递二进制数据)
字符流  getWriter();      常用于回传字符串(常用)

两个流同时只能使用一个!!!

往客户端回传数据,并且解决乱码问题

public class ResponseIOServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 它会同时设置服务器和客户端都是用UTF-8字符集,还设置了响应头// 此方法一定要在获取流对象之前调用才有效resp.setContentType("text/html; charset=UTF-8");// 往客户端回传 字符串 数据PrintWriter writer = resp.getWriter();writer.write("李是神魔恋");}
}

请求重定向

客户端给服务器发请求,然后服务器告诉客户端说:我给你地址,你去新地址访问,叫请求重定向(因为之前的地址可能已经被废弃)

方式一

response1:

public class Response1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Response1 来过");//设置响应状态码302,表示重定向resp.setStatus(302);resp.setHeader("location","http://localhost:8080/07_servlet/response2");}
}

response2:

public class Response2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("response2's result!");}
}

方式二

public class Response1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.sendRedirect("http://localhost:8080");}
}

Servlert 下 (HttpServletRequest 类和 HttpServletResponse 类)相关推荐

  1. HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题

    此文转载自:https://blog.csdn.net/qq_45821251/article/details/110249680 HttpServletResponse类作用 HttpServlet ...

  2. springframework包下的RequestContextHolder类和ServletRequestAttributes类的源码和使用

    文章目录 RequestContextHolder源码: 项目中使用RequestContextHolder 在项目中获得完整请求路径 关于ServletRequestAttributes源码 : 关 ...

  3. JavaWeb中HttpServletResponse类(Response对象)

    HttpServletResponse类和HttpServletRequest类一样,在服务器每次收到请求的时候就会创建一个response对象传递给doget()和dopost方法使用,HttpSe ...

  4. 线程间定制化调用通信—— 1 高内聚低耦合的前提下,线程操作资源类 2 判断/干活/通知 3 多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不能用if)

    生产者与消费者模式 一个生产者与一个消费者 题目:现在有两个线程,可以操作初始值为0的一个变量,实现一个线程对该变量加1,另一个线程对该变量减1,这两个线程的操作加一.减一交替,进行10轮,变量的初始 ...

  5. 线下门店场景化互动类产品浅析

    2017年各大互联网及零售公司都进行了门店科技产品的布局和实施,总结起来是失败的产品属于大多数.在2018年11月份的昆明零售博览会上我也注意到了酷炫产品越来越少,务实产品越来越多,产品创新上基本属于 ...

  6. java扫描指定package注解_java获取包下被指定注解的类

    方案一: 采用reflections 框架(此框架依赖com.google.guava) 2.项目依赖 org.reflections reflections 0.9.11 com.google.gu ...

  7. Java 高级类(下) —— 内部类和匿名类

    Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了 ...

  8. win10开启oracle服务器配置,Windows环境(Win10)下安装、配置服务器类Oracle Database 11g Release 2...

    该篇为服务器类Oracle Database 11gRelease 2的安装.配置,若需安装.配置桌面类(通常是选择桌面类,如果是将本机作为服务器来使用,则选择服务器类),可参考"Windo ...

  9. 【待完成】并发包下常用到线程工具类汇总

    文章目录 并发容器 BlockingQueue ArrayBlockingQueue LinkedBlockingQueue PriorityBlocking DelayQueue Synchrono ...

最新文章

  1. 王道考研 计算机网络笔记 第二章:物理层
  2. 测试无数据_无数据驱动自动化测试
  3. 中文条件jsp mysql_jsp MySQL中的一些中文问题的解决
  4. 【学习笔记】第一章——操作系统的概念、功能、特征、发展分类(系统调用、并发共享虚拟异步)
  5. Jeecg 实现RESTful风格
  6. [转]DES加密 java与.net可以相互加密解密两种方法
  7. 语言 物品竞拍系统_整理家务不用愁!HSR家庭自主整理机器人系统
  8. java循环语句_循环你都学会了,那if不是so easy了嘛
  9. MySQL5 使用概要
  10. android pickerview 多行,Android PickerView实现三级联动效果
  11. 云计算之IasS、PasS、SaaS
  12. SIPp 安装及使用
  13. ae合成设置快捷键_AE设计首选快捷键大全+解析
  14. html怎么改变字段字体,怎么换字体?
  15. 5G 当自强,根系不能忘
  16. prisma1.0实践
  17. 2016OSC源创会年终盛典-综合技术专场-惠新宸
  18. jQuery阶梯手风琴图片布局
  19. 【转】免费进入学术数据库
  20. Android面试你必须要知道的那些知识,已拿offer附真题解析

热门文章

  1. 谈谈抖音企业蓝V认证要怎样申请?
  2. 附解决方案,小程序获取的用户信息中昵称图然变成了“微信用户”,而且头像也显示不了?
  3. Matlab广义追赶法(Thomas法)
  4. 有关日期参数匹配数据库数据的方法
  5. python如何爬取糗事百科
  6. Google正资助一个由AI机器人编辑的新闻网站
  7. 第22课:打包和发布 Electron 应用
  8. 几大智能语义平台调研
  9. 2020华数杯数学建模C题脱贫帮扶绩效评价求解全过程文档及程序
  10. 速率法和终点法的区别_生化反应曲线解析1(终点法)