Filter 学习 (2) 字符编码。

原创 2012年03月24日 16:57:18


(1)字符编码 Filter  是最常用 Filter 之一,常用来解决 Tomcat 等服务器 里 request,response乱码的问题。字符编码 Filter 是在 request 提交 Servlet 之前 对request进行指定编码方式的编码。


注意:页面编码方式 必须 与 Filter 编码方式 一致。

                   另外:如果表单 是get提交的,还需要 修改 Tomcat 的 con/server.xml 文件,指定 URIEncoding;否则 依旧会 乱码。

 <Connector port="8080" protocol="http/1.1"  connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8">


(2)jsp ${param.id}用法:

它的取值范围Page,Request,Session,Application。
         ${param.id} 与输入有关,相对于 request.getParameter("id")。意思是获得输入的参数id。
          因为a.jsp提交到b.jsp过程中,id不属于Page,Request,Session,Application任何范围中的一个,所以取不到。
           而id是a.jsp传给b.jsp的一个参数,所以${param.id}取到值。
                Request的范围是指一个jsp页面发送请求到另一个jsp页面之间。
                 在a.jsp里<%request.setAttribute("key","Test")%>
              当a.jsp转向b.jsp时,b.jsp可以得到a.jsp的变量key的值,而别的jsp页面是得不到值的。
             这里面的关键是a.jsp要转向b.jsp,在a.jsp加上<jsp:forward page="b.jsp"/>表示要转向b.jsp.否则b.jsp得不到a.jsp设置的key的值。


代码如下:


package com.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;

public class CharacterEncodingFilter implements Filter {

    private String characterEncoding;
    
    private boolean enabled;
    
    @Override
    public void destroy() {
        characterEncoding = null;

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        
        // 如果启用 该 Filter
        if(enabled || characterEncoding != null){
            // 那就 设置 req 编码
            req.setCharacterEncoding(characterEncoding);
            
            // 还有 也要 设置  res 编码
            res.setCharacterEncoding(characterEncoding);
        }
        // 执行下一个 Filter
        chain.doFilter(req, res);
        

    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        // 初始化 时  加载 参数
        characterEncoding = config.getInitParameter("characterEncoding");
        
        enabled = "true".equalsIgnoreCase(config.getInitParameter("enabled").trim()); // 启用。
        

    }

}


<%@ page language="java" contentType="text/html; charset=UTF-8"
    %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>

    <style type="text/css">
    
            body,input,textarea{font-size:12px}
            textarea{width:400px; height:50px}
            
    </style>

</head>
<body>

    <pre>
        <b>您输入了</b>
        ${param.text }
    </pre>
    
    <form action="${param.request.requestURI }" method="post">
            <textarea name="text">${param.text }</textarea>
            <br/>
            <input type="submit"/>
    </form>
</body>
</html>










<!-- 设置 编码的 Filter -->
    <filter>
        <filter-name>characterEncoding</filter-name>
        <filter-class>com.filter.CharacterEncodingFilter</filter-class>
        <init-param>
                <param-name>characterEncoding</param-name>
                <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
                <param-name>enabled</param-name>
                <param-value>true</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
            <filter-name>characterEncoding</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>








Linux字符驱动开发学习总结

linux驱动编写(虚拟字符设备编写)     昨天我们说了一些简单模块编写方法,但是终归没有涉及到设备的编写内容,今天我们就可以了解一下相关方面的内容,并且用一个实例来说明在linux上面...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年03月19日 21:00
  • 1280

Servlet实现字符编码过滤器

1:html       设置页面编码         通过Servlet设置页面编码                                  ...
  • pangqiandou
  • pangqiandou
  • 2016年10月26日 18:12
  • 1212

JAVA中的使用Filter过滤器设置字符集

Filter是什么? Filter不是一个Servlet,它可以叫做Servlet链,它可以用来改变一个request,修改一个response。它虽然不能产生一个response,但可以在一个req...
  • u010066934
  • u010066934
  • 2015年07月20日 20:01
  • 3221

使用Filter过滤器解决字符编码问题

Java中的字符编码,默认为:ISO-8859-1(西方编码)。这种编码方式为单字节码,只支持英文、俄文、葡萄牙文等乱七八糟文,不支持中文。因此,我们需要对JSP页面或者Servlet中进行字符编码集...
  • qq_40087415
  • qq_40087415
  • 2017年11月18日 22:40
  • 115

Filter中对字符编码过滤解决中文乱码问题

1:a.jsp     pageEncoding="UTF-8"%> Insert title here name: 2:b.jsp...
  • pangqiandou
  • pangqiandou
  • 2017年05月08日 20:45
  • 488

用Filter处理的字符编码问题

1)过滤器类是一种特殊的Servlet类,可以在请求发给特 定的Servlet类处理之前,先执行过滤器类中的方法,将客户端发送的所有请求中的字符编码转换为utf-8; import javax...
  • u013234907
  • u013234907
  • 2015年03月15日 15:55
  • 568

filter 转换字符编码

--整理自JavaWeb入门开发教程 转换中文字符编码过滤器的代码如下 //--------文件名:SetCharacterEncodingFilter.java-----------------...
  • u012998693
  • u012998693
  • 2016年04月10日 10:54
  • 302

通过Filter解决字符编码问题

字符编码是最常用的Filter之一了,常用来解决Tomcat等服务器里request、response乱码问题。字符编码Filter是在request提交到Servlet之前对request进行制定编...
  • jialiangliang_2012
  • jialiangliang_2012
  • 2012年06月20日 17:50
  • 288

tomcat8 编写字符编码Filter过滤器无效问题

同事遇到编码问题时想做一个解决全站的字符编码过滤器,过滤器类和配置如下: 过滤器类: package com.chaoxing.newspaper.web.filter; import java.i...
  • fachunfc
  • fachunfc
  • 2017年06月02日 17:36
  • 503

登陆拦截 filter() , 字符编码拦截器

一:Filter拦截器作用和使用的规则. Filter拦截器作用就是去拦截所有用户发送的请求和资源文件(servlet/jpg/.js/.css) 通过web.xml指明的url-patt...
  • LiuHang03
  • LiuHang03
  • 2015年11月30日 21:23
  • 1041
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Filter 学习 (2) 字符编码。
举报原因:
原因补充:

(最多只允许输入30个字)