17.11.28,web学习第十四天,还有一年,努力吧青年HttpServletResponse

来源:互联网 发布:淘宝找人代写毕业论文 编辑:程序博客网 时间:2024/05/23 13:25

HttpServletResponse

1.案例一:完成文件下载

3.案例二:生成验证码。

4.Tomcat引擎会取response缓冲区内容和引擎自己添加的信息组成一个http响应。

设置响应行的状态码:setStatus(int ss);

通过response设置响应头:

addHeader(String name,String value);

addIntHeader(String  name ,int value);

addDateHeader(String name,long date)

addHeader(String name,String value)如果重名,将直接在同名后添加值

setHeader(String name,String value)如果同名将覆盖name

setDateHeader(String name,long value);

setIntHeader(String name,int value);

重定向:

1.response.setStatus(302);

2.response.setHeader(“Location”,”http://localhost:8080/资源”);

response.sendRedirect(“地址”);

或设置定时刷新的头:reponse.setHeader(“refresh”,”5;url=http://localhost:8080/xxxxx”);

使用js展示5秒后跳转:

<span id=spans>5</span>

Window.onload=function(){

Var spans=document.getElementById(“spans”);

Var time=5;

setInterval(function(){

spans.innerHTML(time);

time--;

If(time==0){

location.href="www.baidu.com";

}

},5000);

}

 

5.重点:如果浏览器不设置码表的情况下:默认查找本地编码:一般为GBK(中文简体)。客户端和服务器两方编码方式一致时将不会出现乱码!例:访问html页面为什么不会出现乱码,因为<meta charset="UTF-8">可以仿照这个写一个头告诉浏览器你使用什么码表解码我这个格式。

6.前段时间给数据库设置编码?

7.解决浏览器编码response.setContentType(“text/html;charset=UTF-8”);一步搞定

response.setCharacterEncoding(“GBK”);这是给response缓冲区设置编码为GBK(默认为iso-8859-1).

或者可以仿照html的方式,设置一个头Content-Type,告诉客户端使用什么编码:response.setHeader(“Content-Type”,”text/charset=UTF-8”);

8.使用ResponseServletOutputStream向客户端发送一张图片,该图片放于web_Content下,得到该图片的输入流需要使用ServletContentgetRealPath(a.jpg)方法(需要拿到图片的真实路径)。代码如下:

ServletOutputStream os = response.getOutputStream();

String f = getServletContext().getRealPath("a.jpg");

BufferedInputStream bis=new BufferedInputStream(new FileInputStream(f));

int len =0;

byte [] buf=new byte[1024];

while((len=bis.read(buf))!=-1) {

os.write(buf, 0, len);

}

在html5中像<br/>建议不加/斜杠

9.文件下载的基本代码:

引子:使用<a></a>标签可以指向要下载的文件在服务器的路径,但是有些文件浏览器支持在线解压了,直接显示了内容如图片,所以无论什么资源都得代码表名下载!

调了半个小时的程序,终于理解了<a href=jpg?name=a.jpg”></a>标签和http请求协议的关系。文件下载的基本思想是:

点击<a>跳转到servlet程序,以此进行下载操作。(如果直接指向文件的路径,将会直接显示该文件就是访问服务器的静态资源)。

 

//获得要下载的文件的名称

String filename = request.getParameter("name");//a.flv

 

//要下载的这个文件的类型-----客户端通过文件的MIME类型去区分类response.setContentType(this.getServletContext().getMimeType(filename));

//告诉客户端该文件不是直接解析 而是以附件形式打开(下载)

response.setHeader("Content-Disposition", "attachment;filename="+filename);

//获取文件的绝对路径

String path = this.getServletContext().getRealPath("dowload/a.jpg");

//获得该文件的输入流

InputStream in = new FileInputStream(path);

//获得输出流---通过response获得的输出流 用于向客户端写内容

ServletOutputStream out = response.getOutputStream();

//文件拷贝的模板代码

int len = 0;

byte[] buffer = new byte[1024];

while((len=in.read(buffer))>0){

out.write(buffer, 0, len);

}

in.close();

10.文件下载和访问服务器的静态资源不是一个类型、

11.关于文件下载文件名乱码问题解决:   美女.jpg

1)告知浏览器文件的类型:response.setContentType(文件的MIME类型);

2)告示浏览器文件的打开方式是下载:

response.setHeader("Content-Disposition","attachment;filename=文件名称");

//获得要下载的文件的名称

String filename = request.getParameter("filename");//????.jpg

//解决获得中文参数的乱码----下节课讲

filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");//美女.jpg

//获得请求头中的User-Agent

String agent = request.getHeader("User-Agent");

//根据不同浏览器进行不同的编码

String filenameEncoder = "";

if (agent.contains("MSIE")) {

// IE浏览器

filenameEncoder = URLEncoder.encode(filename, "utf-8");

filenameEncoder = filenameEncoder.replace("+", " ");

} else if (agent.contains("Firefox")) {

// 火狐浏览器

BASE64Encoder base64Encoder = new BASE64Encoder();

filenameEncoder = "=?utf-8?B?"

+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";

} else {

// 其它浏览器

filenameEncoder = URLEncoder.encode(filename, "utf-8"); }

 

12.response细节:response获得的流不需要手动关闭。TomCat会帮我们关闭,getOutputStream()getWriter();不能同时调用。

ieUTF-8编码方式,而火狐 浏览器是Base64编码方式。

13.完成随机验证图片案例:模板代码已收藏【一次性验证码】:

<meta charset="UTF-8">

<title>Insert title here</title>

<script>

function clicks(a){

a.src="image?time="+new Date().getTime();

}

</script>

</head>

<body>

<img src="image" onclick="clicks(this)"/>

</body>

</html> 

阅读全文
0 0
原创粉丝点击