1、 页面间是通过什么方法跳转的?页面和后台之间的跳转? 页面间的跳转: 通过window.location.href="**.jsp" 页面和后台间的跳转: 通过 window.location.href="***/servlet/servlets" request请求传给后台后,后台如何进行跳转:
request.getSession.setAttribute("user", user); response.sendRedirect(request.getContextPath() + "/index.jsp");超链接跳转: <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");