您的位置:首页 > 编程语言 > Java开发

JavaWeb中的一些简单操作(四) 页面间的跳转的本质以及url乱码问题解决

2017-08-31 15:17 633 查看
1、 页面间是通过什么方法跳转的?页面和后台之间的跳转?

页面间的跳转:
通过window.location.href="**.jsp"


页面和后台间的跳转:
通过 window.location.href="***/servlet/servlets"


超链接跳转:
<a href="111" ></a>
实际上也是通过设置window.location.href的属性

// test.html
<html>
<head></head>
<body>

<script>
window.location.href="2.html"
</script>
</body>

</html>

// 2.html
<html>
<head></head>
<body>

<h1>fuck you shit</h1>
</body>

</html>

按钮的跳转: <input type="button" click="javascript: window.location.href=2.html" value="跳转"/>


2、 url乱码问题解决

jsp页面的编码方式有两个地方需要

<%@ page pageEncoding="utf-8" %>
<%@ page contentType="text/html;charset=utf-8" %>

pageEncoding: 指的是jsp文件本身在本地保存时的编码方式
contentType: 指服务器发送网页内容给客户端时所使用的编码

从第一次访问jsp页面开始,到这个页面被发送到客户端,要经过三次编码转换:
1、 jsp编译成.java, 它会根据pageEncoding的设定读取jsp。如果pageEncoding设定错误,出来的就是中文乱码
2、 由javac的java源码至java byteCode的编译,不论jsp编写时用的是什么编码方案,经过这个阶段的结果全是UTF-8的encoding的java源码
javac用UTF-8的encoding的java源码,编译成UTF-8 encoding的二进制码
3、 tomcat或者其它的application container  载入和执行第二阶段来的二进制码。这时contentType就有用了


21、 post方式传值乱码

由于post是通过request存储的,在另一个页面也是通过request.getParameter(String name)来提取信息的,所以这种的乱码主要是因为request存储信息的编码设置导致的。

post提交时,如果没有设置提交的编码格式,则会以ISO-8859-1方式提交,接受的jsp页面却以UTF-8方式接收。

所以:
String str = new String(request.getParameter("name").get("ISO-8859-1"), "UTF-8")


或者:

在接收页面设置:
request.setCharacterEncoding("utf-8")


22、 get方式传值乱码

221、 表单get传值:实际上也是通过url地址传值

编程过程: 首先浏览器根据页面的charset编码方式对传值进行编码

然后提交至服务器交给tomcat,tomcat进行解码时,采用的解码方式是由server.xml文件中的URIEncoding决定的

也就是说 request.getParameter()获取表单参数值是,进过charset的编码和URIEncodng的解码

解决方法:
1、 在tomcat的server.xml中的HTTP Connector或者AJP Connector 加上URIEncoding="UTF-8"
2、 使用useBodyEncodingForURI = "true" 这种适合tomcat实例下需要跑多个Encoding的程序


222、 url地址传值

编码过程: url地址中的中文被从GBK(浏览器的)转换成ISO-8859-1,交给tomcat后,又被tomcat根据URLEncoding解码。

解决方法: 把URLEncoding设置为GBK/utf-8,但是这样会影响配置

更好的: 使用java.net.URLEncoder和URLDecoder对地址中的中文进行手动编码和解码

综上所述:

1、 所有页面的charset设置为UTF-8

2、 tomcat的URIEncoding默认是ISO-8859-1,设置为UTF-8。

解决中文命名的文件以及请求以get方式提交的

3、 添加过滤器,调用request.setCharacterEncoding(“utf-8”)

解决 请求以post方式提交的乱码问题

4、 url地址中存在中文参数时,首先对中文参数使用URLEcoder编码为utf-8,然后在request.getParameter()接收到参数后再使用URLDecoder还原

// 将中文字符先由utf-8转成字节数组,然后再转成ISO-8859-1的字符串
String address = new String("江苏省南京市".getBytes("UTF-8"), "ISO-8859-1");

String address = new String(address.getBytes("ISO-8859-1"), "UTF-8");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  乱码 java web url