fhdking
发贴: 28
积分: 0
|
于 2007-11-04 13:56
1. 浏览器会在web.xml中查找<mime-mapping>中<extension>中定义的要浏览的扩展名,再根据<mime-type>中指定的类型打开。 <mime-mapping> <extension>abs</extension> <mime-type>audio/x-mpeg</mime-type> </mime-mapping> 2. 用JSP做了几个例子,说明请求头、响应头的作用 (1)Authorization头的例子 Authorization的作用是当客户端访问受口令保护时,服务器端会发送401状态码和WWW-Authenticate响应头,要求客户机使用Authorization来应答。 <%@ page pageEncoding="GBK" contentType="text/html;charset=utf-8" import="java.util.*,java.text.*" %> <%=DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.CHINA).format(new Date()) %> <% response.setStatus(401); response.setHeader("WWW-Authenticate", "Basic realm=\"Tomcat Manager Application\""); %> (2)Content-Disposition扩展头的例子 加上Content-Type头就可以实现文件下载。 <%@ page pageEncoding="GBK" contentType="text/html;charset=utf-8" import="java.util.*,java.text.*" %> <%=DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.CHINA).format(new Date()) %> <% response.setHeader("Content-Type","video/x-msvideo"); response.setHeader("Content-Disposition", "attachment;filename=aaa.doc"); %> Content-Type中指定的类型是当点击保存后,文件的保存类型。 Content-Disposition中指定的类型是文件的扩展名,并且弹出的下载对话框中的文件类型图片是按照文件的扩展名显示的,点保存后,文件以filename的值命名,保存类型以Content中设置的为准。 (4)下载的文件名为中文时乱码的解决办法 如果下载的文件名中有中文那么要怎么修改? <%@ page pageEncoding="GBK" contentType="text/html;charset=utf-8" import="java.util.*,java.text.*" %> <%=DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.CHINA).format(new Date()) %> <% response.setHeader("Content-Type","application/x-cpio"); //response.setHeader("Content-Disposition", "attchment;filename=\"=?gb2312?B?0MK9qCDOxLG+zsS1tS50eHQ=?=\""); response.setHeader("Content-Disposition", new String("attachment;filename=中文.txt".getBytes("gb2312"),"ISO8859-1")); //response.setHeader("Content-Disposition","attachment;filename="+ MimeUtility.encodeWord("中文.txt")); %> 这个是比较流行的方法,但比较正统的是用outlook新建一个带有中文附件的邮件,然后看这个邮件的源代码,找到: Content-Disposition: attachment; filename="=?gb2312?B?0MK9qCDOxLG+zsS1tS50eHQ=?=" 用这个filename原理上就可以显示中文名附件,但是现在IE并不支持,如果换成FIREFOX就可以正常显示。 filename后面的内容可以用javax.mail.internet*包中有方法可以实现:MimeUtility.encodeWord() 如filename="+ MimeUtility.encodeWord("中文.txt")); (5)jsp翻译成class时的编码问题 <%= "a中文".length() %> 为什么上面的输出值为5?改成下面的则输出3 <%@ page pageEncoding="gbk"%> <%= "a中文".length() %> 原因: 因为上面的代码没有添加该文件的编码说明 , WEB应用程序在将jsp翻译成class文件时 , 把该字符串的内容按默认的保存方式指定的编码ASCII码来算的,在UTF-8中,原ASCII字符占一个字节,汉字占两个字节,对应两个字符,长度就变成了5 , 而下面的是GBK编码, 一个汉字和一个英文都对应一个字符,得到结果就为3。 (6)小知识点 referer头是可以让服务器了解和追踪发出本次请求的起源的URL地址。request.getHeader("referer") xml默认是utf-8编码,JSP默认是ISO8859-1编码。 ContentType中的charset=gbk对头中内容不起作用。它只对response.getwriter().println输出的实体内容起作用。
|