java中Filter过滤器处理中文乱码的方法_java

注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk。虽然两种都可以出来中文乱码,但是却造成了处理乱码的格式不一致。所以编译出错。

解决方法:所有地方都用utf-8或gbk

复制代码 代码如下:

//过滤器类
CharactorFilter.jsp
package cn.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 CharactorFilter implements Filter { //继承Filter类
    //字符编码
    String encoding=null;

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        if(encoding!=null){
        //设置request字符编码
            request.setCharacterEncoding(encoding);
         //设置response字符编码
            response.setContentType("text/html;charset="+encoding);
        }
     //传递给下一个过滤器
        chain.doFilter(request, response);

    }

    public void init(FilterConfig filterConfig) throws ServletException {
      //获取初始化参数
        encoding=filterConfig.getInitParameter("encoding");

    }

    public void destroy() {
        // TODO Auto-generated method stub
        encoding=null;
    }

}

web.xml

复制代码 代码如下:

 <filter>      <!--注意这里是filter,不要配置成servlet-->
    <filter-name>CharactorFilter</filter-name>    <!--过滤器名称-->
   <filter-class>cn.com.Filter.CharactorFilter</filter-class>  <!--过滤器的完整类名--> 
     <init-param>   <!--初始化参数--> 
         <param-name>encoding</param-name>  <!--参数名称--> 
         <param-value>utf-8</param-value>   <!--参数值--> 
     </init-param>
  </filter>
  <filter-mapping> <!--过滤器映射-->
      <filter-name>CharactorFilter</filter-name><!--过滤器名称-->  
      <url-pattern>/*</url-pattern><!--URL映射,给所有页面处理乱码--> 
      </filter-mapping>

时间: 2024-08-01 10:03:29

java中Filter过滤器处理中文乱码的方法_java的相关文章

servlet-jsp中使用过滤器解决中文乱码问题出现下面的情况

问题描述 jsp中使用过滤器解决中文乱码问题出现下面的情况 有一个html页面,里面有一个form,一个text,一个submit.当点击submit时,就调用一个servlet,并在里面将中的内容输出来.servlet中输入的代码为:out.println("输入的内容为:"+text) 现在遇到的问题是: 如果中输入的是纯中文,则不会乱码.但如果输入的是英文开头或纯英文的话,则"输入的内容为:"会变成乱码,还有text中的中文也会乱码. 解决方案 servlet

JAVA URL和URLConnection及中文乱码解决方法

 也不多说什么了,就拿urlconnection类举个例子吧,做一个获取网站源码的代码 public class urldemo {  public static void main(string[] args) {   scanner scan = new scanner(system.in);            system.out.println("请输入网址:");   string urlstr ="http://"+scan.next();   tr

java压缩zip文件中文乱码问题解决方法_java

通常用java来打包文件生成压缩文件后,有如下两个地方会出现乱码 : 1.内容的中文乱码问题,这个问题网上很多人给出了解决方法,主要有两种方法:一是修改sun的源码:另一个是使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以直接下载使用即可,毫无疑问,选择后者更方便 2.压缩文件注释的中文乱码问题:zos.setComment("中文测试");这个问题网上对

java中out.print和out.write的方法_java

复制代码 代码如下: <%@ page language="java" import="java.util.*"  %><%@ page pageEncoding="UTF-8" isELIgnored="false" %><%@ page import="java.util.Date" %> <html>  <head>     <titl

java中使用sax解析xml的解决方法_java

在java中,原生解析xml文档的方式有两种,分别是:Dom解析和Sax解析 Dom解析功能强大,可增删改查,操作时会将xml文档以文档对象的方式读取到内存中,因此适用于小文档 Sax解析是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档 本文主要讲解Sax解析,其余放在后面 Sax采用事件驱动的方式解析文档.简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回回读取) 在看电影的过程中,每遇到一个情节,一段泪水,一次擦肩,你都会调动大脑和神经去接收或

详解Java中使用泛型实现快速排序算法的方法_java

快速排序算法概念快速排序一般基于递归实现.其思路是这样的: 1.选定一个合适的值(理想情况中值最好,但实现中一般使用数组第一个值),称为"枢轴"(pivot). 2.基于这个值,将数组分为两部分,较小的分在左边,较大的分在右边. 3.可以肯定,如此一轮下来,这个枢轴的位置一定在最终位置上. 4.对两个子数组分别重复上述过程,直到每个数组只有一个元素. 5.排序完成. 基本实现方式: public static void quickSort(int[] arr){ qsort(arr,

举例讲解Java中数组和字符串类型的使用方法_java

Java数组 数组是具有相同数据类型的一组数据的集合,Java支持多为数组,一维数组的每个基本单元都是基本数据类型的数据,二维数组就是每个基本单元是一维数组的一维数组,以此类推,n维数组的每个基本单元都是n-1为数组的n-1维数组.下面以一维数组为例说明Java数组的用法. 1.数组声明 数组声明有如下两种形式(方括号的位置不同): int arr[]; int[] arr2; 2.数组初始化 数组初始化也有两种形式,如下(使用new或不使用new): int arr[] = new int[]

Java中的常量避免反模式的方法_java

在应用中,我们往往需要一个常量文件,用于存储被多个地方引用的共享常量.在设计应用时,我也遇到了类似的情况,很多地方都需要各种各样的常量. 我确定需要一个单独的文件来存储这些静态公共常量.但是我不是特别确定是应该用接口还是类(枚举不满足我的需求).我有两种选择: 使用接口,如: package one; public interface Constants { String NAME="name1"; int MAX_VAL=25; } 或 package two; public cla

Java中接收键盘输入的三种方法_java

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class EnterTest { public static void main(String[] args) { //主方法 CharTest(); //调用System.in方法 ReadTest(); //调用ReadTest方法 Scan