JavaWeb入门(五)- Servlet与HttpServlet详解(下)

文章目录

        • 1. HTTP协议
          • 1.1 HTTP的问答方式
          • 1.2 HTTP的消息
            • 1.2.1 HTTP的请求消息
            • 1.2.2 HTTP的响应消息
          • 1.3 HTTP的请求方式
          • 1.3.1 GET 方式
          • 1.3.2 POST 方式
        • 2. 如何在 Serlvet 中获取请求信息
          • 2.1 ServletRequest 常见方法
          • 2.2 ServletResponse 常见方法
        • 3. HttpServlet
          • 3.1 HttpServletRequest 常见方法
          • 3.2 HttpServletResponse 常见方法
        • 4. 总结

1. HTTP协议

WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。HTTP是 hypertext transfer protocol(超文本传输协议)的简写,它是 TCP/IP 协议集中的一个应用层协议,用于定义WEB浏览器WEB服务器之间交换数据的过程以及数据本身的格式。

HTTP协议的版本 HTTP/1.0、HTTP/1.1、HTTP-NG

1.1 HTTP的问答方式

在浏览器和服务器要进行沟通的方式是问答式。每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。这种现象表明,http协议是一种无状态的协议。

1.2 HTTP的消息

HTTP协议在进行沟通的时候,使用消息为载体进行沟通。浏览器向服务器发送的消息,成为HTTP请求消息,服务器向浏览器发送的消息,成为响应消息。

1.2.1 HTTP的请求消息

请求消息的结构:
一个请求行若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

JavaWeb入门(五)- Servlet与HttpServlet详解(下)_第1张图片

JavaWeb入门(五)- Servlet与HttpServlet详解(下)_第2张图片

一个使用GET方式的请求消息中不能包含实体内容,只有使用POST、PUT和DELETE方式的请求消息中才可以包含实体内容。

1.2.2 HTTP的响应消息

响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看到的内容。

JavaWeb入门(五)- Servlet与HttpServlet详解(下)_第3张图片

1.3 HTTP的请求方式

GET和POST是两种常见的传递参数方式。

1.3.1 GET 方式

常见使用GET方式传递参数的场景有:

  1. 在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。
  2. 如果网页中的表单元素的method属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。

使用GET方式向服务器传递参数的格式如下所示:

http://www.xxx.net/counter.jsp?name=lc&password=123

GET 方式传参,一般将传递的参数放在URL的后面,且GET方式传送的数据量一般限制在1KB以下

1.3.2 POST 方式

常见使用POST方式传递参数的场景有:

  • 向WEB服务器端程序提交FORM表单中的数据。
    POST方式将各个表单字段元素及其数据作为HTTP消息的实体内容发送给WEB服务器,传送的数据量要比使用GET方式传送的数据量大得多。

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

2. 如何在 Serlvet 中获取请求信息

在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)]

2.1 ServletRequest 常见方法

ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.

①. 获取请求参数:

  • String getParameter(String name):

    根据请求参数的名字, 返回参数值.
    若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.

  • String[] getParameterValues(String name):

根据请求参数的名字, 返回请求参数对应的字符串数组.

  • Enumeration getParameterNames():
返回参数名对应的 Enumeration 对象,
类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法. 
  • Map getParameterMap():
    

    返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.

2.2 ServletResponse 常见方法

ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.

①. getWriter():
返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.

②. response.setContentType(“application/msword”);
设置响应的内容类型:

3. HttpServlet

Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http。 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类,在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类。

HttpServletRequest: 是 SerlvetRequest 的子接口.HttpServletResponse: 是 SerlvetResponse 的子接口. 针对于 HTTP 请求所定义. 这两个类中包含了大量获取 HTTP 请求相关的方法.

3.1 HttpServletRequest 常见方法
  1. 获取请求的 URI:
    HttpServletRequest httpServletRequest = (HttpServletRequest) request;	
	String requestURI = httpServletRequest.getRequestURI();
	System.out.println(requestURI); //  /day_29/loginServlet
  1. 若是一个 GET 请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串.
String queryString = httpServletRequest.getQueryString();
	System.out.println(queryString);          //user=atguigu&password=123456&interesting=game&interesting=party&interesting=shopping
  1. 获取请求的 Serlvet 的映射路径
String servletPath = httpServletRequest.getServletPath();
System.out.println(servletPath);  //  /loginServlet
3.2 HttpServletResponse 常见方法
  1. getWriter():

返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印
到客户的浏览器上.

  1. 设置响应的内容类型
response.setContentType("application/msword");
  1. 请求的重定向
void sendRedirect(String location): 

4. 总结

本文首先介绍了HTTP协议的基本知识,然后重点介绍了ServletRequest、ServletResponse及HttpServletRequest、HttpServletResponse这四个类的常见用法。

你可能感兴趣的:(JavaWeb)