request对象的类是HttpServletRequest,提供了很多有实用价值的方法,把之前遇到过的常见方法总体看一遍
一些常见方法 主要是用来查看信息,显示在控制台上,request的信息显示在服务端:
request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)"
request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名"
request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
request.getRemoteHost(): 浏览器所处于的客户机的主机名
request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
request.getLocalAddr(): 服务器的IP地址
request.getLocalName(): 服务器的主机名
request.getMethod(): 得到客户机请求方式一般是GET或者POST
获取参数 所用到的方法:
request.getParameter(): 是常见的方法,用于获取单值的参数
request.getParameterValues(): 用于获取具有多值的参数,比如注册页面所提交的数据很多,可以是多选的。
request.getParameterMap(): 用于遍历所有的参数,并返回Map类型——因此也就需要一个map实例对象。
System.out.println("获取单值参数name:" + request.getParameter("name"));
String[] hobits = request.getParameterValues("hobits");
System.out.println("获取具有多值的参数hobits: " + Arrays.asList(hobits));
System.out.println("通过 getParameterMap 遍历所有的参数: ");
Map<String, String[]> parameters = request.getParameterMap();
Set<String> paramNames = parameters.keySet();
for (String param : paramNames) {
String[] value = parameters.get(param);
System.out.println(param + ":" + Arrays.asList(value));
}
获取头信息的常见方法:
request.getHeader() 获取浏览器传递过来的头信息。
比如getHeader(“user-agent”) 可以获取浏览器的基本资料,这样就能判断是firefox、IE、chrome、或者是safari浏览器
request.getHeaderNames() 获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息
访问示例Servlet获取如下头信息:
host: 主机地址
user-agent: 浏览器基本资料
accept: 表示浏览器接受的数据类型
accept-language: 表示浏览器接受的语言
accept-encoding: 表示浏览器接受的压缩方式,是压缩方式,并非编码
connection: 是否保持连接
cache-control: 缓存时限

用容器来装
Enumeration<String> headerNames= request.getHeaderNames();
while(headerNames.hasMoreElements()){
String header = headerNames.nextElement();
String value = request.getHeader(header);
System.out.printf("%s\t%s%n",header,value);
}
服务器端传参在MVC中有应用
response的用法:
1、响应内容设置:
PrintWriter pw= response.getWriter();
通过response.getWriter(); 获取一个PrintWriter 对象
可以使用println(),append(),write(),format()等等方法设置返回给浏览器的html内容。
2、设置响应格式
**response.setContentType(“text/html”);**在之前遇到过
“text/html” 是即格式 ,在request获取头信息 中对应的request.getHeader(“accept”).
“text/html” 是存在的,表示浏览器可以识别这种格式,如果换一个其他的格式, 比如 “text/other” ,浏览器不能识别,那么打开此servlet就会弹出一个下载的对话框,询问是否下载文件。
3、设置响应编码
设置响应编码有两种方式
- response.setContentType(“text/html; charset=UTF-8”);
- response.setCharacterEncoding(“UTF-8”);
建议使用 response.setContentType(“text/html; charset=UTF-8”); 比较省事。
这两种方式都需要在response.getWriter调用之前执行才能生效。
他们的区别在于
- response.setContentType(“text/html; charset=UTF-8”);
不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文
- response.setCharacterEncoding(“UTF-8”);
仅仅是发送的浏览器的内容是UTF-8编码的,至于浏览器是用哪种编码方式显示不管。 所以当浏览器的显示编码方式不是UTF-8的时候,就会看到乱码,需要手动再进行一次设置。
客户端跳转:
客户端有两种跳转
302 表示临时跳转
301 表示永久性跳转
302就是前面在客户端跳转章节用到过的
response.sendRedirect(“fail.html”);
301要使用另外的手段:
response.setStatus(301);
response.setHeader(“Location”, “fail.html”);
用户感受不出这两种跳转的区别,但是可以借助浏览器调试工具看到响应的头信息是:
301 Moved Permanently。
301和302的区别主要在搜索引擎对页面排名的时候有影响,这是属于SEO范畴的概念。
if ("admin".equals(name) && "123".equals(password)) {
request.getRequestDispatcher("success.html").forward(request, response);//服务端跳转
} else {
response.setStatus(301);
response.setHeader("Location", "fail.html");
}//客户端跳转
设置不使用缓存
使用缓存可以加快页面的加载,降低服务端的负担。但是也可能看到过时的信息,可以通过如下手段通知浏览器不要使用缓存
response.setDateHeader("Expires",0 );
response.setHeader("Cache-Control","no-cache");
response.setHeader("pragma","no-cache");
上述三段代码就是设置不使用缓存,和request的getHeader用意相反。
response对象的操作针对于浏览器而言 request是对服务端而言
本文详细介绍了Servlet中request对象的常用方法,包括获取URL、参数、头信息等,以及response对象如何设置响应内容、格式和编码。还讨论了客户端跳转、缓存控制及其在实际应用中的作用。

461

被折叠的 条评论
为什么被折叠?



