您的位置:首页 > 理论基础 > 计算机网络

http协议4---GET方式和POST方式获取表单数据举例3(统一方式获取,解决中文乱码问题)

2016-12-21 11:39 976 查看
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);
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: