1.请求和响应的概述:
什么请求:在浏览器地址栏输入地址,点击回车请求服务器,这个过程就是一个请求过程。
什么响应:服务器根据浏览器发送的请求,返回数据到浏览器在网页上进行显示,这个过程就称之为响应。

2.HttpServletResponse对象
HttpServletResponse是一个接口,它的父接口是ServletResponse,在开发中通常使用HttpServletResponse
响应信息分为三部分:响应行、响应头、响应正文(响应体)
1.1 发送状态码的相关方法:
>>>1.设置状态码
setStatus(int sc) :参数就是状态码。
setStatus(int sc, String sm) :第一个参数表示状态码,第二个参数 就状态码的描述。
常见的状态码:200 响应成功
302 重定向
404 请求资源找不到
500 服务器代码出异常。

3.HttpServletRequest请求对象
HttpServletRequest它是一个接口,它的父接口ServletRequest,在开发中,常用的是带协议的请求对象。
请求消息:请求行,请求头,请求参数。
1.1 HttpServletRequest请求对象
1.获取请求行消息的相关方法:
常用的请求行方法:
>>> 1.获取请求提交的方式: getMethod();
>>> 2.获取请求的协议: getProtocol();
>>> 3.获取项目名称:getContextPath();
>>> 4.获取servlet路径:getServletPath();
>>> 5.获取请求路径: getRequsetURI(),getRequestURL();
uri对应的值:/项目名称/servlet路径
url对应的值:http://localhost:8080/uri

 2.获取请求消息头相关的方法>>> 1. 根据消息头,获取值: String value = getHeader(消息头的名称);>>> 2. 获取所有的消息头: Enumeration er = getHeaderNames();根据Referer请求消息头,做一个防盗链的案例:难点:怎么判断这个发起的下载请求是从别的网站上发起的?解决方法:根据Referer请求头对应的值,是否包含了服务器的名称如果包含,就说明是从本网站下载的,否则就不是。3.获取请求参数相关的方法:>>> 1.根据name属性值,获取用户输入的值:String value = getParameter(name属性对应的值);>>> 2.根据name属性值,获取用户选择的值:String[] vaules = getParameterValues(name属性对应的值);>>> 3.没有参数,获取所有值:Map<String ,String[]> map = getParameterMap();4.解决请求参数的中文乱码问题:中文乱码处理分两种情况:第一种情况:处理get方式提交的中文乱码使用的String的构造方法解决中文乱码:new String(字节数组,编码格式);代码:String newvalue = new String(value.getBytes("ISO8859-1"),"utf-8");第二种情况:处理post请求的中文乱码问题:post提交,会把参数首先提交到request对象的缓冲区中,缓冲区默认编码是ISO8859-1,不支持中文处理方法:把request缓冲区的编码给设置成支持中文的码表格式。代码:request.setCharacterEncoding("utf-8");5.通过Requset对象传递数据什么域对象:在一定的范围内,可以存值和取值。request域对象:在一次请求中,可以存值和取值。>>> 存值: setAttribute(String key,Object obj);>>> 取值:Object obj = getAttribute(String key);>>> 移除: removeAttribute(String key);1.2 RequestDispatcher接口在开发中访问到一个web资源后,需要服务器跳转到另一个资源去处理请求,可以通过sendRedirect重定向方法来实现,也可以RequestDispatcher转发对象的forward方法来实现。得到转发对象:RequestDispatcher forwardObj = request.getRequestDispatcher("另一个资源的路径");常用方法:>>> 1.实现请求转发:forwardObj.forward(request,response);>>> 2.实现请求包含:forwardObj.include(request,response);1. 请求转发:特点:发送了一次请求,响应一次,和request域对象配合使用,可以实现值的传递。转发路径:转发动作是在服务器内部实现的,所以转发路径不要携带项目名称。请求重定向:特点:发送了两次请求,响应了两次,不能和request域对象配合使用。重定向路径:重定向动作在浏览器端执行的,所以路径需要携带项目名称。2.请求包含:请求包含:在服务器内部完成的,路径不需要携带项目名称。

2.通过request获得请求行
获得客户端的请求方式:String getMethod()

获得请求的资源:

String getRequestURI()

StringBuffer getRequestURL()

String getContextPath() —web应用的名称

String getQueryString() ---- get提交url地址后的参数字符串

username=zhangsan&password=123

request.getRemoteAddr() — 获得访问的客户端IP地址request.getRemoteAddr() — 获得访问的客户端IP地址

public class LineServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1、获得请求方式String method = request.getMethod();System.out.println("method:"+method);//method:GET//2、获得请求的资源相关的内容String requestURI = request.getRequestURI();StringBuffer requestURL = request.getRequestURL();System.out.println("uri:"+requestURI);//uri:/WEB15/lineSystem.out.println("url:"+requestURL);//url:http://localhost:8080/WEB15/line//获得web应用的名称String contextPath = request.getContextPath();System.out.println("web应用:"+contextPath);//web应用:/WEB15//地址后的参数的字符串String queryString = request.getQueryString();System.out.println(queryString);//null//3、获得客户机的信息---获得访问者IP地址String remoteAddr = request.getRemoteAddr();System.out.println("IP:"+remoteAddr);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

3.通过request获得请求头
long getDateHeader(String name)

String getHeader(String name)

Enumeration getHeaderNames()

Enumeration getHeaders(String name)

int getIntHeader(String name)

//1.获得指定头
request.getHeader("User-Agent");
//2.获得所有头的名字
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()){String headerName = headerNames.nextElement();String headerValue = request.getHeader(headerName);System.out.println(headerName+":"+headerValue);
}

referer头的作用:执行该此访问的的来源

做防盗链

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><a href="/WEB15/referer">访问headerServlet资源</a><form action="/WEB15/line" method="get"><input type="text" name="username"><br><input type="password" name="password"><br><input type="submit" value="提交"><br></form>
</body>
</html>
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class RefererServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//对该新闻的来源进行判断String header = request.getHeader("referer");if(header!=null&&header.startsWith("http://localhost")){//是从自己的网站跳转过来的,可以看新闻response.setContentType("text/html;charset=UTF-8");response.getWriter().write("1000金牌");}else{response.getWriter().write("你是盗链者");}}

4.通过request获得请求体
请求体中的内容是通过post提交的请求参数,格式是:

username=zhangsan&password=123&hobby=football&hobby=basketball
key ---------------------- value

username [zhangsan]

password [123]

hobby [football,basketball]

String getParameter(String name)

String[] getParameterValues(String name)

Enumeration getParameterNames()

Map<String,String[]> getParameterMap()

public class ContentServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获得单个表单值String username = request.getParameter("username");System.out.println(username);String password = request.getParameter("password");//2.获得多个表单的值String[] hobbys = request.getParameterValues("hobby");for(String hobby : hobbys){System.out.println(hobby);}//3.获取所有请求参数的名称Enumeration<String> parameterNames = request.getParameterNames();while(parameterNames.hasMoreElements()){System.out.println(parameterNames.nextElement());}System.out.println("--------------------");//4.获得所有的参数,参数封装到一个Map<String, String[]>Map<String, String[]> parameterMap = request.getParameterMap();for(Map.Entry<String, String[]> entry : parameterMap.entrySet()){System.out.println(entry.getKey());for(String str : entry.getValue()){System.out.println(str);}System.out.println("--------------------");}  }public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

5.request的其他功能
1)request是一个域对象
request对象也是一个存储数据的区域对象

setAttribute(String name, Object o)

getAttribute(String name)

removeAttribute(String name)

注意:request域的作用范围:一次请求中

2)request完成请求转发

获得请求转发器----path是转发的地址

RequestDispatcher getRequestDispatcher(String path)

通过转发器对象转发

requestDispathcer.forward(ServletRequest request, ServletResponse response)

public class Servlet1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//向request域中存储数据request.setAttribute("name", "tom");//servlet1将请求转发给servlet2RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");//执行转发的方法dispatcher.forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
public class Servlet2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//从request域中取出数据Object attribute = request.getAttribute("name");response.getWriter().write("hello haohao..."+attribute);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

6.request的其他细节
1.ServletContext域与request域的生命周期比较
ServletContext域

创建:服务器启动

销毁:服务器关闭

域的作用范围:整个WEB应用

request域

创建:访问时创建request

销毁:响应结束request销毁

域的作用范围:一次请求中

2.转发与重定向的区别
1)重定向两次,转发一次请求

2)重定向地址栏的地址变化,转发地址不变

3)重定向可以访问外部网站,转发不能访问内部资源

4)转发的性能优于重定向

3.客户端地址与服务器端地址的写法
客户端地址:

是客户端去访问服务器的地址,服务器外部地址,特点:写上web应用名称

(直接输入地址,重定向)

服务器端地址:

服务器内部资源的跳转的地址,特点:不需要写web应用的名称

javaweb:request请求对象(5)相关推荐

  1. JavaWeb—Request请求对象

    目录 一.概述 二.Request对象 2.1 Request继承体系 小结 2.2 Request获取请求数据 2.2.1 获取请求行数据 2.2.2 获取请求头数据 2.2.3 获取请求体数据 小 ...

  2. Servlet的学习之Request请求对象(2)

    在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用Ht ...

  3. php request对象,PHP 中TP5 Request 请求对象的实例详解

    PHP 中TP5 Request 请求对象 public/index.php app\index\controller\Index.php <?php namespace app\index\c ...

  4. Servlet的学习之Request请求对象(3)

    本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...

  5. Python Flask Web 第八课 —— request 请求对象

    from flask import request 请求对象包含客户端发出的所有请求信息. 1. request.headers request.headers.get('User-Agent') 获 ...

  6. $.post把表单对象传递过去_第二章 第三节 Request请求对象详解

    Request对象和Response对象是必须熟悉的. Request对象负责请求的构造和处理 Response对象负责返回资源的解析和处理 一.Request对象参数 Request(url[, c ...

  7. Request请求对象

    一.Request对象由服务器创建,我们使用 浏览器访问服务器资源原理: 二.Request体系结构 其中,servlet 的service()方法参数列表是 servletRequest对象, Ht ...

  8. Flask框架——请求钩子与request请求对象

    目录 请求钩子 request对象 请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接 在请求开始时,根据需求进行权限校验 在请求结束时,指定 ...

  9. ThinkPHP5.0中Request请求对象的使用和常用的操作

    request的使用 第一种方法 在控制器头部添加request引用 然后在方法里调用 'instance'类 然后在调用方法: public function index($name='name') ...

最新文章

  1. SMOTE过采样方法
  2. leetcode算法题--二分查找
  3. Android 手把手教您自定义ViewGroup
  4. 1.2 matlab数值数据的输出格式
  5. 【面试测试题】贪婪是好事
  6. Windows驱动开发学习笔记(一)—— 环境配置第一个驱动程序
  7. ABAP代码检查的注意事项有哪些
  8. c语言 判断日期时间_C语言中不得不知的那些“关键字”和“控制语句”
  9. the computational graph needed to compute the outputs报错解决
  10. 深度学习笔记-卷积神经网络CNN与循环神经网络RNN有什么区别?
  11. 第三天,编码设置,主键设置与删除,无关子查询,相关子查询,表与表之间的关系...
  12. linux常用内核端口,基于Linux下的/O端口和I/O内存详解
  13. 马哥linux多道处理程序,马哥linux课堂笔记
  14. 计算机辅助设计与制造实例教程答案,计算机辅助设计实例教程= Example Course of Computer Aided Design...
  15. c语言链表课件,C语言链表详解ppt课件.ppt
  16. python之WeChat撩妹神奇
  17. 攻防世界 logmein wp
  18. win10安装账户卡住_安装win10系统卡住不动的原因和处理方法
  19. js字符串转换成数字
  20. 如果说未来不需要硬盘了,你会不会感到惊讶?

热门文章

  1. 谷歌浏览器书签栏书签丢失问题
  2. Rock5 KubeSphere常规部署
  3. 离散数学(四):命题函数与真值公式
  4. tensorflow教程中的mnist数据下载脚本
  5. cloc工具 linux,Linux下源代码行数统计工具(sloccount, cloc等)
  6. 将Yolo格式标注文件转换为VOC格式
  7. ORECAL分析函数
  8. 为什么LPC1788不支持Linux
  9. 获取android终端型号,Android 获取信息终端
  10. arcgis android gif,一种基于动态地图符号的移动GIS可视化方法与流程