亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

范文資料網(wǎng)>書稿范文>方法>解決方法>《5種JSP頁面顯示為亂碼的解決方法

5種JSP頁面顯示為亂碼的解決方法

時間:2022-11-19 03:25:08 解決方法 我要投稿
  • 相關(guān)推薦

5種JSP頁面顯示為亂碼的解決方法

1. JSP頁面顯示亂碼。

2. Servlet接收Form/Request傳遞的參數(shù)時顯示為亂碼

3. JSP接收Form/Request傳遞的參數(shù)時顯示為亂碼

4. 用<jsp:forward page="catalog2.html"></jsp:forward>時頁面顯示亂碼

5. 數(shù)據(jù)庫存取的時候產(chǎn)生亂碼。

下面給出全部解決方法:

1. JSP頁面顯示亂碼。

第一種為在頁面的開頭加上:

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

注:有時候如果不再頁面開頭加上這句,則頁面中無法保存中文字符,并提示:中文字符在不能被iso-8859-1字符集mapped,這是由于默認(rèn)情況下,JSP是用iso-8859-1來編碼的,可以在Window->Preferences->General->Content Type選項下,在右邊的窗口選擇Text->Jsp,然后在下面的Default Encoding由默認(rèn)的iso-8859-1改為GBK,然后點擊update即可解決。

然而這種方式會帶來一些問題:由于這一句在其他文件include該文件的時候不能被繼承,所以include它的文件也需要在文件開頭加上這句話,此時如果用的是pageEncoding="gbk"則會出現(xiàn)問題。類似于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也會出現(xiàn)問題。

另一種更好的解決方式為:

在項目的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頁面顯示為亂碼的解決方法》全文內(nèi)容當(dāng)前網(wǎng)頁未完全顯示,剩余內(nèi)容請訪問下一頁查看。

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

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

<include-prelude></include-prelude>

<include-coda></include-coda>

</jsp-property-group>

</jsp-config>

<!-- 添加的代碼結(jié)束 -->

2. Servlet接收Form/Request傳遞的參數(shù)時顯示為亂碼的解決方式:

第一種解決方式為在用到request方法的前面加上這條語句:

request.setCharacterEncoding("GBK");

同樣地,這也會由于頁面設(shè)置中GbK或gB2312大小寫不同或者采用不同的漢語字符集而發(fā)生錯誤。

另一種更好的解決方式為:添加一個名為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頁面顯示為亂碼的解決方法》全文內(nèi)容當(dāng)前網(wǎng)頁未完全顯示,剩余內(nèi)容請訪問下一頁查看。

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>

<!-- 添加代碼結(jié)束 -->

教你5種JSP頁面顯示為亂碼的解決方法2017-03-22 20:03 | #2樓

jsp編程中網(wǎng)頁顯示出現(xiàn)亂碼的情況,基本可以歸為5類: 

1. jsp頁面顯示亂碼。 

2. servlet接收form/request傳遞的參數(shù)時顯示為亂碼 

3. jsp接收form/request傳遞的參數(shù)時顯示為亂碼 

4. 用<jsp:forward page="catalog2.html"></jsp:forward>時頁面顯示亂碼 

5. 數(shù)據(jù)庫存取的時候產(chǎn)生亂碼。 

下面給出全部解決方法:1. jsp頁面顯示亂碼。

第一種為在頁面的開頭加上: 

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

注:有時候如果不再頁面開頭加上這句,則頁面中無法保存中文字符,并提示:中文字符在不能被iso-8859-1字符集mapped,這是由于默認(rèn)情況下,jsp是用iso-8859-1來編碼的,可以在window->preferences->general->content type選項下,在右邊的窗口選擇text->jsp,然后在下面的default encoding由默認(rèn)的iso-8859-1改為gbk,然后點擊update即可解決。 

然而這種方式會帶來一些問題:由于這一句在其他文件include該文件的時候不能被繼承,所以include它的文件也需要在文件開頭加上這句話,此時如果用的是pageencoding="gbk"則會出現(xiàn)問題。類似于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也會出現(xiàn)問題。 

另一種更好的解決方式為: 

在項目的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傳遞的參數(shù)時顯示為亂碼的解決方式: 

第一種解決方式為在用到request方法的前面加上這條語句: 

request.setcharacterencoding("gbk"); 

同樣地,這也會由于頁面設(shè)置中g(shù)bk或gb2312大小寫不同或者采用不同的漢語字符集而發(fā)生錯誤。 

另一種更好的解決方式為:添加一個名為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傳遞的參數(shù)時顯示為亂碼 

當(dāng)我們按照第二種亂碼的解決方式修改了web.xml并添加了filter之后,有時候并不一定就對亂碼問題高枕無憂了,有時候我們會奇怪的發(fā)現(xiàn)sevlet接收form/request傳遞的參數(shù)可以正常顯示了,但是jsp頁面接受form/request傳遞的參數(shù)卻仍然顯示為亂碼。這是為什么呢? 

對于我遇到的情況而言,我發(fā)現(xiàn)是由于我在用form發(fā)送信息的頁面采用了這樣的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屬性。而問題就發(fā)生在此,form的默認(rèn)mothod屬性為get. 

而get是通過在發(fā)送請求的url后面加?然后加參數(shù)和值來傳遞數(shù)據(jù)的的,編碼格式為ascii.這就要求我們在傳遞的數(shù)據(jù)中有非ascii字符或是超過了100個字符,那么你必須使用method="post",否則就會出現(xiàn)亂碼。 

所以解決方式為:第二種亂碼的解決方式+在發(fā)送頁面的form中指定method為post. 

【5種JSP頁面顯示為亂碼的解決方法】相關(guān)文章:

郵件亂碼解決方法09-22

CAD字體顯示問號的解決方法09-22

JSP課程總結(jié)01-07

硬盤突然顯示未格式化的解決方法01-13

頁面設(shè)計崗位職責(zé)01-14

頁面升級緊急通知02-08

頁面訪問升級的緊急通知03-13

頁面訪問升級緊急通知03-23

頁面設(shè)計崗位職責(zé)(8篇)01-14

頁面設(shè)計崗位職責(zé)8篇01-14