提交有两种方式,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>