路径乱码问题
开发中路径的问题
1、相对路径
(1)在html文件中引入图片
第一种:图片和html在同一个目录下面
* 直接写图片的名称 <img src = "a.jpg"/>
第二种:图片在html的上层目录
* 写 ../ 表示上层目录
<img src = "../b.jpg"/>
第三种:图片在html的下层目录
* 直接写目录名称和图片名称
<img src = "src/a.jpg"/>
2、绝对路径(一般开发中都使用)
(1)第一种写法:http://ip地址+端口号/文件的路径
<img src="http://127.0.0.1/day07-3/path02/a.jpg"/>
(2)第二种写法:直接写 /项目名称/文件路径
<img src="/day07-3/path01/cc/c.jpg"/>
3、使用servletContext对象读取web项目中的文件
(1)InputStream getResourceAsStream(java.lang.String path) :得到要操作文件的输入流
第一个操作:文件放到src下面
* 路径: 第一个位置 /,理解为项目的名称;后面写文件在tomcat的webapps里面的具体的路径
* 代码:
InputStream in = context.getResourceAsStream("/WEB-INF/classes/db1.properties");
第二个操作:文件放到包里面
* 路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径
* 代码:
InputStream in = context.getResourceAsStream("/WEB-INF/classes/cn/itcast/read/db2.properties");
注意:包名路径使用 / 进行间隔
第三个操作:文件放到webroot下面
* 路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径
* 代码:
InputStream in = context.getResourceAsStream("/db3.properties");
* 注意:当把文件放到和webroot同级的目录下面,这个文件不会部署到tomcat里面,
所以使用servletContext对里面getResourceAsStream方法不能得到文件的内容
开发中乱码的问题
1、使用字节流向页面输出内容
(1)getOutputStream()
(2)代码:
response.getOutputStream().write("输出的内容".getBytes());
(3)如果向页面输出中文,根据不同的浏览器的编码设置会产生乱码问题
* 解决方法:
/*
* 1、设置浏览器的编码
* 2、设置字节数组的编码
* 让浏览器的编码和字节数组的编码一致
* */
//设置浏览器的编码 使用头信息 Content-Type
response.setHeader("Content-Type", "text/html;charset=utf-8");
//设置字节数组的编码
response.getOutputStream().write("字节流中文".getBytes("utf-8"));
2、使用字符流向页面输出内容
(1)getWriter()
(2)代码:
response.getWriter().write("response");
(3)如果使用字符流向页面输出中文,一定会有乱码(response存在不支持中文的编码)
/*
* 使用字符流向页面输出内容;首先会把内容放到response缓冲区里面,
* response缓冲区默认的编码是 iso8859-1,这个编码不支持中文,一定会有乱码
*
* 解决方法:
* 1、设置response缓冲区的编码
* 2、设置浏览器的编码
* response缓冲区的编码和浏览器的编码一致
* */
//设置response缓冲区的编码
response.setCharacterEncoding("utf-8");
//设置浏览器的编码
response.setHeader("Content-Type", "text/html;charset=utf-8");
//这个方法不只是设置响应头,而且它会设置setCharacterEncoding(),即一句顶两句
response.getWriter().write("字符流中文");
**** response的设置Content-Type头还有一个便捷的方法:response.setContentType("text/html; charset=utf-8");
3、获取表单提交的中文数据乱码问题的解决
(1)post提交方式解决方法
= 使用post提交数据时候,会把数据放到request缓冲区里面,
request缓冲区默认的编码 iso8859-1,不支持中文
= 解决方法:
设置request缓冲区的编码
* 代码:
request.setCharacterEncoding("utf-8");
(2)get提交中文乱码解决
= 有三种方式
第一种:修改tomcat的配置文件,但是不让用
== <Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
第二种:把数据先编码,再进行解码
第三种:使用string构造进行编码
new String("");
* 代码:
username = new String(username.getBytes("iso8859-1"),"utf-8");
URL编码
表单的类型:Content-Type : application/x-www-form-urlencoding,就是把中文转为%后面跟随两位的16进制
为什么要用它:在客户端和服务器之间传递中文的时候需要把它转换为网络适合的方式
* URL不是字符编码,它是用来客户端和服务器之间传递参数的一种方式
* URL编码需要先指定一种字符编码,把字符串解码后,得到byte[],然后把小于0的字节加256,再转换为16进制,前面添加一个%
* POST请求默认的是使用URL编码,tomcat会自动使用URL解码
* URL编码:String username = URLEncoder.encode(username, "utf-8")
* URL解码:String username = URLDecoder.decoder(username, "utf-8")