`
- 浏览:
89371 次
- 性别:
- 来自:
杭州
-
用servlet filter 解决编码问题的一个小例子
当在做程序的是你也许会遇到一些很让你恼火的乱码问题,就是在你在页面传参数或向数据库里插入数据或去值的时候会出现乱码的问题,其实有很多解决办法比如:添加request.setCharacterEncoding("GB18030");或在取值的时候用String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"gbk");等但有时仍然会遇到一些问题:下面给大家扔一个用过滤器解决此恩体的例子:
首先:定义一个类CharsetEncodingFilter让它实现javax.servlet.Filter接口
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*; // For Date class
/** Simple filter that prints a report on the standard output
* each time an associated servlet or JSP page is accessed.
*/
String encoding;
//定义一个成员变量用于在init()方法里得到配置文件里<init-param>中对应 <paramname>encoding</param-name> 的 <param-value>GB18030</param-value>值;其中GB18030值可以更改比如gbk等;
public class CharsetEncodingFilter implements javax.servlet.Filter {
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws ServletException, IOException {
//1,doFilter方法的第一个参数为 ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为 ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
HttpServletRequest request = (HttpServletRequest)request;//如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在 ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest。
request.setCharacterEncodeing(encoding);
chain.doFilter(request,response);
//2.调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或 JSP页面被激活。
}
public void init(FilterConfig config)throws ServletException {
encoding = FilterConfig.getInitParameter("encoding");//FilterConfig对象具有一个 getInitParameter方法,它能够访问部署描述符件 //(web.xml)中分配的过滤器初始化参数
}
public void destroy() {}
}
然后在配置文件web.xml里添加: (请注意,过滤是在serlvet规范2.3版中初次引入的。因此,web.xml文件必须使用DTD的2.3版本。)
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.util.filter.CharsetEncodingFilter</filter-class>//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文件有效
filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。filter元素具有如下六个可能的子元素:
icon 这是一个可选的元素,它声明IDE能够使用的一个图象文件。
filter-name 这是一个必需的元素,它给过滤器分配一个选定的名字。
display-name 这是一个可选的元素,它给出IDE使用的短名称。
description 这也是一个可选的元素,它给出IDE的信息,提供文本文档。
filter-class 这是一个必需的元素,它指定过滤器实现类的完全限定名。
init-param 这是一个可选的元素,它定义可利用FilterConfig的getInitParameter方法读
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
1. **Servlet**:Servlet是Java编程语言中的一个接口,由Java EE规范定义,用于扩展服务器的功能。Servlet可以处理HTTP请求,并向客户端返回响应。在给定的源码中,可能包含了实现Servlet接口的类,通过`doGet`和`...
本示例“servlet过滤器例子filter”将深入讲解如何使用Servlet过滤器以及其在实际应用中的作用。 首先,我们来了解什么是Servlet过滤器。Servlet过滤器(Filter)是Servlet API的一部分,定义在`javax.servlet....
- 例子中设置了两个Filter:一个用于设置字符编码(setCharacterEncoding),另一个用于记录请求URL的日志(logfilter)。 - `<filter>`标签定义了一个Filter,包括其名称和实现类,`<init-param>`则用于传递初始...
Filter接口的`doFilter()`方法是核心,它接收ServletRequest和ServletResponse对象,并通过FilterChain对象将请求传递到下一个Filter或目标Servlet。 监听器(Listener)是实现特定接口的Java类,它们用于监听和...
Servlet过滤器是Java Web开发中的一个重要概念,它在Servlet生命周期中扮演着不可或缺的角色。过滤器允许开发者在请求到达Servlet之前或在响应离开Servlet之后对请求和响应进行处理。这一特性使得过滤器在处理数据、...
乱码问题在Web开发中是一个常见的挑战。Servlet过滤器可以有效地解决这个问题。例如,我们可以通过在过滤器中设置请求和响应的编码方式来确保正确的字符编码。以下是一个简单的例子: ```java public void doFilter...
因此,使用Servlet过滤器(Filter)来处理这类问题成为了一种更加优雅的解决方案。 #### 实例目标 本实例的目标是设计并实现一个简单的Servlet过滤器,用于检查用户的登录状态。具体来说,当用户通过正常的登录...
在这个例子中,通过重写`doFilter`方法,在请求到达具体的业务逻辑之前,将请求的字符编码设置为UTF-8,从而解决了乱码问题。 ##### 配置过滤器 接下来需要在`web.xml`文件中配置这个过滤器,使其能够在所有请求中...
在`FilterDemo`这个例子中,我们可以创建一个自定义的Filter,配置在web.xml中,指定其拦截的URL模式。Filter可以通过`chain.doFilter(request, response)`来将请求传递给下一个Filter或目标资源。 ### 应用场景 -...
总结来说,处理中文乱码问题主要涉及到字符编码的统一,Java Servlet中的Filter是一个强大的工具,可以用来设置请求和响应的编码,确保数据传输的正确性。理解并熟练应用这些知识,能够有效避免在实际开发中遇到的...
解决这个问题的一种常见方法是使用Filter过滤器。以下是配置Filter过滤器处理JSP中文乱码的详细步骤: 1. **配置web.xml文件** 在项目的`web.xml`文件中,你需要添加一个Filter来定义处理乱码的逻辑。首先,声明一...
在Java Web开发中,Servlet过滤器(Filter)是一种强大的工具,它可以用来处理各种问题,包括但不限于解决字符编码问题。在标题“servlet过滤器配置,解决JSP的所有乱码”和描述“JSP页面获得servlet是不是经常出现...
要使用jsp过滤器解决中文乱码问题,我们需要定义一个过滤器类,实现Filter接口。下面是一个简单的示例代码: ```java public class EncodingFilter implements Filter { @Override public void destroy() { // ...
Filter的主要工作流程是:当客户端发送请求时,Filter首先捕获请求,然后根据需要对请求进行修改或执行其他操作,最后将请求传递给下一个Filter或直接传递给目标Servlet。同样,Filter也可以在响应返回给客户端之前...
由于Servlet容器通常会为每个请求创建一个新的线程来执行Servlet,所以需要注意线程安全问题。若Servlet内部有共享数据,需使用同步机制,避免数据冲突。 六、Filter与Listener Servlet学习中,Filter和Listener也...
例如,`GBKFilter.java`可能就是一个实现了`javax.servlet.Filter`接口的类,专门处理GBK编码的转换。 以下是一个简化的`GBKFilter`类示例: ```java import javax.servlet.*; import java.io.IOException; ...
其中一个重要特性就是支持使用注解来配置过滤器(Filter),这大大简化了Web应用程序的部署描述符(web.xml)的编写工作。 #### 二、Servlet过滤器的概念 Servlet 过滤器是一种可以在请求到达目标资源之前或响应离开...
在这个方法内部,Filter可以选择处理请求(比如登录验证),或者通过`chain.doFilter(request, response)`将请求传递给下一个Filter或目标Servlet。 - **传递过程**:如果Filter选择传递请求,`doFilter()`会将请求...
压缩包文件"WebApp"可能包含了一个简单的Web应用,其中包含了`web.xml`配置文件和一个或多个演示Servlet。在源代码中,你可以看到如何设置和获取初始化参数的实际示例。通过分析这些代码,可以更深入地理解如何在...
为了从根本上解决中文乱码问题,我们可以创建一个简单的字符编码过滤器,该过滤器会在每次请求处理之前被调用,用于设置请求的字符编码。下面是一个具体的实现例子: 1. **编写过滤器类**: ```java package ...