最近做的DRP项目中,使用JSP操作中文时,经常会出现一些乱码问题。这些问题导致中文无法输入,或者是无法正常显示。这里就涉及到了字符集的设置、字符集的编码方式。
在JSP/Servlet中主要有以下几个地方可以设置编码,pageEncoding="GB18030",contentType="text/html;charset=GB18030"、request.setCharacterEncoding("GB18030")和 response.setCharacterEncoding("GB18030"),其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet
中。
这里,我们只谈一下对浏览器发送来的数据进行重新编码时的编码方式。众所周知,要对浏览器发送来的数据进行重新编码,只需要一个语句就可以了,很简单。
方案一:(很简单吧)
request.setCharacterEncoding("GB18030");
但是,这里就出现了一个问题,需要设置字符级的页面有很多,而且,这样的方式也缺乏灵活性,对于日后的维护限制很大,因此,我对方案一进行了一下优化,加入了Filter接口,将设置字符集的语句抽象出一个java类,该java类实现了Filter接口。下面我们来看一下代码。
方案二:(采用Filter统一处理字符集)
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统一处理字符集
* @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");
// 设置字符集
request.setCharacterEncoding(encoding);
// 继续执行
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);
}
}
有了Filter类还不行,还需要在web.xml中进行配置。
<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>
在这里,对编码方式进行了一个灵活的设置,可以在配置文件中灵活更改,为日后的维护简化了很多。
从这个小例子中,我们可以看到,其实有很多的代码是可以进行优化的,从能实现功能的简单代码逐渐优化成不惧各种修改、各种维护的更优代码,这其中更多的是对代码优化的思考,显然,我还不够格,还需要更多的练习,更多的思考。
分享到:
相关推荐
为了解决这些问题,JSP提供了多种方式来对数据进行重新编码。 首先,需要了解的是字符集的设置和编码方式。字符集(Character Set)定义了字符与字节之间的映射关系,而编码方式(Encoding)则是将字符转换为字节...
JSP提供了两个方法来帮助开发者实现这个功能:`response.encodeURL()`和`response.encodeRedirectURL()`。 `response.encodeURL(String url)`方法的作用是在给定的URL后面附加Session ID,但仅当浏览器不支持...
这是一个编译时的设定,它不会影响到最终发送到浏览器的内容,而是确保JSP引擎在处理包含非ASCII字符的源代码时,能正确识别和转换这些字符。 两者之间的主要区别在于作用范围和时间点: 1. `pageEncoding`仅在JSP...
pageEncoding主要关注JSP源文件的内部编码,而contentType则关注最终发送到浏览器的数据格式和编码。在实际应用中,应确保pageEncoding和contentType的编码一致,以避免在数据传输过程中出现乱码。 举个例子,如果...
例如,浏览器可能使用GBK或UTF-8等不同的字符集发送数据,而服务器(如Tomcat)可能使用其他编码来解码这些数据。如果编码不匹配,就会出现乱码。在本例中,`b.jsp`通过`request.getParameter("test")`获取参数,但...
这里介绍两种转换方法。 **方法一:直接修改HTML文件** 1. 在HTML文件顶部添加JSP指令标签: ```jsp ; charset=GB18030" pageEncoding="GB18030"%> ``` 这行代码告诉服务器这是一个JSP页面,语言为Java,并...
它可以在请求到达Servlet/JSP之前对其进行预处理,而且能够在响应离开Servlet/JSP之后对其进行后处理。过滤器的作用是可以在多个Servlet/JSP之间共享数据转换或页面处理,可以写一个过滤器类,然后在部署描述文件...
解决JSP中文乱码问题主要有两种方法: 1. 方法一:自定义转换函数 在JSP页面中,可以通过自定义一个转换函数,将接收到的ISO-8859-1编码的字符串重新编码为GBK。这种方式适用于GET、POST请求以及地址栏中的查询字符...
关于浏览器对Base64编码数据的支持,当前主流浏览器如IE8、Firefox、Chrome和Opera等都已经支持Data URI scheme。这意味着开发者可以在Web开发中利用Base64编码来优化小文件的传输过程。 在HTML中显示Base64编码的...
根据提供的文件信息,我们可以推断出这是一套关于使用JSP技术实现的Web数据库浏览器项目的资源包,其中包括了项目的源代码、相关论文以及答辩时使用的PPT。下面将围绕这个项目进行详细的分析与解释。 ### JSP技术...
对于POST请求,主要涉及表单提交数据和JSP页面自身编码两方面: 1. **表单提交数据**:确保表单的`enctype`属性设置为`application/x-www-form-urlencoded`或`multipart/form-data`。默认情况下,`enctype`为`...
通过对JSP文件与响应编码方式的设置、文件头部的字节顺序标记(BOM)、表单数据的读取、请求参数的处理等多个方面进行深入分析,帮助开发者更好地理解和解决这一问题。 #### 1. 设置JSP文件与响应编码方式 在JSP...
### JSP页面中的pageEncoding与contentType两种属性的区别 在Java Server Pages(JSP)技术中,`pageEncoding`和`contentType`是两个重要的属性,它们分别控制着JSP页面的编码方式以及输出内容的类型。了解这两个...
解决JSP 中文显示问号问题的方法有两种:一种是在 Eclipse 中设置 Encoding 选项,另一种是修改 JSP 文件的编码方式。 方法一:在 Eclipse 中设置 Encoding 选项 在 Eclipse 中,可以通过设置 Encoding 选项来解决 ...
在JavaServer Pages (JSP) 技术中,开发者可以利用一系列内置对象来简化Web应用程序的开发。这些内置对象提供了对HTTP请求、响应、会话管理、应用上下文等核心功能的直接访问。以下是JSP的九大内置对象的详细介绍: ...
**JSP(JavaServer Pages)和Servlet是Java Web开发中的两个关键组件,它们共同构建了动态Web应用程序的基础。** **JSP** 是一种用于创建动态网页的技术,它允许开发者将HTML代码与Java代码混合编写,使得网页内容...
- `response.sendRedirect()`:重定向,服务器告诉浏览器需要重新发送请求到指定URL,客户端浏览器会发起新的HTTP请求,可见两次请求和响应。 6. **Request对象** - `request.getParameter()`:获取请求参数的...
Servlet和JSP(JavaServer Pages)是Java开发语言在Web应用中的两个核心组件,它们主要用于构建动态、交互式的Web应用程序。...通过理解和熟练掌握这两种技术,开发者能够构建出高效、安全的Web应用程序。
此外,"Browser原版.jsp"可能是bug修复前的版本,对比两个文件可以找出具体的改动,如新增的编码处理逻辑或者对原有代码的优化。通过这种方式,开发者不仅可以修复已知问题,还能学习到如何预防类似问题的发生。 ...