Servlet的request与response对象

1、request && response

Web服务器收到客户端的请求时,会针对每一次的请求分别建立代表请求的request对象
、和代表响应的response对象,
要获取客户端提交过来的数据,只需要找request对象就ok,要向客户机输出数据,只需要
找response对象就ok

1.response
1,Servlet中response的输出编码的问题(字节流)
1.//程序以什么码表输出了,程序就要控制浏览器以什么码表打开
response.setHeader("Content-type","text/html;charset=utf-8");
String data ="你好";
OutputStream out=response.getOutpubStream();

out.write(data.getBytes("utf-8"));//写到response里面,指定编码表输出
2.<mate>标签控制浏览器的的码表打开
out.write("<mate http-equiv='Content-type' Content='text/html;charset=utf-8'>".getBytes());
2Servlet中response的输出编码的问题(字符流)
gb2312 与iso8859-1编码

String data="你好";
PrintWriter out=response.getWriter();
our.writer(data );//不需要转换字节流--->乱码:sun设计response的时候,默认的是iso8859-1码表
浏览器默认打开码表是gb2312
解决办法:更改浏览器的码表 response.setCharacterEncoding("utf-8");//指定response的码表,指定向浏览器发送的码表
 同时:设置头,控制浏览器打开的码表:response.setHeader("Content-type","text/html;charset=utf-8");

便捷的方式:response.setContentType("text/html;charset=utf-8");//同时设置输入输出码表

3.response文件的下载

目录:/download/1.jpg
String path=this.getServleContext().getRealPath("/download/1.jpg");//获取到文件的绝对路径
//截取文件名
String filename=path.subString(path.lastIndeOf("\\"+1));
//通知浏览器的下载方式
response.setHeader("Content-disposition","attachment;filename="+filename);
OutputStream out =response.getOutputStream();
InputStream in= new FileInputStream(path);
//读取文件
int len=-1;
byte b[]=new byte[1024];
while((len=in.read(b))!=-1){
out.wtite(b,0,len);

in.close();
4.response 设置控制浏览器定时刷新
response.setHeader("refresh","3");//每隔3秒定时刷新页面
例子:
response.setCharacterEncoding("utf-8");//设置浏览器的编码
response.setContentType("text/html;charset=utf-8");//设置输出码表
responsse.setHeader("refresh","3;url='/day11/1.jsp'");
response.getOutpubStream().write("恭喜登录成功!三秒后跳转 若没有跳转,请点击<a href=''>这里</a>")

5.response控制浏览器的缓存
控制浏览器缓存的时间:reponse.setDataHeader("expires",System.CurrentTime()+1000*60);
//刷新页面时,在一分钟之内,不会有再向服务器发送请求

6.response实现请求重定向 :实现方式:response.sendRedirect();
实现原理:302状态码+location即可以实现重定向;
各个状态码表示的含义:200.一切ok;
回送200,一切ok,302,要找别人,304或者307,要去拿缓存
403服务器有着个资源,但是你没有访问权限
404,服务器没这个资源
500,服务器出错
response.sendRedirect("/day10/1.jsp");

这句话相当于:response.setStatus(302);
 response.setHeader("location","/day10/1.jsp");

重定向特点:浏览器向服务里发送两次,意味着有两个request,response 

2.request :
1.uri和url全球统一资源定位符 ;如URL:http://www.sina.com/news/1.html 
而news/1.html 为uri;uri用来表示任意一个资源,
url表示互联网的一个资源,uri为父,url为子



2.request常用方法:
1.request.getRequestURI();返回请求行中的资源名部分
2.request.getRequestURL();返回客户端发送请求时的完整的URL;
3.request.getQueryString();返回请求行中参数部分
4.request.getRomoteAddr();返回发出请求的客户机的IP地址;
5.request.getRomoteHost();返回发送请求的客户机的完整主机名;
6.request.getLocalAddr();返回WEB服务器的IP地址;
7.request.getMethod()得到客户机的请求方式;

3.request获取请求头和请求数据
1.获取请求头:request.getHeader("头名");返回的是String
 request.getHeaders();返回的是Enumeration枚举
2.获取请求数据:request.getParameter();返回的是String  
request.getParameterValues();返回的是Enumeration枚举
request.getParameterMap();返回的是Map集合
4.收集用户数据:
5.request的请求转发和MVC模式
String data="aaaa";
request.setAttribute("data",data);
RequestDisptcher rd=request.getRequestDispatcher("/1.jpg");
rd.forward(request,response);

Servlet也是可以携带数据的,为什么ServletContext不能作为转发呢?
因为ServletContext是共享的容器,会被后来的数据覆盖掉。
6.请求转发的细节:
forward方法用于将请求转发到RequestDispatcher对象封装的资源,如果在调用forward方法之前
在Servlet程序中写入的部分内容已经被真正的传送到了客户端forward的方法将抛出
illegalStateException异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值