Filter 学习 (2) 字符编码。

来源:互联网 发布:手机怎么登陆淘宝店铺 编辑:程序博客网 时间:2024/05/16 01:31


(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>








原创粉丝点击