必备知识

在学习这两个对象之前,我们应该已经有了http协议的基本了解了,如果不清楚http协议的可以看我的关于http协议的介绍。因为其实request和response的使用大部分都是对http协议的操作。

request对象的介绍

我们先从request对象进行介绍:

我们知道http协议定义了请求服务器的格式:

请求行

请求头

空格

请求体(get请求没有请求体)

好了,这里我们就不详细介绍了,我们只看几个应用就可以了,没什么难度:

应用1 获取请求头

/*** 获取HTTP请求头*   String getHeader(String name),适用于单值头*   int getIntHeader(String name),适用于单值int类型的请求头*   long getDateHeader(String name),适用于单值毫秒类型的请求头*      Enumeration<String> getHeaders(String name),适用于多值请求头* **/
public class CServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String ip = request.getRemoteAddr();//获取IP地址String method = request.getMethod();//获取请求方式System.out.println(ip);System.out.println(method);getLiuLanQi(request);protectMethod(request, response);}
//防盗链public void protectMethod(HttpServletRequest request,HttpServletResponse response) {String url = request.getHeader("referer");System.out.println(url);if(url != null && url.equalsIgnoreCase("http://localhost:8080/day10/MyHtml.html") ) {System.out.println("hi");}else {response.setStatus(302);response.setHeader("Location","/day10/MyHtml.html");System.out.println("重定向");}}
//判断浏览器的类型public void getLiuLanQi(HttpServletRequest request) {String user = request.getHeader("User-Agent");if(user != null) {String userNoC = user.toLowerCase();if(userNoC.contains("chrome")) {System.out.println("浏览器类型:谷歌" );}else if(userNoC.contains("firefox/")) {System.out.println("浏览器类型:火狐");}else {System.out.println("浏览器类型:IE");}}else {System.out.println("null");}}
}

应用2获取URL路径

/***  获取请求URLhttp://localhost:8080/day10_2/AServlet?username=xxx&password=yyy> String getScheme():获取协议,http> String getServerName():获取服务器名,localhost> String getServerPort():获取服务器端口,8080> *****String getContextPath():获取项目名,/day10_2> String getServletPath():获取Servlet路径,/AServlet> String getQueryString():获取参数部分,即问号后面的部分。username=xxx&password=yyy> String getRequestURI():获取请求URI,等于项目名+Servlet路径。/day10_2/AServlet> String getRequestURL():获取请求URL,等于不包含参数的整个请求路径。http://localhost:8080/day10_2/AServlet* **/
public class DServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println(request.getScheme());System.out.println(request.getServerName());System.out.println(request.getServerPort());System.out.println(request.getContextPath());System.out.println(request.getServletPath());System.out.println(request.getQueryString());System.out.println(request.getRequestURI());System.out.println(request.getRequestURL());}}

应用3获取请求参数

/*** * 请求参数:有一个参数一个值的,还有一个参数多个值!> *****String getParameter(String name):获取指定名称的请求参数值,适用于单值请求参数> String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求参数> Enumeration<String> getParameterNames():获取所有请求参数名称> *****Map<String,String[]> getParameterMap():获取所有请求参数,其中key为参数名,value为参数值。**/
public class EServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request,response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");//调用他来解决乱码问题的,不会的可以看我写的解决乱码的那一篇String name = request.getParameter("name");String password = request.getParameter("password");String[] aihao = request.getParameterValues("aihao");response.setHeader("content-type", "text/html;charset=utf-8");PrintWriter pw = response.getWriter();pw.println("name:" + name + "<br/>");pw.println("password:" + password + "<br/>");pw.print("aihao");for (int i = 0; i < aihao.length; i++) {switch (i) {case 1:pw.print("吃饭");break;case 2:pw.print("睡觉");break;case 3:pw.print("打豆豆");break;default:break;}}pw.close();}}
<!-- 用于发送请求的html -->
<html><head><title>denglu.html</title><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><form action="/day10/EServlet" method="post"><!-- 通过post方法提交 -->姓名:<input type="text" name="name"/><br/>密码:<input type="password" name="password"><br/>爱好:<input type="checkbox" name="aihao" value="1"/>吃饭<input type="checkbox" name="aihao" value="2"/>睡觉<input type="checkbox" name="aihao" value="3"/>打豆豆<input type="submit" value="提交"></form></body>
</html>

应用4设置request对象属性

用来实现同一个应用程序servlet之间值得传递,我们还用到了转发

/*** ** request域Servlet中三大域对象:request、session、application,都有如下三个方法:> void setAttribute(String name, Object value)> Object getAttribute(String name)> void removeAttribute(String name);> 同一请求范围内使用request.setAttribute()、request.getAttribute()来传值!前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。**/
public class FServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setAttribute("name","weijinhao");request.setAttribute("password", "123");RequestDispatcher rd = request.getRequestDispatcher("/GServlet");rd.forward(request, response);}}
public class GServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String name = (String)request.getAttribute("name");String password = (String)request.getAttribute("password");response.setHeader("content-type", "text/html;charset=utf-8");PrintWriter pw = response.getWriter();pw.println("name:" + name + "<br/>");pw.println("password:" + password + "<br/>");pw.close();}}

好了,request的用法大致就是这摸多了。

让我们来看看response对象吧。

response对象的使用

http协议定义了响应浏览器的格式:

响应行

响应头

空格

响应体

response对象的大致应用是用在设置响应码,设置响应头,及设置响应正文。

应用1设置响应正文

/*** response的正文* 1,字符流* 2,字节流*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//String n = "hello javaweb";//byte[] b = n.getBytes();//字节流的使用/*ServletOutputStream outputStream = response.getOutputStream();outputStream.write(b);outputStream.close();*///字符流的使用/*PrintWriter p = response.getWriter();p.write(n);p.close();*///commoms工具包的使用FileInputStream fileInputStream = new FileInputStream("C:/Users/74087/Desktop/6226354_994604.jpg");byte[] b = IOUtils.toByteArray(fileInputStream);ServletOutputStream outputStream = response.getOutputStream();outputStream.write(b);outputStream.close();}}

应用2 设置响应码和响应头

/***response 的响应码*1, sendError(int sc)//发送错误代码*2, sendError(int sc, java.lang.String msg) //发送错误代码及描述*3, setStatus(int sc) //发送成功响应代码*response 的响应头*1, setDateHeader(java.lang.String name, long date) *2, setHeader(java.lang.String name, java.lang.String value) *3, setIntHeader(java.lang.String name, int value) *   下面的和上面的作用一样但是是为了进行多值的添加*   addDateHeader(java.lang.String name, long date) *   addHeader(java.lang.String name, java.lang.String value) *   addIntHeader(java.lang.String name, int value) */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//sendNum(response);//sendRe(response);//refresh(response);//noCache(response);}//禁用浏览器缓存public void noCache(HttpServletResponse response) {response.setHeader("Cache-Control","no-cache");response.setHeader("pragma","0");response.setHeader("expires","no-cache");}//自动跳转public void refresh(HttpServletResponse response) {response.setHeader("refresh", "5;url=http://www.baidu.com");}//重定向的使用public void sendRe(HttpServletResponse response) {response.setStatus(302);response.setHeader("Location", "http://www.baidu.com");}public void sendNum(HttpServletResponse response) throws IOException {response.setStatus(200);response.sendError(404);response.sendError( 404, "ser accept your request but i don't want to you see my web page");}}

OK,我们就说这摸多吧!挺简单的没必要打那摩多的字来解释。至少我是这样认为的。

request与response的用法相关推荐

  1. Request和response的用法总结

    Request 个我总结:只要记住 只要是有关于客户端请求的信息,都可以藉由它来取得,例如请求标头.请求方法.请求参数.使用者IP等等信息. 3.什么情况下为响应?什么情况下为请求? 简单一句话,请求 ...

  2. request 和response

    当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...

  3. Scrapy - Request 和 Response(请求和响应)

    Requests and Responses:http://doc.scrapy.org/en/latest/topics/request-response.html Requests and Res ...

  4. java创建response对象_javaweb入门-----request与response的作用

    request对象和request对象的原理 1.request和response对象request对象和request对象的原理时由服务器创建的,我们来使用它们 2.request对象是来获取请求消 ...

  5. Request和Response的概述及其方法

    Request和Response的概述 Request是请求对象,Response是响应对象 ServletRequest和HttpServletRequest是继承关系,并且两个都是接口,接口是无法 ...

  6. Request对象的一般用法

    Request是HttpRequest的派生类,主要的工作是从客户端获取信息,包括浏览器的种类,用户输入表单中的数据,Cookies中的数据和客户端认证等.在说Request对象的具体用法之前,先来说 ...

  7. Python爬虫5.3 — scrapy框架spider[Request和Response]模块的使用

    Python爬虫5.3 - scrapy框架spider[Request和Response]模块的使用 综述 Request对象 scrapy.Request()函数讲解: Response对象 发送 ...

  8. response java_java中response对象用法实例分析

    本文实例讲述了java中response对象用法.分享给大家供大家参考,具体如下: 动作元素用于运行时在服务器端结束当前页面的执行,并从当前页面转向指定页面. 使用response对象的setHead ...

  9. request的基本使用用法

    urllib.request基本使用用法 (1)基本用法 url = "http://www.baidu.com/"# 获取response对象response = urllib. ...

最新文章

  1. 运营人,你敢转发给你老板看吗?
  2. OSI参考模型与TCP/IP协议的比较研究
  3. 利用iframe实现ajax 跨域通信的解决方案
  4. paho mqtt client调试记录
  5. 2018年广东工业大学文远知行杯新生程序设计竞赛 1004 明日会吹明日的风β
  6. MacosX 下GCC编译指定版本的代码
  7. pojo java_什么是POJO,JavaBean?
  8. 【MySql】100问
  9. SmmsForTypecho sm.ms 图床的typecho 插件 ,欢迎 star,pr
  10. 中国内地最高电影票房收入列表
  11. 应用程序正常初始化(0xc0000160)失败
  12. Mac 系统下 xcode 卸载 清理
  13. 通过实例学Python爬虫(一)——认识HTML网页与爬虫基础框架
  14. php 微信 图片 文字 朋友圈,朋友圈实现图片+文字转发功能(必看篇)
  15. html页面中艺术字,html 生成艺术字
  16. STM32F4深入学习【RCC】
  17. c语言地震子波6,地震子波显示及合成地震记录
  18. vue2 项目中引入iconfont
  19. [渝粤教育] 西南科技大学 预算会计 在线考试复习资料2021版(1)
  20. 没文化真可怕,一个IIS7.5不能打开“默认文档”的问题,折腾半天

热门文章

  1. 浏览器上查看微信公众号的所有历史文章
  2. c语言 linux系统 delay,Linux下实现秒级定时任务的两种方案
  3. ALK8266WIFI解决方案支持常见普通单片机实现WIFI高速传输和许多实用功能,实测速度超过M字节每秒
  4. 用MATLAB作微粉环节,电力系统分析理论课本习题MATLAB做.doc
  5. CSS——去除iframe边框
  6. 软件测试——linux操作(目录管理、文档编辑)
  7. Spark日志,及设置日志输出级别
  8. LeetCode——1646. 获取生成数组中的最大值
  9. 9种小程序赚钱方法!看懂的人已经在行动了
  10. 基于MATLAB的人脸识别提纲