前台页面向后台提交中文出现乱码解决办法
2016-08-01 14:22
726 查看
首先,我把index.jsp和web.xml都贴上来吧
index.jsp
<welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
LoginServlet.java
解决中文乱码:
※前提:前台页面一般必须以post方式提交中文 ---因为post会设置http协议头“Content-Type = application/x-www-form-urlencoded”,这样Tomcat才知道这是编码的字符数据
方法一:
在Tomcat的server.xml中的<Connect>中添加一个属性:URIEncoding="utf-8",即
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8"/>
这种方法是不可取的,因为Tomcat是公共平台,你只是其中的一个项目,不能把平台看成私有的即最好不要去修改,否则其它项目可能会出问题。
方法二:
html ="<html><body><font color='red'>name:</font>"+name+"<br/><font color='red'>pwd:</font>"+pwd+"</body></html>";PrintWriter out = res.getWriter();out.print(html);}}
方法三:
方法四:
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>servlet演示</title> </head> <body> <h2>以下演示用户登录</h2> <!-- 向服务器传中文,一般使用post方式,到后面也有是使用get方式的 --> <form action="login" method="post"> 姓名:<input type="text" name="name"/><br/> 密码:<input type="password" name="pwd"/><br/> <input type="submit" value="登录"/> </form> </body> </html>web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <servlet> <servlet-name>login</servlet-name> <servlet-class>cn.hncu.servlets.LoginServlet</servlet-class> <init-param><pre name="code" class="java"><span style="white-space:pre"> </span><!-- 这几句配置的代码是给方法四准备的,先放在这里对其他几种方法也没影响 --><param-name>charset</param-name> <param-value>utf-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
LoginServlet.java
package cn.hncu.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class LoginServlet implements Servlet { @Override public void destroy() { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } @Override public void init(ServletConfig config) throws ServletException { } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { String name = req.getParameter("name"); System.out.println(name); String pwd = req.getParameter("pwd"); //用name和pwd到后台去访问数据库,以验证该用户信息是否正确(登录成功) //本例这些步骤省略了 res.setContentType("text/html;charset=utf-8");//告诉浏览器,我下面发的内容是什么格式的东西 String html ="<html><body><font color='red'>name:</font>"+name+ "<br/><font color='red'>pwd:</font>"+pwd+ "</body></html>"; PrintWriter out = res.getWriter(); out.print(html); } }
解决中文乱码:
※前提:前台页面一般必须以post方式提交中文 ---因为post会设置http协议头“Content-Type = application/x-www-form-urlencoded”,这样Tomcat才知道这是编码的字符数据
方法一:
在Tomcat的server.xml中的<Connect>中添加一个属性:URIEncoding="utf-8",即
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8"/>
这种方法是不可取的,因为Tomcat是公共平台,你只是其中的一个项目,不能把平台看成私有的即最好不要去修改,否则其它项目可能会出问题。
方法二:
package cn.hncu.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class LoginServlet implements Servlet { @Override public void destroy() { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } @Override public void init(ServletConfig config) throws ServletException { } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { //※注意:法2 和 法4 的设置必须在读取参数[ req.getParameter("..") ]之前设置,否则不行 //法2:这种解决方式是比较好的,但有一个缺点:如果以后要改编码,就得改源代码,对客户来说比较麻烦。对程序员也一样。<pre name="code" class="java"><span style="white-space:pre"> </span>//这种方法前台必须用post方式发送req.setCharacterEncoding("utf-8");String name = req.getParameter("name");System.out.println(name);String pwd = req.getParameter("pwd");//用name和pwd到后台去访问数据库,以验证该用户信息是否正确(登录成功)//本例这些步骤省略了res.setContentType("text/html;charset=utf-8");//告诉浏览器,我下面发的内容是什么格式的东西String
html ="<html><body><font color='red'>name:</font>"+name+"<br/><font color='red'>pwd:</font>"+pwd+"</body></html>";PrintWriter out = res.getWriter();out.print(html);}}
方法三:
package cn.hncu.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class LoginServlet implements Servlet { @Override public void destroy() { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } @Override public void init(ServletConfig config) throws ServletException { } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { String name = req.getParameter("name"); System.out.println(name); //法3:把Tomcat解错的码还原回来----这种方法还行,但如果前台传输的很多参数都是中文,那么我们对每个参数都要这样还原,显然比较麻烦! //并且这种方法前台也可以用get方式 byte[] buf=name.getBytes("iso-8859-1"); name=new String(buf,"utf-8"); System.out.println(name); String pwd = req.getParameter("pwd"); //用name和pwd到后台去访问数据库,以验证该用户信息是否正确(登录成功) //本例这些步骤省略了 res.setContentType("text/html;charset=utf-8");//告诉浏览器,我下面发的内容是什么格式的东西 String html ="<html><body><font color='red'>name:</font>"+name+ "<br/><font color='red'>pwd:</font>"+pwd+ "</body></html>"; PrintWriter out = res.getWriter(); out.print(html); } }
方法四:
package cn.hncu.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class LoginServlet implements Servlet { @Override public void destroy() { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } String charset=null; @Override public void init(ServletConfig config) throws ServletException { charset=config.getInitParameter("charset"); } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { //※注意:法2 和 法4 的设置必须在读取参数[ req.getParameter("..") ]之前设置,否则不行 //法4:其实是在web.xml中把编码设置成参数,即设置配置文件,然后在这里读取出来,利用“法2”进行设置。以后如果要更改编码, //只要更改web.xml中的相应参数设置就OK了 req.setCharacterEncoding(charset); String name = req.getParameter("name"); System.out.println(name); String pwd = req.getParameter("pwd"); //用name和pwd到后台去访问数据库,以验证该用户信息是否正确(登录成功) //本例这些步骤省略了 res.setContentType("text/html;charset=utf-8");//告诉浏览器,我下面发的内容是什么格式的东西 String html ="<html><body><font color='red'>name:</font>"+name+ "<br/><font color='red'>pwd:</font>"+pwd+ "</body></html>"; PrintWriter out = res.getWriter(); out.print(html); } }
相关文章推荐
- 前台jsp页面向后台传汉字出现乱码问题解决办法
- js前台传中文到后台出现乱码最终解决办法
- 从JSP前台页面传中文参数,到后台接受出现乱码,如何解决?
- 关于struts2.1.6前台传递中文参数到后台action出现乱码问题的解决办法
- ajax post 提交中文java后台获取参数出现乱码解决方法
- jsp输出中文页面乱码,中文提交后文本框里乱码,后台中文变乱码,全解决
- 关于jsp中文提交到后台乱码问题解决办法
- jquery.post()的值到后台出现中文乱码的解决办法
- jsp页面中href到另一个页面传递参数,参数中有中文出现乱码的解决办法!
- 解决前台jsp页面提交中文数据以后,数据库中乱码问题??
- 解决前台和后台传值出现中文乱码
- JSP页面多次提交时(后台对表单有校验功能 )提示信息重复出现解决办法
- JSP中乱码问题解决(一、JSP页面显示乱码,二、表单提交中文时出现乱码,三、数据库连接出现乱码,四、数据库的显示乱码 )
- 解决前台jsp中中文提交到后台乱码问题
- Extjs前台传值到后台出现中文乱码,解决
- 关于页面包含中文参数传递到后台有乱码的解决办法
- JSP页面表单提交时出现中文乱码的解决方法
- Form提交中文数据时,后台获得出现乱码问题解决。
- 后台return中文到前台乱码 解决办法
- 用ajax传递json到前台中文出现问号乱码问题的解决办法