Request和Response
当Web容器收到客户端发送的http请求,会在Servlet初始化之后,service调用之前创建HttpServletRequest和HttpServletResponse对象。HttpServletRequest和HttpServletResponse对象分别封装了HTTP协议的请求(客户端实际请求信息)和响应信息(服务器默认响应信息)。
Request
请求行
GET请求:
请求行信息:
GET http://localhost:8080/TomcatDemo/demo HTTP/1.1
1
2
3
POST请求:
请求行信息:
POST http://localhost:8080/TomcatDemo/demo HTTP/1.1
1
2
3
HttpServletRequest对象通过方法获取对应的信息。
getMethod():获取请求方式。
getRequestURL():获取请求的URL。
getRequestURI():获取请求的URI。
getContextPath():获取当前应用的虚拟目录。
如:
out.println("请求方式 : "+request.getMethod());
out.println("请求URL : "+request.getRequestURL());
out.println("请求URI : "+request.getRequestURI());
out.println("ContextPath : "+request.getContextPath());
结果显示:
请求方式 : GET
请求URL : http://localhost:8080/TomcatDemo/my
请求URI : /TomcatDemo/my
ContextPath : /TomcatDemo
1
2
3
4
5
6
7
8
9
10
11
请求消息头(关于HTTP的知识)
请求消息头的内容比较多,可以通过getHeaderNames(),获取所有消息头信息,通过getHeader(String name),获取name对应的值。
如:
servlet代码:
Enumeration<String> headers = request.getHeaderNames();
String name = "";
while (headers.hasMoreElements()){
name = headers.nextElement();
out.println(name+" : "+ request.getHeader(name));
}
显示结果:
host : localhost:8080
connection : keep-alive
upgrade-insecure-requests : 1
user-agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
accept : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
accept-encoding : gzip, deflate, sdch, br
accept-language : zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
请求正文
请求正文不在GET请求方式中使用,一般是POST请求通过请求正文来传递数据。
获取表单数据相关的方法
getParameter(String name):根据表单的属性名获取对应点数据。
getParameterNames():获取表单所有的属性名。
getParameterMap():获取所有表单数据,以Map的形式封装
getInputStream():获取以字节流的表单数据。
获取非表单数据相关的方法
setAttribute():
getAttribute():
removeAttribute():
与转发相关的方法:
getRequestDispatcher()
RequestDispatcher类
forward():转发的方法
include():请求包含
HttpServletRequest对象还可以获取客户端的ip地址,以及本机ip地址。
如:
servlet代码:
out.println("remote address: "+request.getRemoteAddr());
out.println("remote host:"+request.getRemoteHost());
out.println("remote port:"+request.getRemotePort());
out.println("local address: "+request.getLocalAddr());
out.println("local name:"+request.getLocalName());
out.println("local port: "+request.getLocalPort());
显示结果:
remote address: 192.168.2.103
remote host:192.168.2.103
remote port:57721
local address: 192.168.2.103
local name:DESKTOP-GCGM9LM
local port: 8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
除此之外,还有一个编码等信息,这里就不一一介绍了。
下面是GET和POST的请求信息的截图,如下:
GET请求:
POST请求:
Response
响应行
setStatue(int sc) 设置响应状态码
响应消息行:
HTTP/1.1 200 OK
1
2
响应头(关于HTTP的知识)
sendRedirect():请求重定向
setHander():设置响应头信息
//告诉响应头的编码方式。
response.setHeader("content-type", "text/html;charset=UTF-8");
//告知客户端不缓存
response.setHeader("pragma", "no-cache");
response.setHeader("cache-control", "no-cache");
response.setDateHeader("expires", 0);
//文件下载
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename,"UTF-8"));
//刷新
response.setHeader("refresh", "3");//每3秒刷新一次
//3秒后刷新image.html网页
response.setHeader("refresh", "3;url=/TomcatDemo/image.html");
//重定向
response.setStatus(HttpServletResponse.SC_FOUND);//状态码302
//设置重定向的地址
response.setHeader("location", "/TomcatDemo/image.html");
//重定向的另一种写法
response.sendRedirect("/TomcatDemo/image.html");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
响应正文
getWrite():字符流传输(文本,json,html等)
getOutputStream():字节流传输(图片音视频等二进制文件)
setContentType():告诉客户端使用什么编码方式。
setCharacterEncoding():告诉服务端用什么编码方式。
---------------------
【转载】
作者:张行之
来源:CSDN
原文:https://blog.csdn.net/qq_33689414/article/details/56840638
版权声明:本文为博主原创文章,转载请附上博文链接!
|
|