Request和Response

复习

1、写出Servlet获取请求参数
2、写出Servlet实现页面跳转的方式
3、写出Servlet的生命周期
4、写出Servlet的两种配置方式
5、写出ServletContext的常用方法

回顾

1、Servlet获取请求参数
2、Servlet实现页面跳转

内容

1、HTTPServletResponse的使用
2、HTTPServletRequest的使用

目标

1、掌握HTTPServletResponse的使用
2、熟悉HTTPServletRequest的使用

作为后台开发人员,我们大多时候都在接收处理用户请求,给予用户响应,为了方便操作,服务器软件将请求和响应封装成了Request和Response,我们今天就讲解两个对象的操作!

第七章 Response讲解

7.1 Response简介

​ 定义辅助 servlet 将响应发送到客户端的对象。servlet 容器创建 ServletResponse 对象,并将它作为参数传递给 servlet 的 service 方法。 要发送 MIME 正文响应中的二进制数据,请使用 #getOutputStream 返回的 ServletOutputStream。要发送字符数据,请使用 #getWriter 返回的 PrintWriter 对象。要混合二进制数据和文本数据,例如要创建 multipart 响应,请使用 ServletOutputStream 并手动管理字符部分。 可使用 #setCharacterEncoding 和 #setContentType 显式指定 MIME 正文响应的 charset,或使用 #setLocale 方法隐式指定它。显式指定优先于隐式指定。如果未指定 charset,则将使用 ISO-8859-1。setCharacterEncoding、setContentType 或 setLocale 方法必须在调用 getWriter 之前,并且必须在提交采用要使用的字符编码的响应之前调用。

7.2 HttpServletResponse介绍

扩展 ServletResponse 接口以提供特定于 HTTP 的发送响应功能。例如,该接口拥有访问 HTTP 头和 cookie 的方法。 客户端向服务器发起的都是HTTP协议操作,所以我们大部分使用HttpServletResponse对象作为直接操作对象!

7.3 HttpServletResponse 常用API介绍
方法名称作用
setStatus(int code)设置响应状态码
setHeader(name,value)设置响应信息头
setCharacterEncoding(String);设置编码格式
setContentType(String)设置返回数据mimetype
getWriter()获取字符输出流
getOutputStream()获取字节输出流
7.4 设置返回字符编码格式
7.5 Response练习
  1. 用户下载服务器图片

     
  1. 页面中添加验证码

    1. 项目中添加第三方jar包!validatecode.jar
    2. 创建返回验证码的servlet!
     
    1. 页面中使用当前servlet
     

第八章 Request讲解

8.1 ServletRequst介绍

定义将客户端请求信息提供给某个 servlet 的对象。servlet 容器创建 ServletRequest 对象,并将该对象作为参数传递给该 servlet 的 service 方法。

8.2 HttpServletRequest介绍

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。

小结: 同响应相同,客户端请求协议都是基于HTTP所以我们选用HttpServletRequest来操作用户发送过来的请求的数据!

8.3 HttpServletRequest常用API
 
8.4 获取请求数据练习
 

8.5 封装请求参数
 

​ 原生方式进行解析

 
 
8.6 Servlet如何处理HTTP协议
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的HttpServletRequest对象、和代表响应的HttpServletResponse对象。
HttpServletRequest和HttpServletResponse对象即然代表请求和响应,那我们要获取客户端提交过来的数据,只需要找HttpServletRequest对象就行了。要向客户端输出数据,只需要找HttpServletResponse对象就行了
8.6.1 HttpServletRequest
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息
获得客户端信息
  getRequestURL方法返回客户端发出请求时的完整URL。
  getRequestURI方法返回请求行中的资源名部分。
  getQueryString 方法返回请求行中的参数部分。
  getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
  getRemoteAddr方法返回发出请求的客户机的IP地址。
  getRemoteHost方法返回发出请求的客户机的完整主机名。
  getRemotePort方法返回客户机所使用的网络端口号。
  getLocalAddr方法返回WEB服务器的IP地址。
  getLocalName方法返回WEB服务器的主机名。
获得客户端请求头
  getHeader(string name)方法:获取指定名称的String值
  getHeaders(String name)方法:获取指定名称的Enumeration值
  getHeaderNames()方法:获取所有的请求消息头的名称
获得客户机端请求参数(客户端提交的数据)
getParameter(String)方法(常用):获取指定参数的值
getParameterValues(String name)方法(常用):获取指定参数的所有的值
getParameterNames()方法(不常用):获取所有的请求参数
getParameterMap()方法(编写框架时常用):获取所有的请求参数和对应的值

代码如下所示:

 
8.6.2 HttpServletResponse
HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。
向客户端(浏览器)发送响应头的相关方法:
 addDateHeader:把给定的名字和日期值加入到响应的头部 
 addHeader:给定的名字和和数值加到响应的头部
 addIntHeader:将给定的名字和整数值加到一个相应的头部
 containsHeader:是否指定的响应消息头部已被设置过了
 setDateHeader:设置带有给定的名字和数值的响应消息头  
 setHeader:设置带有给定的名字和数值的响应消息头
 setIntHeader:设置带有给定的名字和整数值的响应消息头
 setContentType:设置响应内容的格式
 addCookie:新增Cookie
设置状态响应码:
setStatus:设置Http协议的状态响应码
负责向客户端(浏览器)发送数据的相关方法:
getOutputStream:获取输出字节流向客户端写出内容
getWriter:获取输出字符流向客户端写出内容
URL重定向:
encodeURL:可以对url进行重定向,也就是将JSESSIONID传递

代码如下所示:

 

作业题

1.将用户登录验证 修改为连接数据版本
	登录成功 进入图书列表页面
2.将购物车功能 修改为连接数据库版本
	图书列表页面-->
	   点击图书名称 -->
		图书详细信息页面-->
			点击添加进购物车-->将数据添加入购物车中
	   点击查看购物车 -->查看购物车中的图书
	                  -->点击清空购物车 执行清空 
				清空后显示提示信息"购物车已被清空"
				跳转回图书列表页

面试题

1、request.getAttribute()和request.getParameter()的区别