JavaWeb_Servlet_02篇

Posted 葡萄籽-June

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb_Servlet_02篇相关的知识,希望对你有一定的参考价值。

Servlet_之_HttpServletRequest_HttpServletResponse

本篇文章主要是总结HttpServletRequest、HttpServletResponse 的作用、用法等。



前言

在总结HttpServletRequest之前,先大致梳理一下HTTP、MIME等类型,以便于更好的理解HttpServletRequest、HttpServletResponse 。


HTTP 协议

客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫HTTP 协议。

HTTP 协议的请求格式

GET 请求

1、请求行
(1) 请求的方式GET
(2) 请求的资源路径[+?+请求参数]
(3) 请求的协议的版本号HTTP/1.1


2、请求头
key : value 组成不同的键值对,表示不同的含义。

POST 请求

1、请求行
(1) 请求的方式POST
(2) 请求的资源路径[+?+请求参数]
(3) 请求的协议的版本号HTTP/1.1

2、请求头
(1) key : value 不同的请求头,有不同的含义

空行

3、请求体
===>>> 就是发送给服务器的数据

常见的GET 请求、POST 请求

GET 请求

1、form 标签method=get
2、a 标签
3、link 标签引入css
4、Script 标签引入js 文件
5、img 标签引入图片
6、iframe 引入html 页面
7、在浏览器地址栏中输入地址后敲回车

POST 请求

form 标签method=post

HTTP 协议的响应格式

1、响应行
(1) 响应的协议和版本号
(2) 响应状态码
(3) 响应状态描述符

2、响应头
(1) key : value 不同的响应头,有其不同含义

空行

3、响应体---->>> 就是回传给客户端的数据

常用的响应码说明

响应头类型含义
1xx临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1XX响应
2xx服务器成功的接收了客户端请求
3xx客户端浏览器必须采取更多操作来实现请求
4xx发生错误,客户端似乎有问题
5xx服务器遇到错误而不能完成该请求
常见作用
200表示请求成功
302表示请求重定向
404表示请求服务器已经收到了,但要的数据不存在(请求地址错误)
500表示服务器已经收到请求,但服务器内部错误(代码错误)

MIME类型

MIME 是HTTP 协议中数据类型。
MIME 的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务。MIME 类型的格式是“大类型/小类型”

文件MIME类型
超文本标记语言文本.html ,.htmtext/html
普通文本.txttext/plain
RTF 文本.rtfapplication/rtf
GIF 图形.gifimage/gif
JPEG 图形.jpeg,.jpgimage/jpeg
au 声音文件.auaudio/basic
MIDI 音乐文件.mid,.midiaudio/midi,audio/x-midi
RealAudio 音乐文件.ra, .ramaudio/x-pn-realaudio
MPEG 文件.mpg,.mpegvideo/mpeg
AVI 文件.avivideo/x-msvideo
GZIP 文件.gzapplication/x-gzip
TAR 文件.tarapplication/x-tar

一、HttpServletRequest 类

1.1 作用

每次只要有请求进入Tomcat 服务器,Tomcat 服务器就会把请求过来的HTTP 协议信息解析好封装到Request 对象中。
然后传递到service 方法(doGet 和doPost)中给我们使用。可以通HttpServletRequest 对象,获取到所有请求的信息。

1.2 常用方法

常用方法作用
getRequestURI()获取请求的资源路径
getRequestURL()获取请求的统一资源定位符(绝对路径)
getRemoteHost()获取客户端的ip 地址
getHeader()获取请求头
getParameter()获取请求的参数
getParameterValues()获取请求的参数(多个值的时候使用)
getMethod()获取请求的方式GET 或POST
setAttribute(key, value);设置域数据
getAttribute(key);获取域数据
getRequestDispatcher()获取请求转发对象

1.3 获取请求参数

例如:

HTML

<body>
	<form action="http://localhost:8080/07_servlet/parameterServlet" method="get">
		用户名:<input type="text" name="username"><br/>
		密码:<input type="password" name="password"><br/>
		兴趣爱好:<input type="checkbox" name="hobby" value="cpp">C++
		<input type="checkbox" name="hobby" value="java">Java
		<input type="checkbox" name="hobby" value="js">javascript<br/>
		<input type="submit">
	</form>
</body>

java

public class ParameterServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
		// 获取请求参数
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		String[] hobby = req.getParameterValues("hobby");
		System.out.println("用户名:" + username);
		System.out.println("密码:" + password);
		System.out.println("兴趣爱好:" + Arrays.asList(hobby));
	}
}

二、HttpServletResponse 类

2.1 作用

HttpServletResponse 类和HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个Response 对象传递给Servlet 程序去使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息,如果需要设置返回给客户端的信息,都可以通过HttpServletResponse 对象来进行设置。

2.2 两个输出流的说明

输出流方法作用
字节流getOutputStream();常用于下载(传递二进制数据)
字符流getWriter();常用于回传字符串(常用)

【注】两个流同时只能使用一个。
使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。

2.3往客户端回传数据

public class Responseioservlet extends HttpServlet {
@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
		// 要求: 往客户端回传字符串数据。
		PrintWriter writer = resp.getWriter();
		writer.write("response's content!!!");
	}
}

[补]请求、响应的中文乱码解决

doGet 请求的中文乱码解决

// 获取请求参数
String username = req.getParameter("username");
//1 先以iso8859-1 进行编码
//2 再以utf-8 进行解码
username = new String(username.getBytes("iso-8859-1"), "UTF-8");

doPost 请求的中文乱码解决

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
		// 设置请求体的字符集为UTF-8,从而解决post 请求的中文乱码问题
		req.setCharacterEncoding("UTF-8");
		System.out.println("-------------doPost------------");
		// 获取请求参数
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		String[] hobby = req.getParameterValues("hobby");
		System.out.println("用户名:" + username);
		System.out.println("密码:" + password);
		System.out.println("兴趣爱好:" + Arrays.asList(hobby));
}

响应的乱码解决

// 它会同时设置服务器和客户端都使用UTF-8 字符集,还设置了响应头
// 此方法一定要在获取流对象之前调用才有效
resp.setContentType("text/html; charset=UTF-8");

以上是关于JavaWeb_Servlet_02篇的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb_Servlet_02篇

JavaWeb_Servlet篇_01

JavaWeb_Servlet篇_01

JavaWeb_Servlet篇_01

JavaWeb_Servlet篇_01

Codeigniter 助手重复 HTML 代码片段