Java中Servlet的Get和Post乱码问题

提交有两种方式,doGet()和doPost()两种

出现乱码的原因

因为容器(Tomcat)采用的是ISO8859-1编码方式.里面没有对中文进行解析.所以当从浏览器传过来数据中有中文时候,就应该考虑是否会出现乱码问题!

其中GET和POST两种方式不同.因为GET方式请求,容器会将数据信息封装到请求头中,而POST方式请求,容器会将数据信息封装到请求体中!

POST方式解决

只需要将容器中的编码方式ISO8859-1用UTF-8进行编码

requset.setCharacterEncoding("UTF-8");

GET方式


代码如下

Index.jsp代码

<span style="font-size:18px;"><%@page import="java.net.URLEncoder"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import = "java.net.URLEncoder" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>登陆界面</title>
    
  </head>
  
  <body>
    <form action="RequestDemo" method="post">
    <table border="1" align="center" cellspacing="0">
    	<caption>用户注册</caption>
    	<tr>
    	 	<th>用户名:</th>
    	 	<td><input type="text" name="username"/></td>
    	</tr>
    	<tr>
    	 	<th>密 码:</th>
    	 	<td><input type="password" name="pwd"/></td>
    	</tr>
    	<tr>
    	 	<th>性 别:</th>
    	 	<td><input checked type="radio" name="gender" value=male/>男
    	 		<input  type="radio" name="gender" value=female/>女
    	 	</td>
    	</tr>
    	<tr>
    	 <th>爱 好:</th>
    	 <td>
    	 	<input type="checkbox" value="sing" name="likes">唱歌
    	 	<input type="checkbox" value="dance" name="likes">跳舞
    	 	<input type="checkbox" value="play" name="likes">打球
    	 	<input type="checkbox" value="internet" name="likes">上网
    	 </td>
    	</tr>
    	<tr>
    		<th>你的靓照:</th>
    		<td>
    			<input type="file" name="picture">
    		</td>
    	</tr>
    	<tr>
    	<th>你所在的城市</th>
    	<td>
    		<select name="city">
    			<option value="北京">北京</option>
    			<option value="上海">上海</option>
    			<option value="天津">天津</option>
    			<option value="广州">广州</option>
    			<option value="深圳">深圳</option>
    		</select>
    	</td>
    	</tr>
    	<tr>
    	<th>简 介:</th>
    	<td>
    		<textarea rows="12" cols="25" name="message"></textarea>
    	</td>
    	
    	</tr>
    	<tr>
    	<td colspan="3" align="center">
    		<input type ="submit" value="提交"/>                
    		<input type ="reset" value="重置"/>
    	</td>
    	</tr>
    	
    	<tr>
    	<td><a href="/servletDay/RequestDemo?username=<%= URLEncoder.encode("张三","utf-8") %>">测试</a></td>
    	</tr>
    </table>
    </form>
   
  </body>
</html></span>


Servlet代码

<span style="font-size:18px;">package servlet.request;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RequestDemo extends HttpServlet{
	

	//get方式是将username封装到请求头中
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		String name = req.getParameter("username");
		
		resp.setContentType("text/html;charset=utf-8");
		resp.getWriter().write(new String(name.getBytes("iso8859-1"),"utf-8"));
		
		
	}

	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
	
		//doPost设置编码防止乱码
		req.setCharacterEncoding("UTF-8");
		
		String name = req.getParameter("username");
		String pwd = req.getParameter("pwd");
		String likes =  req.getParameterValues("likes").toString();
		String like = likes.substring(1, likes.length()-2);
		String pic = req.getParameter("picture");
		String city = req.getParameter("city");
		String message = req.getParameter("message");
		Person p = new Person(name,pwd,like,message,pic,city);
		System.out.println(p);
		/*
		 *  text/html;charset=UTF-8
		 *  resp.setCharacterEncoding("utf-8"); 等价于
		 *  resp.setContentType("text/html;charset=UTF-8");
		 */
		
		resp.setContentType("text/html;charset=UTF-8");
		resp.getWriter().write(p.toString());
		
		
		
		
	}
	

}</span>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值