造成参数乱码的原因
1.两端的编码格式不一致 2. login.jsp 发起请求 -> Tomcat容器 -> login_after utf-8 iso-8859-1 utf-8
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%-- 只要发生页面跳转,就是一次请求!!! --%>
<%-- 这个请求中,携带了2个参数:name和password --%>
<%-- <a href="login_after.jsp?name=zhangsan&password=000000">点我跳转到login_after.jsp</a>--%>
<%-- <button id="btn">点我跳转到login_after.jsp</button>--%>
<%-- <script>--%>
<%-- document.getElementById("btn").onclick = function (){--%>
<%-- locations.href = "login_after.jsp?name=zhangsan&password=000000";--%>
<%-- };--%>
<%-- </script>--%>
<%-- form表单是用于将数据打包提交到某一个地址 --%>
<%-- action:表单数据的提交资源地址 --%>
<form action="login_after.jsp" method="post">
<%-- 有多少个表单元素name,就会传多少个参数过去 --%>
账号:<input type="text" name="name" /> <br />
密码:<input type="password" name="password" /><br />
<input type="text" name="age" /><br />
<input type="text" />
<button type="submit">登录</button>
</form>
</body>
</html>
login_after.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
String name = request.getParameter("name");
String password = request.getParameter("password");
%>
<h1>账号:<%=name %></h1>
<h1>密码:<%=password %></h1>
</body>
</html>
这时候就解决方法就有两种了:
- 第一种情况
在使用POST方法请求时,如果不保持与请求界面的编码格式一致,则乱码,解决方式如下
? request.setCharacterEncoding("utf-8")
- 第二种情况
使用字符串的构造方法进行转码(临时处理)
`String name = new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8")`
- 第三种情况
修改tomcat的配置
URLEncoding=“utf-8” useBodyEncodingForURI=“true”
? <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URLEncoding="utf-8" useBodyEncodingForURI="true" />
在login_after.jsp中修改
String name = request.getParameter("name");
String nameNew = new String(name.getBytes("iso-8859-1"),"utf-8");
String password = request.getParameter("password");
<h1>账号:<%=nameNew %></h1>
<h1>密码:<%=password %></h1>
|