范文资料网>书稿范文>方法>解决方法>《5种JSP页面显示为乱码的解决方法

5种JSP页面显示为乱码的解决方法

时间:2022-11-19 03:25:08 解决方法 我要投稿
  • 相关推荐

5种JSP页面显示为乱码的解决方法

1. JSP页面显示乱码。

2. Servlet接收Form/Request传递的参数时显示为乱码

3. JSP接收Form/Request传递的参数时显示为乱码

4. 用<jsp:forward page="catalog2.html"></jsp:forward>时页面显示乱码

5. 数据库存取的时候产生乱码。

下面给出全部解决方法:

1. JSP页面显示乱码。

第一种为在页面的开头加上:

<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <!--这里的 GBK可以由 gb2312代替,此处以GBK为例。下同 -->

注:有时候如果不再页面开头加上这句,则页面中无法保存中文字符,并提示:中文字符在不能被iso-8859-1字符集mapped,这是由于默认情况下,JSP是用iso-8859-1来编码的,可以在Window->Preferences->General->Content Type选项下,在右边的窗口选择Text->Jsp,然后在下面的Default Encoding由默认的iso-8859-1改为GBK,然后点击update即可解决。

然而这种方式会带来一些问题:由于这一句在其他文件include该文件的时候不能被继承,所以include它的文件也需要在文件开头加上这句话,此时如果用的是pageEncoding="gbk"则会出现问题。类似于org.apache.jasper.JasperException: /top.jsp(1,1) Page directive: illegal to have multiple occurrences of contentType with different values (old: text/html;charset=GBK, new: text/html;charset=gbk).

类似地,如果两个文件一个用的是gbk,一个用的是gb2312也会出现问题。

另一种更好的解决方式为:

在项目的web.xml中添加以下片段:

<!-- 下面的代码为解决页面乱码问题而加入 -->

<jsp-config>

<jsp-property-group>

<description>

Special property group for JSP Configuration JSP example. </description>

<display-name>JSPConfiguration</display-name>

<url-pattern>*.jsp</url-pattern>

<el-ignored>true</el-ignored>

<page-encoding>GBK</page-encoding>

<scripting-invalid>false</scripting-invalid>

<include-prelude></include-prelude>

<include-coda></include-coda>

</jsp-property-group>

<jsp-property-group>

<description>

Special property group for JSP Configuration JSP example. </description>

<display-name>JSPConfiguration</display-name>

<url-pattern>*.html</url-pattern>

<el-ignored>true</el-ignored>

《5种JSP页面显示为乱码的解决方法》全文内容当前网页未完全显示,剩余内容请访问下一页查看。

<page-encoding>GBK</page-encoding>

<scripting-invalid>false</scripting-invalid>

<include-prelude></include-prelude>

<include-coda></include-coda>

</jsp-property-group>

</jsp-config>

<!-- 添加的代码结束 -->

2. Servlet接收Form/Request传递的参数时显示为乱码的解决方式:

第一种解决方式为在用到request方法的前面加上这条语句:

request.setCharacterEncoding("GBK");

同样地,这也会由于页面设置中GbK或gB2312大小写不同或者采用不同的汉语字符集而发生错误。

另一种更好的解决方式为:添加一个名为SetCharacterEncodingFilter的filter。

filter的源文件为(参见apach安装目录下\webapps\jsp-examples\WEB-INF\classes\filters中的SetCharacterEncodingFilter.java文件):

package com.filters;import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.UnavailableException;

public class SetCharacterEncodingFilter implements Filter {

protected String encoding = null;

protected FilterConfig filterConfig = null;

protected boolean ignore = true;

public void destroy() {

this.encoding = null;

this.filterConfig = null;

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

// Conditionally se-le-ct and set the character encoding to be used if (ignore || (request.getCharacterEncoding() == null)) { String encoding = se-le-ctEncoding(request);

if (encoding != null)

request.setCharacterEncoding(encoding);

}

// Pass control on to the next filter

chain.doFilter(request, response);

}

public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig;

this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore");

《5种JSP页面显示为乱码的解决方法》全文内容当前网页未完全显示,剩余内容请访问下一页查看。

if (value == null)

this.ignore = true;

else if (value.equalsIgnoreCase("true"))

this.ignore = true;

else if (value.equalsIgnoreCase("yes"))

this.ignore = true;

else

this.ignore = false;

}

protected String se-le-ctEncoding(ServletRequest request) {

return (this.encoding);

}

}

同时在web.xml中添加一下片段:

<!-- 为解决乱码问题而添加 -->

<filter>

<filter-name>SetCharacterEncoding</filter-name>

<filter-class>com.filters.SetCharacterEncodingFilter</filter-class> <init-param>

<param-name>encoding</param-name>

<param-value>GBK</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>SetCharacterEncoding</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 添加代码结束 -->

教你5种JSP页面显示为乱码的解决方法2017-03-22 20:03 | #2楼

jsp编程中网页显示出现乱码的情况,基本可以归为5类: 

1. jsp页面显示乱码。 

2. servlet接收form/request传递的参数时显示为乱码 

3. jsp接收form/request传递的参数时显示为乱码 

4. 用<jsp:forward page="catalog2.html"></jsp:forward>时页面显示乱码 

5. 数据库存取的时候产生乱码。 

下面给出全部解决方法:1. jsp页面显示乱码。

第一种为在页面的开头加上: 

<%@ page language="java" contenttype="text/html; charset=gbk" pageencoding="gbk"%> 

注:有时候如果不再页面开头加上这句,则页面中无法保存中文字符,并提示:中文字符在不能被iso-8859-1字符集mapped,这是由于默认情况下,jsp是用iso-8859-1来编码的,可以在window->preferences->general->content type选项下,在右边的窗口选择text->jsp,然后在下面的default encoding由默认的iso-8859-1改为gbk,然后点击update即可解决。 

然而这种方式会带来一些问题:由于这一句在其他文件include该文件的时候不能被继承,所以include它的文件也需要在文件开头加上这句话,此时如果用的是pageencoding="gbk"则会出现问题。类似于org.apache.jasper.jasperexception: /top.jsp(1,1) page directive: illegal to have multiple occurrences of contenttype with different values (old: text/html;charset=gbk, new: text/html;charset=gbk). 

类似地,如果两个文件一个用的是gbk,一个用的是gb2312也会出现问题。 

另一种更好的解决方式为: 

在项目的web.xml中添加以下片段: 

<jsp-config> 

<jsp-property-group> 

<description> 

special property group for jsp configuration jsp example. 

</description> 

<display-name>jspconfiguration</display-name> 

<url-pattern>*.jsp</url-pattern> 

<el-ignored>true</el-ignored> 

<page-encoding>gbk</page-encoding> 

<scripting-invalid>false</scripting-invalid> 

<include-prelude></include-prelude> 

<include-coda></include-coda> 

</jsp-property-group> 

<jsp-property-group> 

<description> 

special property group for jsp configuration jsp example. 

</description> 

<display-name>jspconfiguration</display-name> 

<url-pattern>*.html</url-pattern> 

<el-ignored>true</el-ignored> 

<page-encoding>gbk</page-encoding> 

<scripting-invalid>false</scripting-invalid> 

<include-prelude></include-prelude> 

<include-coda></include-coda> 

</jsp-property-group> 

</jsp-config> 

2. servlet接收form/request传递的参数时显示为乱码的解决方式: 

第一种解决方式为在用到request方法的前面加上这条语句: 

request.setcharacterencoding("gbk"); 

同样地,这也会由于页面设置中gbk或gb2312大小写不同或者采用不同的汉语字符集而发生错误。 

另一种更好的解决方式为:添加一个名为setcharacterencodingfilter的filter。 

filter的源文件为(参见apach安装目录下\webapps\jsp-examples\web-inf\classes\filters中的setcharacterencodingfilter.java文件): 

package com.filters;import java.io.ioexception; 

import javax.servlet.filter; 

import javax.servlet.filterchain; 

import javax.servlet.filterconfig; 

import javax.servlet.servletexception; 

import javax.servlet.servletrequest; 

import javax.servlet.servletresponse; 

import javax.servlet.unavailableexception; 

public class setcharacterencodingfilter implements filter { 

protected string encoding = null; 

protected filterconfig filterconfig = null; 

protected boolean ignore = true; 

public void destroy() { 

this.encoding = null; 

this.filterconfig = null; 

public void dofilter(servletrequest request, servletresponse response, 

filterchain chain) 

throws ioexception, servletexception { 

// conditionally se-le-ct and set the character encoding to be used 

if (ignore || (request.getcharacterencoding() == null)) { 

string encoding = se-le-ctencoding(request); 

if (encoding != null) 

request.setcharacterencoding(encoding); 

// pass control on to the next filter 

chain.dofilter(request, response); 

public void init(filterconfig filterconfig) throws servletexception { 

this.filterconfig = filterconfig; 

this.encoding = filterconfig.getinitparameter("encoding"); 

string value = filterconfig.getinitparameter("ignore"); 

if (value == null) 

this.ignore = true; 

else if (value.equalsignorecase("true")) 

this.ignore = true; 

else if (value.equalsignorecase("yes")) 

this.ignore = true; 

else 

this.ignore = false; 

protected string se-le-ctencoding(servletrequest request) { 

return (this.encoding); 

同时在web.xml中添加一下片段: 

<filter> 

<filter-name>setcharacterencoding</filter-name> 

<filter-class>com.filters.setcharacterencodingfilter</filter-class> 

<init-param> 

<param-name>encoding</param-name> 

<param-value>gbk</param-value> 

</init-param> 

</filter> 

<filter-mapping> 

<filter-name>setcharacterencoding</filter-name> 

<url-pattern>/*</url-pattern> 

</filter-mapping> 

3. jsp接收form/request传递的参数时显示为乱码 

当我们按照第二种乱码的解决方式修改了web.xml并添加了filter之后,有时候并不一定就对乱码问题高枕无忧了,有时候我们会奇怪的发现sevlet接收form/request传递的参数可以正常显示了,但是jsp页面接受form/request传递的参数却仍然显示为乱码。这是为什么呢? 

对于我遇到的情况而言,我发现是由于我在用form发送信息的页面采用了这样的html: 

<form action="getparam.jsp" > 

姓名<input type="text" name ="username"> <br> 

选出你喜欢吃的水果: 

<input type ="checkbox" name = "checkbox1" value = "苹果"> 苹果 

<input type ="checkbox" name = "checkbox1" value = "西瓜"> 西瓜 

<input type ="checkbox" name = "checkbox1" value = "桃子"> 桃子 

<input type ="checkbox" name = "checkbox1" value = "葡萄"> 葡萄 

<input type = "submit" value = "提交"> 

</form> 

也就是说没有指定form的method属性。而问题就发生在此,form的默认mothod属性为get. 

而get是通过在发送请求的url后面加?然后加参数和值来传递数据的的,编码格式为ascii.这就要求我们在传递的数据中有非ascii字符或是超过了100个字符,那么你必须使用method="post",否则就会出现乱码。 

所以解决方式为:第二种乱码的解决方式+在发送页面的form中指定method为post. 

【5种JSP页面显示为乱码的解决方法】相关文章:

邮件乱码解决方法09-22

CAD字体显示问号的解决方法09-22

JSP课程总结01-07

硬盘突然显示未格式化的解决方法01-13

页面设计岗位职责01-14

页面升级紧急通知02-08

页面访问升级的紧急通知03-13

页面访问升级紧急通知03-23

页面设计岗位职责(8篇)01-14

页面设计岗位职责8篇01-14