中文乱码问题是比较常见和烦人的问题,本文通过一个小程序介绍了如何通过Servlet从上一个页面获取参数,
方法很简单:调用request.getParameter(String s)方法。
解决中文乱码问题的方法是:
首先要设置response响应的格式:response.setContextType("text/html;charSet=GBK");
然后在加上request.setCharacterEncoding("GBK")
需要注意的是这是解决post方式提交的内容的中文乱码问题。
解决get方式提交内容的中文乱码问题的方法:
在Tomcat->conf文件夹->server.xml-->connecter标签里加上:
URIEncoding="GBK"(注意:在xml里面“=”两边不要有空格)
关于Post和Get之间的区别可以看我转载的另一篇博文:
HTTP POST GET 本质区别详解
例子:
1.threeparams.html
- <html>
- <body>
- <form method="post" action="Threeparams">
- <table>
- <tr>
- <td>
- param1
- </td>
- <td>
- <input name="p1" type="text"/>
- </td>
- </tr>
- <tr>
- <td>
- param2
- </td>
- <td><input name="p2" type="text"/>
- </td>
- </tr>
- <tr>
- <td>
- param3
- </td>
- <td><input name="p3" type="text"/>
- </td>
- </tr>
- <td><input type="submit" value="submit">
- </td>
- </tr>
- </table>
- </form>
- </body>
- </html>
2.ThreeParams.java
- import java.io.*;
- import javax.servlet.ServletException;
- import javax.servlet.http.*;
- public class ThreeParams extends HttpServlet{
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- doPost(req,resp);
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- resp.setContentType("text/html;charset=GBK");
- //解决post方式提交内容的中文乱码
- //一定要卸载存取第一个参数之前
- //不要调用resp.setCharacterEncoding("GBK");
- req.setCharacterEncoding("GBK");
- //解决get方式乱码问题:修改server.xml中的connector标签-->URIEncoding="GBK"
- PrintWriter out = resp.getWriter();
- out.println(req.getParameter("p1"));
- out.println("</br>");
- out.println(req.getParameter("p2"));
- out.println("</br>");
- out.println(req.getParameter("p3"));
- out.println("</br>");
- }
- }
补充:
上面的这个例子.html中每个name都不一样,如果有多个一样的name时,可以按如下的方法来获取:
1)Enumeration paramNames = request.getParameterNames()
调用此方法获得所有参数的名字,返回一个Enumeration
2) while(paramNames.hasMoreElements()){
String paramName = (String)paramNames.nextElement();
String[] paramValues = request.getParameterValues(paramName);
...