jsp如何解决Form表单乱码问题

  网站程序中的Form表单,是重要的组成内容之一,很多时候,Form表单会出现乱码的现象,会给网站造成一定的困扰。如何解决乱码的问题?

  JSP和Servlet的六种中文乱码处理方法

  一、表单提交时出现乱码:

  在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式。所以请求的时候便有get请求和post请求。每种方式都有着不同的解决方法,之所以出现乱码,原因就在于get请求时,其传递给服务器的数据是附加在URL地址之后的;而post的请求时,其传递给服务器的数据是作为请求体的一部分传递给服务器。这也就导致了对它们所产生的乱码的处理方式是不同的。

  1、客户端的get请求

  对于不同的请求方式,解决乱码的问题也是不一样的,对于客户端的get请求来说,服务器端处理要想不出现乱码,解决这个问题稍微复杂一些,需要用到String类型的构造函数,其中的一个构造函数就是用指定的编码方式去解码,一般都用“UTF-8”的方式。只要在服务器端将请求得到的参数重新构造成一个字符串就行了。

  经过构造之后,客户端输入中文,且表单时get请求的情况下,str就变成了中文了。

  2、客户端的post请求

  对于客户端的post请求来说,处理乱码的问题就比较简单了,因为请求的数据时作为请求体的一部分传递给服务器的,所以只要修改请求内的编码就行了。只要在服务器端的最开始处将请求的数据设置为“UTF-8”就行了,输入如下语句:request. setCharacterEncoding(“UTF-8”);这样用户在服务器端获取到的中文数据就不再是乱码了。

  二、超链接时出现乱码(低版本浏览器不行IE6)

  在Web开发中,挺多的时候都是通过超链接去传递中文参数的,这也会导致在显示的时候也会出现乱码,对于超链接来说,它实际上是向服务器端发送了一个请求,而它发出的请求是属于get请求,所以对于超链接的乱码来说,它处理乱码的方式和表单的get请求出现乱码的方式是一样的。

  三、重定向时出现乱码(低版本浏览器不行IE6)

  有时写上response的sendRedirect方法进行重定向时也会出现乱码,重定向时实际上也是向服务器发送了一个请求,所以解决乱码的方法和和上面是一样的。

  四、浏览器版本低导致的乱码

  上网的时候,有时提交的一些信息在地址栏显示的是“%2C%C6%CC%C6”的字样,其实这都是防止出现乱码进行的解决方案,如果你的浏览器是IE6或以下版本,则我们的第二种情况和第三种情况会出现乱码(尤其是当中文是奇数的时候),这就不好使了所以我们必须采用另一种比较实际的作法:

  在java.net包中提供了URLEncoder类和URLDcoder类,这两个类又分别提供了encode和decode两个静态方法,分别用于进行编码和解码。我们将要传递的中文参数进行编码之后,在传递给服务器,服务器解码之后,就可以显示中文了。

  进行编码:URLEncoder.encode(stuname,”UTF-8”)

  传递给服务器:<a href=”/1.jsp?stuname<%=stuname%>”>传递</a>

  进行解码:URLDecoder.decode(stuname,”UTF-8”)

  五、返回浏览器显示的乱码

  在Servlet编程中,经常需要通过response对象将一些信息返回给浏览器,给我们的客户端,而我们在服务器端显示的中文,但是响应给客户端浏览器却是乱码,这主要是由于response对象的getWriter()方法返回的PrintWriter对象默认使用“ISO-8859-1”字符集编码进行Unicode字符串到字节数组的转换,由于ISO8859-1字符集中根本就没有包含中文字符,所以Java在进行转换的时候会将无效的字符编码输出给客户端,于是便出现了乱码,为此ServletResponse接口中便定义了setCharacterEncoding、setContentType等方法来指定getWriter方法返回的PrintWriter对象所使用的字符集编码,所以我们在写Servlet程序中,在调用getWriter方法之前设置这些方法的值。

  只要编写Servlet文件中含有响应给客户端的信息,那么就要写上这两句话。最好写上第二句话,因为它的优先级高,它的设置结果将覆盖setContentType等方法设置的字符编码集。

  六、修改Tomcat的编码

  在get请求所导致乱码问题中,还有一种解决的方案,我们常用Tomcat作为运行Servlet和JSP的容器,而Tomcat内部默认的编码是ISO-8859-1,所以对于get请求方式,其传递的数据(URI)会附加在访问的资源后面,其编码是Tomcat默认的,如果修改该URI的编码,那么对于所有的get请求方式便不会出现乱码了包括上边说的重定向和超链接,在Tomcat的配置文件server.xml中找到修改Tomcat的端口的地方,在其内部加入URIEncoding属性,设置为和你的项目中所设的编码一样的值,这里全部都是UTF-8。

  在编写Servlet和JSP的时候,为了避免出现乱码,最重要的就是:采用一致的编码,如果编码都一致了,肯定不会出现乱码。

时间: 2024-11-02 09:59:45

jsp如何解决Form表单乱码问题的相关文章

在jsp中提交form表单不能跳转进方法

问题描述 在jsp中提交form表单不能跳转进方法 我用的form表单提交的,jsp里 这样,js是function search(){ var myselec = $('#myselectHidden').val(); $.ajax({ type:'POST', data: {param:"myselec",isAll:"yes",param2:myselec}, url:'outQueryOption', success:function(data){ var

jsp文件在WEB-INF下,如果要向另外一个在WEB-INF下的jsp文件提交form表单怎么办?

问题描述 jsp文件在WEB-INF下,如果要向另外一个在WEB-INF下的jsp文件提交form表单怎么办? java新手,在学jsp时发现这个问题,不知道怎么处理,WEB-INF下都会进行保护,那在WEB-INF文件夹内的jsp文件之间要提交form表单应该如何处理 解决方案 http://bbs.csdn.net/topics/390150081

跳转路径-急求解决,jsp页面中循环生成的form表单,action路径错误

问题描述 急求解决,jsp页面中循环生成的form表单,action路径错误 在jsp页面中用循环生成的form表单,为什么action不是想要的呢,代码贴在下面了 reply=(Map)request.getAttribute("REPLY"); while(rsComment.next()) { // 评论编号 String CId = rsComment.getString("CId"); // 评论人 String name=rsComment.getStr

jsp中form表单的工作原理?

问题描述 jsp中form表单的工作原理? 1.为什么form表单可以提交到下个页面并且传值? 2.在form表单jsp页面转换成servlet页面后,里面只有一堆out.print().怎么不见跳转,或者传值类的东西? 求各位大神解惑,谢谢大家 解决方案 是HTML标签,是浏览器所识别的,所以浏览器会自动识别这个东西,知道是http请求服务器的,并通过tcp/ip协议传输,和servlet没有关系,jsp是可以在html中嵌套java代码并最终生成servlet的.

php解决和避免form表单重复提交的几种方法_php技巧

前言 为什么要避免form表单被重复提交呢?因为我们不想让我们的服务器重复处理没必要的数据,同时我们也是避免我们的数据库产生重复的数据,避免表单重复提交也是让我们的网站更安全的一种表现. 先看一下有哪些情况下回导致表单重复提交呢,知道哪些情况下可能会出现表单重复提交就可以从根源处理表单重复提交的情况了. 下面的情况就会导致表单重复提交:       点击提交按钮两次.       点击刷新按钮.       使用浏览器后退按钮重复之前的操作,导致重复提交表单.       使用浏览器历史记录重复

asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)

原文:asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!) 我想用post的方式把一个页面表单的值,传到另一个页面.当我点击Default.aspx的Send提交按钮时,这个时候会action到Default2.aspx页面,在这个时候就报错了,报的错误是:Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, e

在JSP文件中的同一个form表单有多个用来提交表单值的按钮,用户可以通过不同的按钮提交表单,需要调用Action中的不同处理方法,该怎么使用动态方法调用?

问题描述 Action 问题补充:是struts2 怎么修改jsP动态form的action名称呀? 解决方案 function formSubmit(){document.form1.method="post"; var url ="<%=request.getContextPath()%>/hrt/chartSichuan.do?method=recordList"; document.form1.action= url; document.form

jsp form表单submit后 request.getParameter获取的值为null

问题描述 jsp form表单submit后 request.getParameter获取的值为null public class ReverseString{ public static String reverse(String s){ char []c=new char[s.length()]; for(int i=0;i<s.length();i++) c[i]=s.charAt(s.length()-1-i); return String.valueOf(c); } public st

js的form表单提交url传参数(包含+等特殊字符)的两种解决方法_javascript技巧

方法一:(伪装form表单提交) linkredwin = function(A,B,C,D,E,F,G){ var formredwin = document.createElement("form"); formredwin.method = 'POST'; document.body.appendChild(formredwin); formredwin.action = "http://www.A.com/A.wiki?A=" +encodeURI(A) +