Servlet request的常见方法和response的用法

本文详细介绍了Servlet中request对象的常用方法,包括获取URL、参数、头信息等,以及response对象如何设置响应内容、格式和编码。还讨论了客户端跳转、缓存控制及其在实际应用中的作用。

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、设置响应编码

设置响应编码有两种方式

  1. response.setContentType(“text/html; charset=UTF-8”);
  2. response.setCharacterEncoding(“UTF-8”);

建议使用 response.setContentType(“text/html; charset=UTF-8”); 比较省事。

这两种方式都需要在response.getWriter调用之前执行才能生效。

他们的区别在于

  1. response.setContentType(“text/html; charset=UTF-8”);

不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文

  1. 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是对服务端而言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值