以utf-8编码为例:
下面是一个jsp页面form.jsp
<%@page contentType = "text/html; charset = utf-8" language = "java" pageEncoding = "utf-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>收集参数的表单</title>
<meta charset="UTF-8">
</head>
<body>
<form id = "form1" method = "post" action = "aa" >
用户名:<br/>
<input type = "text" name = "name"> <hr/>
性 别:<br/>
男:<input type = "radio" name = "gender" value = "男">
女:<input type = "radio" name = "gender" value = "女"><hr/>
喜欢的颜色:<br/>
红:<input type = "checkbox" name = "color" value = "红">
绿:<input type = "checkbox" name = "color" value = "绿">
蓝:<input type = "checkbox" name = "color" value = "蓝"><hr/>
来自的国家:<br/>
<select name = "country">
<option value ="中国">中国</option>
<option value ="美国">美国</option>
<option value ="俄罗斯">俄罗斯</option>
</select><hr/>
<input type ="submit" value = "提交">
<input type = "reset" value = "重置">
</form>
</body>
</html>
page指令中contentType = "text/html; charset = utf-8"用于指定数据类型和服编码方式。charset = utf-8 表示服务器返回该页面到浏览器采用的编码方式,同时也指以post方式提交表单参数的编码方式。
**pageEncoding = “utf-8”**表示该jsp文件自身采用的编码格式,也就是告诉服务器使用什么编码翻译jsp文件成java文件。
在head中的 **meta charset=“UTF-8”**表示page指令中contentType未指定编码时采用的默认编码格式。
当表单以post方式提交到FirstServlet.java
package lee;
import java.net.URLDecoder;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="firstServlet", urlPatterns={"/firstServlet"})//注解方式配置
public class FirstServlet extends HttpServlet
{
public void service(HttpServletRequest request,
HttpServletResponse response) throws IOException{
//设置编码方式
request.setCharacterEncoding("utf-8");//在执行request.getParameter("");之前设置查询码表,按照utf-8进行解码
response.setContentType("text/html; charset=utf-8");//告诉浏览器用utf-8解析
//获取name的请求参数值
String name = request.getParameter("name");
//获取gender的请求参数值
String gender = request.getParameter("gender");
//获取color的请求参数值
String[] color = request.getParameterValues("color");
//获取country的请求参数值
String national = request.getParameter("country");
//获取页面输出流
/**PrintStream是用来操作字节流,所以utf-8国际编码输出会出现乱码*/
//PrintStream out = new PrintStream(response.getOutputStream());
/**PrintWriter是用来操作字符流,如果处理中文则用PrintWriter*/
PrintWriter out = response.getWriter();
//输出HTML页面标签
out.println("<html>");
out.println("<head>");
out.println("<title>ServletTest测试</title>");
out.println("</head>");
out.println("<body>");
//输出请求参数值 name
out.println("您的名字:" + name + "<hr/>");
//输出请求参数值 gender
out.println("您的性别是:" + gender + "<hr/>");
//输出请求参数值:color
out.println("您喜欢的颜色:");
for(String c:color){
out.println(c + " ");
}
out.println("<hr/>");
//输出请求参数的值:national
out.println("您来自的国家:" + national + "<hr/>");
out.println("</body>");
out.println("</html>");
}
}
由于之前使用的utf-8进行提交表单的,在解析参数request.getParameter("");之前设置查询码表,按照utf-8进行解码request.setCharacterEncoding(“utf-8”);
在响应时告诉浏览器用utf-8解析response.setContentType(“text/html; charset=utf-8”);
另外输出PrintStream是用来操作字节流,所以输出utf-8国际编码会出现乱码;PrintWriter是用来操作字符流,如果处理中文则用PrintWriter。
最后附上web.xml配置
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
>
<servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>lee.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/aa</url-pattern>
</servlet-mapping>
</web-app>