现在的位置: 首页 > 综合 > 正文

第五天:HTTP协议讲解

2018年05月17日 ⁄ 综合 ⁄ 共 2493字 ⁄ 字号 评论关闭

ü  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="textname="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()会以平台默认的编码方式把字符串转换成相应的二进制字节数组,存储到

       //内存中,然后,那些输入流再去内存中读取,然后按照平台默认解码出来。

抱歉!评论已关闭.