- 相关推荐
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