http协议---GET方式和POST方式获取表单数据举例3(统一方式获取,解决中文乱码问题)
上篇文章只适用于提交的数据都是英文的,但如果是中文的就会出现乱码的情况,因为我们指定的编码格式为UTF-8,但服务器默认的编码格式为iso-8859-1,所以要解决乱码问题需要进行编码转换
注意:POST方式参数编码:request.setCharacterEncoding("utf-8");
GET方式参数编码:手动单个解码---> String name = new String(name.getBytes("iso-8859-1"),"utf-8");
html文件:testParam.html
<!DOCTYPE html>
<html>
<head>
<title>请求参数传递和接收的问题</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<h3>GET请求</h3>
<form action="/day08_web/Demo_Request2" method="GET">
用户名:<input type="text" name="name"/></br>
密码:<input type="password" name="password"></br>
<input type="submit" value="提交"/>
<br/>
性别:
<input type="radio" name="gender" value="male"/>男
<input type="radio" name="gender" value="female"/>女
<br/>
籍贯:
<select name="jiguan">
<option value="gd">广东</option>
<option value="gx">广西</option>
<option value="hn">湖南</option>
</select>
<br/>
爱好:
<input type="checkbox" name="hobit" value="lq"/>篮球
<input type="checkbox" name="hobit" value="zq"/>足球
<input type="checkbox" name="hobit" value="ymq"/>羽毛球
<br/>
个人简介:
<textarea rows="5" cols="10" name="info"></textarea>
<br/>
<!-- 隐藏域 -->
<input type="hidden" name="id" value="001">
<br/>
<input type="submit" value="提交">
</form>
<hr/>
<h3>POST请求</h3>
<form action="/day08_web/Demo_Request2" method="POST">
用户名:<input type="text" name="name"/></br>
密码:<input type="text" name="password"></br>
<input type="submit" value="提交"/>
<br/>
性别:
<input type="radio" name="gender" value="male"/>男
<input type="radio" name="gender" value="female"/>女
<br/>
籍贯:
<select name="jiguan">
<option value="gd">广东</option>
<option value="gx">广西</option>
<option value="hn">湖南</option>
</select>
<br/>
爱好:
<input type="checkbox" name="hobit" value="lq"/>篮球
<input type="checkbox" name="hobit" value="zq"/>足球
<input type="checkbox" name="hobit" value="ymq"/>羽毛球
<br/>
个人简介:
<textarea rows="5" cols="10" name="info"></textarea>
<br/>
<!-- 隐藏域 -->
<input type="hidden" name="id" value="001">
<br/>
<input type="submit" value="提交">
</form>
</body>
</html>
主程序 Demo_Request2.java
package Request;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 获取GET方式和POST方式提交的参数
*/
public class Demo_Request2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 设置参数查询的编码,解决不同的编码解析导致中文乱码的情况(直接改的是全部的,方便)
* 但是该方法只能对请求实体内容的数据编码起作用。POST提交的数据在实体内容中,
* 所以该方法对POST方式起作用,而GET方法的参数放在URI后面,所以对GET方式无效!!!
* 所以GET方法的只能手动解码。。。
*/
request.setCharacterEncoding("utf-8");
/*
* 统一方便的获取请求参数方法
*/
System.out.println(request.getMethod()+"方式获取数据");
//根据参数名得到参数值(只能获取一个值得参数)
String name = request.getParameter("name");
/*
* 手动重新解码(ios-8859-1 字符串 -> utf-8字符串)(只是单个的改解码格式,比较麻烦)
* 但GET方法的只能手动解码
*/
if("GET".equals(request.getMethod())) {
name = new String(name.getBytes("iso-8859-1"),"utf-8");
}
String password = request.getParameter("password");
if("GET".equals(request.getMethod())) {
password = new String(password.getBytes("iso-8859-1"),"utf-8");
}
System.out.println(name+"---"+password);
System.out.println("=================================================");
//获取全部的参数名和参数值
Enumeration<String> enums = request.getParameterNames();
while(enums.hasMoreElements()) {
String paramName = enums.nextElement();
if("hobit".equals(paramName)) {
/*
* 根据参数名获取参数值(但是可以获取多个值)
*/
String[] hobits = request.getParameterValues("hobit");
for(String h : hobits) {
if("GET".equals(request.getMethod())) {
h = new String(h.getBytes("iso-8859-1"),"utf-8");
}
System.out.println(paramName+"---"+h+", ");
}
} else {
String paramValue = request.getParameter(paramName);
if("GET".equals(request.getMethod())) {
paramValue = new String(paramValue.getBytes("iso-8859-1"),"utf-8");
}
System.out.println(paramName+"---"+paramValue);
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// System.out.println("POST方式提交");
// InputStream in = request.getInputStream();
// byte[] buf = new byte[1024];
// int len = 0;
// while((len = in.read(buf)) != -1) {
// System.out.println(new String(buf,0,len));
// }
// System.out.println(request.getMethod()+"方式获取数据");
// //根据参数名得到参数值
// String name = request.getParameter("name");
// String password = request.getParameter("password");
// System.out.println(name+"---"+password);
// //获取全部的参数名和参数值
// Enumeration<String> enums = request.getParameterNames();
// while(enums.hasMoreElements()) {
// String paramName = enums.nextElement();
// String paramValue = request.getParameter(paramName);
// System.out.println(paramName+"---"+paramValue);
// }
//一定调用doGet方法
this.doGet(request, response);
}
}