WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。HTTP是 hypertext transfer protocol(超文本传输协议)的简写,它是 TCP/IP 协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。
HTTP协议的版本 HTTP/1.0、HTTP/1.1、HTTP-NG
在浏览器和服务器要进行沟通的方式是问答式。每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。这种现象表明,http协议是一种无状态的协议。
HTTP协议在进行沟通的时候,使用消息为载体进行沟通。浏览器向服务器发送的消息,成为HTTP请求消息,服务器向浏览器发送的消息,成为响应消息。
请求消息的结构:
一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
一个使用GET方式的请求消息中不能包含实体内容,只有使用POST、PUT和DELETE方式的请求消息中才可以包含实体内容。
响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看到的内容。
GET和POST是两种常见的传递参数方式。
常见使用GET方式传递参数的场景有:
使用GET方式向服务器传递参数的格式如下所示:
http://www.xxx.net/counter.jsp?name=lc&password=123
GET 方式传参,一般将传递的参数放在URL的后面,且GET方式传送的数据量一般限制在1KB以下。
常见使用POST方式传递参数的场景有:
POST 请求消息的格式为:
POST /counter.jsp HTTP/1.1
referer: http://localhost:8080/Register.html
content-type: application/x-www-form-urlencoded
host: localhost:8080
content-length: 43
name=zhangsan&password=123
在JavaWeb开发中,所有的业务逻辑都是在Servlet中实现,而将HTTP通信的功能有WEB服务器来负责。常见的,将Tomcat作为Servlet的容器,负责接收来自客户端的请求,并将参数传递给Servlet中的业务逻辑代码。
Servlet 的 service() 方法用于应答请求: 因为每次请求都会调用 service() 方法
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException
{
// 相关业务代码
}
ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.
这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.
其交互图如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JRoggLYJ-1581674736376)(en-resource://database/13425:0)]
ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
①. 获取请求参数:
String getParameter(String name):
根据请求参数的名字, 返回参数值.
若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.
String[] getParameterValues(String name):
根据请求参数的名字, 返回请求参数对应的字符串数组.
返回参数名对应的 Enumeration 对象,
类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.
Map getParameterMap():
返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.
ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.
①. getWriter():
返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.
②. response.setContentType(“application/msword”);
设置响应的内容类型:
Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http。 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类,在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类。
HttpServletRequest: 是 SerlvetRequest 的子接口.HttpServletResponse: 是 SerlvetResponse 的子接口. 针对于 HTTP 请求所定义. 这两个类中包含了大量获取 HTTP 请求相关的方法.
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestURI = httpServletRequest.getRequestURI();
System.out.println(requestURI); // /day_29/loginServlet
String queryString = httpServletRequest.getQueryString();
System.out.println(queryString); //user=atguigu&password=123456&interesting=game&interesting=party&interesting=shopping
String servletPath = httpServletRequest.getServletPath();
System.out.println(servletPath); // /loginServlet
返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印
到客户的浏览器上.
response.setContentType("application/msword");
void sendRedirect(String location):
本文首先介绍了HTTP协议的基本知识,然后重点介绍了ServletRequest、ServletResponse及HttpServletRequest、HttpServletResponse这四个类的常见用法。