跟光磊学java -HttpServletrequest
Http(HyperText Transfer Protocol)表示超文本传输协议,传输HTML文件,是一种远程调用协议
Http的链接通常都是短链接的,协议的底层非常复杂,但是客户端(浏览器)和服务器(Tomcat)都封装了HTTP协议,因此我们Java程序员只需要对Http协议了解即可。
http协议是互联网上使用最多的协议,所有WWW开头的都要遵守HTTP协议或者是HTTPs协议
Http协议的作用就是用于定义web浏览器和web服务器之间交互数据的过程以及数据本身的内容
Http协议主要包含请求和响应两部分。
Http请求包含请求行,请求头,请求体(请求正文)三部分
Http响应包含响应行,响应头,响应体三部分
Http请求
http请求是客户端主动发给服务器,其目的是i想要传输数据给服务器(注册,登录)或者想要访问服务器提供的服务。
Http请求包含请求行,请求头,请求体(请求正文)三部分
请求行包含请求方式,请求行和协议版本三部分
请求头 由一系列的键值对组成
- User-Agent 浏览器的信息
- Content-Type 内容类型 客户端告诉服务器,客户端传输数据的MIME Type 类型
- Cookie 这是请求头中最重要的信息之一,一种会话技术
- Date请求发送到额日期和时间
- Accept-Charset 浏览器可以接受的字符编码集
- Accept 指定客户端能够接受的内容类型 Accept :text/plain,text/html
- refer 从哪里来的(之前访问那个资源)防盗链
请求体
- Get请求没有请求体,因为请求数据是跟在请求路径的后面
- POST是有请求体,请求数据放在请求体中
HttpServletRequest的介绍
扩展servletRequest接口以提供Http Servlet的请求信息。
servlet容器创建一个HttpServletRequest对象并将其作为参数传递给servlet的服务方法(doGet,doPost等)。
在servlet ApI中定义了一个接口HttpServletRequest,它继承ServletRequest接口,专门用来封装HTTP请求消息,由于Http请求分为请求头,请求行,请求体三部分,因此在HttpServletRequest接口下可以通过对应的方法获取Http请求行,请求头,请求体的数据
当客户端发送HTTp请求之后,Tomcat会接受客户端的请求,解析Http请求的数据,并且封装到HttpServletRequest对象中,然后再调用servlet对象的doGet()或者doPost()方法处理客户端请求时,将请求的数据传递给这两个方法的参数HttpServletRequest对象中,因此可以通过HtttpServletRequest的相关方法获取请求数据。
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
HttpServletRequest作用
- 存放请求数据,因此可以获取HTTP请求行,请求头,请求体的数据
- 实现请求转发
- 作为域对象共享数据
HttpServletRequest获取请求数据
- 请求行
System.out.println("HttpServletRequest获取请求行数据 --》 获取请求的方式"+request.getMethod());
System.out.println("HttpServletRequest获取请求行数据 --》 获取请求的URI"+request.getRequestURI());
System.out.println("HttpServletRequest获取请求行数据 --》 获取请求的URL"+request.getRequestURL());
----------------------------------------终端显示-----
HttpServletRequest获取请求行数据 --》 获取请求的方式GET
HttpServletRequest获取请求行数据 --》 获取请求的URI/javaweb/request
HttpServletRequest获取请求行数据 --》 获取请求的URIhttp://localhost:8080/javaweb/request
HttpServletRequest实现请求转发
服务器的一个资源路径跳到了另一个地址,例如添加数据之后要转到展示数据列表页面,删除数据以后也要转到数据列表页面。
请求转发跳转的一个特征是由服务器执行的,所以浏览器地址栏的地址是不会发改变的
request.getRequestDispatcher(path).forward(request,response);
//绝对路径 是以/开头的路径对应请求转发而言在完整Url基础上省略项目路径,对于非请求转发而言在完整的URL基础上省略服务器路径
// 相对路径 不是以斜杠开头的 ,是以目标资源路径相对与当前资源路径
//浏览器请求资源的地址(当前资源路径) http://localhost:8080/javaweb/forward
//目标地址(目标资源路径) http://localhost:8080/javaweb/forward/forward.html
HttpServletRequest作为域对象共享数据
ServletContext和HttpServletRequest都是域对象那个,这种容器主要用于Servlet和servletJSP之间传输数据
ServletContext是整个应用的所有Servlet之间共享数据,无论多少次,只要在这个应用中的中的Servlet都可以共享
HttpServletRequest的作用范围是一次请求之内有效,可以在一个servlet 中通过请求转发跳转过去,这样浏览器的地址栏仍然是同一个地址,可以实现同一个请求下共享数据
HttpServletRequest必须依靠转发
|