JSP乱码问题

在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码、参数乱码、表单乱码、源文件乱码。下面来逐一解决其中的乱码问题。
一、JSP页面中文乱码
在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码。
先看一个JSP程序:
[java]
<%@ page language="java" import="java.util.*"  %> 
<html> 
    <head> 
    <title>中文显示示例</title> 
 
    </head>  
    <body> 
    这是一个中文显示示例: 
    <% 
        String str = "中文"; 
        out.print(str); 
    %> 
    </body> 
</html> 

上面这个JSP程序看起来好像是在页面显示几句中文而且标题也是中文。运行后在浏览器中显示如图所示  


 

原因在于没有在JSP中指定页面显示的编码,消除乱码的解决方案很简单上面代码中page命令修改成如下所示即可
 
[java]
<%@ page language="java" import="java.util.*" contentType="text/html; charset=GB2312" %> 
<html> 
    <head> 
    <title>中文显示示例</title> 
 
    </head>  
    <body> 
    这是一个中文显示示例: 
    <% 
        String str = "中文"; 
        out.print(str); 
    %> 
    </body> 
</html> 

再次运行乱码消失,原理就是向页面指定编码为GB2312,那么页面就会按照此编码来显示,于是乱码消失。
二、URL传递参数中文乱码
一般情况下在使用get方法提交表单的时候传递的参数如果是中文的话很可能会出现乱码。
下面是一个示例程序
[java]
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> 
<html> 
    <head>  
        <title>URL传递参数中文处理示例</title> 
    </head> 
    <% 
        String param = request.getParameter("param"); 
    %> 
    <body> 
        <a href="URLCharset.jsp?param='中文'">请点击这个链接</a><br> 
        你提交的参数为:<%=param%> 
    </body> 
</html> 

上面这个JSP程序的功能就是通过一个URL链接向自身传递一个参数,这个参数是中文字符串,这个程序的运行效果如下图  JSP乱码问题_第1张图片

 

对于URL传递中文参数乱码这个问题,其处理方法比较特殊,仅仅转换这个中文字符串或者设置JSP页面显示编码都是不能解决问题的,需要修改Tomcat服务器的配置文件才能解决问题。在这里修改Tomcat的conf目录下的server.xml配置文件,具体改后的代码如下


[html]
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="gb2312" 
               connectionTimeout="20000"   
               redirectPort="8443" /> 
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="gb2312"
               connectionTimeout="20000" 
               redirectPort="8443" />


在原来代码中添加URI编码设置URIEncoding=“gb2312”即可,重启Tomcat服务器可以得到正确的页面。其原理也和上面的情况类似,就是向程序指明编码类型,然后显示就正常了。

三、表单提交中文乱码

对于表单的数据可以使用request.getParameter(“”)的方法获取,但是当表单中出现中文数据的时候就会出现乱码。

示例代码如下


[java]
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> 
<html> 
    <head>    
        <title>Form中文处理示例</title> 
    </head>  
    <body> 
        <font size="2"> 
                下面是表单内容: 
            <form action="AcceptFormCharset.jsp" method="post"> 
                用户名:<input type="text" name="userName" size="10"/> 
                密  码:<input type="password" name="password" size="10"/> 
                <input type="submit" value="提交"> 
            </form>   
        </font> 
    </body> 
</html> 
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
<html>
 <head>  
  <title>Form中文处理示例</title>
 </head>
 <body>
  <font size="2">
    下面是表单内容:
   <form action="AcceptFormCharset.jsp" method="post">
    用户名:<input type="text" name="userName" size="10"/>
    密  码:<input type="password" name="password" size="10"/>
    <input type="submit" value="提交">
   </form> 
  </font>
 </body>
</html>


在上面的表单当中想AcceptFormCharset这个页面提价两项数据,下面是AcceptFormCharset.jsp的内容:


[java]
<%@ page language="java" import="java.util.*" 
    contentType="text/html;charset=gb2312"%> 
<html> 
    <head> 
        <title>Form中文乱码</title> 
    </head> 
    <body> 
        <font size="2"> 下面是表单提交以后用request取到的表单数据:<br> 
            <% 
                String userName = request.getParameter("userName"); 
                String password = request.getParameter("password"); 
                out.println("表单输入userName的值:" + userName + "<br>"); 
                out.println("表单输入password的值:" + password + "<br>"); 
             %>  
        </font> 
    </body> 
</html> 
<%@ page language="java" import="java.util.*"
 contentType="text/html;charset=gb2312"%>
<html>
 <head>
  <title>Form中文乱码</title>
 </head>
 <body>
  <font size="2"> 下面是表单提交以后用request取到的表单数据:<br>
   <%

你可能感兴趣的:(JSP乱码问题)