Servlet的学习(三)-request和respons

来源:互联网 发布:wow 1.12数据库 编辑:程序博客网 时间:2024/06/10 00:24

【零】简介

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象,request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。

【一】response对象

response对象即响应对象,而相应分为如下几部分:

①响应行:

响应行中可以设置状态码,方法为:
void setStatus(int sc) 

②响应头:

响应头的特点是:(key:value的形式,一个key可以对应一个value,也可以对应多个value,最常用的还是对应一个value)
可以通过以下的方法设置头信息:
void setHeader(String name, String value)  (一个key对应一个value)
例如,下面两个语句执行完了之后:
setHeader("username","zhangsan");
setHeader("username","lisi");
结果是:username:lisi
void setIntHeader(String name, int value)  void setDateHeader(String name, long date) 值是毫秒值(int 秒long 毫秒)void addHeader(String name, String value)  (一个key对应多个value)
例如,下面两个语句执行完了之后:
setHeader("username","zhangsan");
setHeader("username","lisi");
结果是:username:zhangsan,lisi
void addIntHeader(String name, int value)  void addDateHeader(String name, long date)  

③响应体:

ServletOutputStream getOutputStream()  字节输出流PrintWriter getWriter()  字符输出流

【二】request对象

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
通过Request对象进行的常用操作有如下几个:
①获取客户机信息
这里面有几个比较重要的方法:
●getRemoteAddr获取IP地址
getMethod()获取请求方式
getContextPath()获取虚拟路径
获取请求头信息
获取请求参数
利用请求域传递对象
重定向和转发的区别

【三】案例

案例中会实现的功能 :
①重定向(登陆页面)
* 需求:登陆页面,用户名和密码的登陆页面,用户名和密码都是admin,如果有一个不是,重定向到登陆页面,重新登陆。
主要语句为response.sendRedirect("要重定向的页面的路径");
页面定时刷新(页面读秒操作)
在头部加上<meta http-equiv="refresh" content="秒数,如6;url=要刷新后重定向的页面的路径">
禁用浏览器缓存(三个头信息)
应用:
网银页面的数据是时时刻刻发送变化的。
Cache-Control : no-cache
Expires: -1 值是日期类型(setDateHeader())
Pragma : no-cache
向页面输出中文(乱码问题)
字节:ServletOutputStream getOutputStream()  字节输出流,不一定乱码。
如果乱码了,如何解决呢?如下:
①首先,设置浏览器打开文件时所采用的编码
response.setHeader("Content-Type", "text/html;charset=UTF-8");
②其次,要使得获取字符串byte数组时编码和打开文件时编码一致。
response.getOutputStream().write("要输出的内容".getBytes("UTF-8"))
字符:PrintWriter getWriter()   字符输出流,肯定乱码,原因是:response缓冲区的编码,默认值ISO-8859-1,而这种编码不支持中文。
解决办法:
设置response缓冲编码
response.setCharacterEncoding("UTF-8");
设置浏览器打开文件所采用的编码
response.setHeader("Content-Type", "text/html;charset=UTF-8");
上面两行语句有个简写方式
response.setContentType("text/html;charset=UTF-8");



0 0