ü Content-Type: text/html; charset=GB2312 (*)
ü Web.xml文件里面:
<mime-mapping>
<extension>abs</extension>
<mime-type>audio/x-mpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
Content-Type表示的是响应的内容类型,它是根据extension来判断的,如果发现扩展名是jpg就用浏览器就用图片去解析,如果是文本就用文本解析,如果是doc就提示下载或者打开,所以可以控制它。用在jobsys的2323o2o.sql的下载中。
<mime-mapping>
<extension>sql</extension>
<mime-type>application/msword</mime-type>
</mime-mapping>
只要加上这句话即可,十分强大,直接就可以下载。
浏览器收到的数据到底采取什么样的行动,靠的就是mime类型,可以控制浏览器对某种数据类型做何种处理
Refer
下载中解决名称内容问题:服务器返回给浏览器的Content-Disposition肯定不能含有中文,所以要用java.net.URLEncoder.encode(“中文.zip”,”ut-8”)转码,为什么要转换成utf-8,因为浏览器这边解码默认是用utf-8.
解决:<a href=”a.zip”>中文</a>
中文附件下载的中文乱码问题:
Java.net.URLEncoder.encode(“中文.zip”,”utf-8”);是把servlet中的中文转换成内存的以utf-8为编码的二进制编码,然后在浏览器客户端,才能被解析。
解决:<a href=”中文zip”>中文</a>
根本原理:客户端浏览器有一个发送请求,如果含有中文,则会把它转换成UTF-8的形式去发给服务器,但是服务器并不知道浏览器要这么干,所以你要在tomcat里面给它说下,要用UTF-8对它进行解码,URIEncoding=”utf-8”.
在Connector里面加URIEncoding=”utf-8”
点击超链接和输入网站都是GET,只有提交表单,并且设置为POST时间,才是POST.
Post方式提交的请求不会被浏览器缓存,Get方式提交的请求可以被缓存(可以记录用户的账号密码)。
<%@ pagepageEncoding="gbk"%>
<%
/**
//response.addHeader("refresh","2");
response.addHeader("Content-Type","application/octect-stream");
response.addHeader("Content-Disposition","attachment;filename= '"+
java.net.URLEncoder.encode("中文.zip","UTF-8")
+"'");
*/
%>
<a href="中国.zip">1.zip</a>
<form method=“get”>
<inputtype="text”name="userName" ></br>
<inputtype="password" name="password"></br>
<inputtype="submit" value="32">
</form>
自己写一个HTTP服务器。
Java程序运行的真正环境是bin目录下,如果是java文件则把它转换成字节码文件
如果不是则直接被copy过来。
所以classpath目录指的是bin目录下的。
在静态方面里面不能创建内部类的实例对象:因为内部类的一个重要特点就是可以访问外部类的成员变量,因为在编译时间内部类准备好了,它可能要调用外部类的变量,但是外部类还没有new出来,所以不能这样搞。
内部类可以访问外部类的变量,但是不能改变外部类的变量。
ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
//.class-->内存,有读classpath目录下的.class文件的本领,那要你帮我读classpath目录下的其他文件,你很为难吗?
//InputStream
ips =classLoader.getResourceAsStream("user/js/util.js");
//InputStream
ips =classLoader.getResourceAsStream("cn/itcast/httptest/b.txt");
InputStream ips = ClassLoaderTest.class.getResourceAsStream("/cn/itcast/httptest/b.txt");
System.out.println(ips);
public InputStream
getResourceAsStream(Stringname) {
URL url = getResource(name);
try {
return url !=
null ? url.openStream():
null;
} catch (IOException e) {
returnnull;
}
}
//getBytes()会以平台默认的编码方式把字符串转换成相应的二进制字节数组,存储到
//内存中,然后,那些输入流再去内存中读取,然后按照平台默认解码出来。