JSP對瀏覽器發(fā)送來的數(shù)據(jù)進行重新編碼的兩種方式
更新時間:2013年09月23日 15:59:21 作者:
使用JSP操作中文時,經(jīng)常會出現(xiàn)一些亂碼問題。這里,我們只談一下對瀏覽器發(fā)送來的數(shù)據(jù)進行重新編碼時的編碼方式。眾所周知,要對瀏覽器發(fā)送來的數(shù)據(jù)進行重新編碼,只需要一個語句就可以了,很簡單
最近做的DRP項目中,使用JSP操作中文時,經(jīng)常會出現(xiàn)一些亂碼問題。這些問題導(dǎo)致中文無法輸入,或者是無法正常顯示。這里就涉及到了字符集的設(shè)置、字符集的編碼方式。
在JSP/Servlet中主要有以下幾個地方可以設(shè)置編碼,pageEncoding="GB18030",contentType="text/html;charset=GB18030"、request.setCharacterEncoding("GB18030")和 response.setCharacterEncoding("GB18030"),其中前兩個只能用于JSP中,而后兩個可以用于JSP和Servlet 中。
這里,我們只談一下對瀏覽器發(fā)送來的數(shù)據(jù)進行重新編碼時的編碼方式。眾所周知,要對瀏覽器發(fā)送來的數(shù)據(jù)進行重新編碼,只需要一個語句就可以了,很簡單。
方案一:(很簡單吧)
<span style="font-family:Microsoft YaHei; font-size:18px">request.setCharacterEncoding("GB18030");</span><span style="font-family:'Microsoft YaHei'; font-size:18px"></span>
但是,這里就出現(xiàn)了一個問題,需要設(shè)置字符級的頁面有很多,而且,這樣的方式也缺乏靈活性,對于日后的維護限制很大,因此,我對方案一進行了一下優(yōu)化,加入了Filter接口,將設(shè)置字符集的語句抽象出一個java類,該java類實現(xiàn)了Filter接口。下面我們來看一下代碼。
方案二:(采用Filter統(tǒng)一處理字符集)
<span style="font-family:Microsoft YaHei; font-size:18px">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 org.omg.CORBA.Request;
/**
* 采用Filter統(tǒng)一處理字符集
* @author jerry
*
*/
public class CharsetEncodingFilter implements Filter {
private String encoding = null;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//System.out.println("CharsetEncodingFilter--->>>>begin");
// 設(shè)置字符集
request.setCharacterEncoding(encoding);
// 繼續(xù)執(zhí)行
chain.doFilter(request, response);
//System.out.println("CharsetEncodingFilter--->>>>end");
}
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
//System.out.println("System.out.println---->>>encoding" + encoding);
}
}</span>
有了Filter類還不行,還需要在web.xml中進行配置。
<span style="font-family:Microsoft YaHei; font-size:18px"><filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping></span>
在這里,對編碼方式進行了一個靈活的設(shè)置,可以在配置文件中靈活更改,為日后的維護簡化了很多。
從這個小例子中,我們可以看到,其實有很多的代碼是可以進行優(yōu)化的,從能實現(xiàn)功能的簡單代碼逐漸優(yōu)化成不懼各種修改、各種維護的更優(yōu)代碼,這其中更多的是對代碼優(yōu)化的思考,顯然,我還不夠格,還需要更多的練習(xí),更多的思考。
在JSP/Servlet中主要有以下幾個地方可以設(shè)置編碼,pageEncoding="GB18030",contentType="text/html;charset=GB18030"、request.setCharacterEncoding("GB18030")和 response.setCharacterEncoding("GB18030"),其中前兩個只能用于JSP中,而后兩個可以用于JSP和Servlet 中。
這里,我們只談一下對瀏覽器發(fā)送來的數(shù)據(jù)進行重新編碼時的編碼方式。眾所周知,要對瀏覽器發(fā)送來的數(shù)據(jù)進行重新編碼,只需要一個語句就可以了,很簡單。
方案一:(很簡單吧)
復(fù)制代碼 代碼如下:
<span style="font-family:Microsoft YaHei; font-size:18px">request.setCharacterEncoding("GB18030");</span><span style="font-family:'Microsoft YaHei'; font-size:18px"></span>
但是,這里就出現(xiàn)了一個問題,需要設(shè)置字符級的頁面有很多,而且,這樣的方式也缺乏靈活性,對于日后的維護限制很大,因此,我對方案一進行了一下優(yōu)化,加入了Filter接口,將設(shè)置字符集的語句抽象出一個java類,該java類實現(xiàn)了Filter接口。下面我們來看一下代碼。
方案二:(采用Filter統(tǒng)一處理字符集)
復(fù)制代碼 代碼如下:
<span style="font-family:Microsoft YaHei; font-size:18px">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 org.omg.CORBA.Request;
/**
* 采用Filter統(tǒng)一處理字符集
* @author jerry
*
*/
public class CharsetEncodingFilter implements Filter {
private String encoding = null;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//System.out.println("CharsetEncodingFilter--->>>>begin");
// 設(shè)置字符集
request.setCharacterEncoding(encoding);
// 繼續(xù)執(zhí)行
chain.doFilter(request, response);
//System.out.println("CharsetEncodingFilter--->>>>end");
}
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
//System.out.println("System.out.println---->>>encoding" + encoding);
}
}</span>
有了Filter類還不行,還需要在web.xml中進行配置。
復(fù)制代碼 代碼如下:
<span style="font-family:Microsoft YaHei; font-size:18px"><filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping></span>
在這里,對編碼方式進行了一個靈活的設(shè)置,可以在配置文件中靈活更改,為日后的維護簡化了很多。
從這個小例子中,我們可以看到,其實有很多的代碼是可以進行優(yōu)化的,從能實現(xiàn)功能的簡單代碼逐漸優(yōu)化成不懼各種修改、各種維護的更優(yōu)代碼,這其中更多的是對代碼優(yōu)化的思考,顯然,我還不夠格,還需要更多的練習(xí),更多的思考。
相關(guān)文章
asp.net getRemoteAddr()與 getRemoteHost()的區(qū)別
getRemoteAddr()與 getRemoteHost()的區(qū)別小結(jié),需要的朋友可以參考下。2009-12-12JSP動態(tài)實現(xiàn)web網(wǎng)頁登陸和注冊功能
這篇文章主要介紹是動態(tài)實現(xiàn)web網(wǎng)頁登陸和注冊功能的示例代碼,文中代碼講解詳細,對我們學(xué)習(xí)JSP有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12servlet+JSP+mysql實現(xiàn)文件上傳的方法
這篇文章主要介紹了servlet+JSP+mysql實現(xiàn)文件上傳的方法,涉及JSP文件傳輸與判斷及數(shù)據(jù)庫操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11jsp hibernate 數(shù)據(jù)保存操作的原理
當執(zhí)行到session.save()方法時,Hibernate并不會馬上生成insert SQL語句來進行數(shù)據(jù)的保存,而是當稍后清理session的緩存時才有可能執(zhí)行insert SQL語句,那么session.save()方法到底會執(zhí)行哪些步驟呢?2008-11-11jsp+ajax實現(xiàn)的局部刷新較驗驗證碼(onblur事件觸發(fā)較驗)
這篇文章主要介紹了jsp+ajax實現(xiàn)的局部刷新較驗驗證碼,基于onblur事件觸發(fā)較驗功能,以實例形式詳細的分析了前臺顯示、圖片生成及Ajax動態(tài)驗證等詳細技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10