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

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);
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值