A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 不二晨 金牌黑马   /  2019-3-8 10:39  /  972 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马