javaweb开发之解决全站乱码

当我们开发web网站的时候偶尔会出现乱码问题,出现问题之原因是出现中文字符。

不解释了直接上代码

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;

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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class EncodingFilter implements Filter {
    FilterConfig config = null;
    String encode = "utf-8";

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        response.setContentType("text/html;charset="+encode); //--解决响应乱码
        chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request), response);//--包装改造request中和获取请求参数相关的方法解决请求参数乱码
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.config = filterConfig;
        encode = config.getInitParameter("encode");
    }

    class MyHttpServletRequest extends HttpServletRequestWrapper {
        HttpServletRequest request;

        public MyHttpServletRequest(HttpServletRequest request) {
            super(request);
            this.request = request;
        }

        @Override
        public Map<String, String[]> getParameterMap() {
            Map<String, String[]> map = request.getParameterMap();
            try {
                for (Map.Entry<String, String[]> entity : map.entrySet()) {
                    String[] value = entity.getValue();
                    for (int i = 0; i < value.length; i++) {
                        value[i] = new String(value[i].getBytes("iso8859-1"),
                                encode);

                    }
                }
                return super.getParameterMap();
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }

        @Override
        public String[] getParameterValues(String name) {
            return (String[]) getParameterMap().get(name);
        }

        @Override
        public String getParameter(String name) {
            return getParameterValues(name)[0]==null?null:getParameterValues(name)[0];
        }

    }

}

web.xml 配置如下

 <filter>
      <description>全站乱码过滤器</description>
   <filter-name>encodeFilter</filter-name>
   <filter-class>com.cbd.filter.EncodingFilter</filter-class>
    <init-param>
      <param-name>encode</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
   <filter-mapping>
      <filter-name>encodeFilter</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
时间: 2024-12-25 18:22:48

javaweb开发之解决全站乱码的相关文章

传智播客JavaWeb day14--监听器(用户踢人)、过滤器(解决全站乱码)

1. 2. 3. 4. 5. filter应用 1.用过滤器解决全站乱码问题 1.1 乱码分类 乱码分为get和post方式请求乱码 1.2 post请求乱码解决 post请求乱码很好解决只需一行代码搞定request.setCharacterEncoding("utf-8")告诉服务器用utf-8来获取参数即可 1.3 get请求乱码解决 问题:不能针对某个参数去解决乱码问题,因为过滤器是全站通用的,其他的请求可能没有这个参数,所以想到改造获取请求参数的三个方法,而直接继承的方式会有

利用filter和动态代理解决全站乱码问题

1.利用filter和动态代理解决全站乱码问题 1.1filter的代码 package com.baowei.filter; import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import javax.servlet.Filter; import javax.servlet

web day21 web过滤器Filter,应用案例统计IP,解决全站乱码,粗粒度权限控制,页面静态化

JavaWeb三大组件 1. 都需要在web.xml中进行配置 Servlet Listener(2个感知监听器不需要配置) Filter 过滤器 它会在一组资源(jsp.servlet..css..html等等)的前面执行! 它可以让请求得到目标资源,也可以不让请求达到! * 过滤器有拦截请求的能力! 登录: 允许它访问AServlet.BServlet.CServlet ------------------------------- 过滤器如何编写 1. 写一个类实现Filter接口 2.

利用Filter技术解决中文乱码的终极实现

利用包装类,解决乱码问题 web.xml的配置 <filter> <filter-name>CharacterEncodingFilter2</filter-name> <filter-class>cn.itcast.web.filter.example.CharacterEncodingFilter2</filter-class> </filter> <filter-mapping> <filter-name>

学习笔记_过滤器应用案例(解决全站字符乱码)

解决全站字符乱码(POST和GET中文编码问题) servlet: l  POST:request.setCharacterEncoding(“utf-8”); l  GET: String username = request.getParameter(“username”); username = new String(username.getBytes(“ISO-8859-1”), “utf-8”); 1 说明 乱码问题: l  获取请求参数中的乱码问题: POST请求:request.s

解决全站字符乱码(POST和GET中文编码问题)

其实全站乱码问题的难点就是处理GET请求参数的问题. 如果只是处理POST请求的编码问题,以及响应编码问题,这个就很好解决了response.setContentType("text/html;charset=utf-8");和request.setCharacterEncoding("utf-8");就可以解决的 好了,这里主要的就是解决GET请求参数的问题,我使用的方式是用过滤器(拦截器)Filter来解决, 我的思路是: 首先定义一过滤器allDecoding

Javaweb 使用Servlet技术改写用户登录 使用Filter技术解决中文乱码

先把实验3的jsp页面复制过来: WebContent->WEB-INF->lib下面的jar包8.0版本也要记得复制: Java Resources->src下的 cn.edu.henu.bean(User.java 用户数据库操作)和cn.edu.henu.util(DBConnection.java 数据库的连接操作)这两个包 <?xml version="1.0" encoding="UTF-8"?> <web-app x

李兴华JavaWeb开发笔记

李兴华JavaWeb开发笔记 1.Java语法-基础 环境变量-JAVA_HOME, PATH, ClassPath 变量名 作用 举例 JAVA_HOME 指向JDK目录 C:\Program Files\Java\jdk1.7.0_21 PATH 指向java.exe目录. %JAVA_HOME%\bin; %JAVA_HOME%\jre\bin CLASSPATH 执行.jar文件.zip文件..class文件所在目录. (程序要用到哪些.class文件,) %JAVA_HOME%\lib

基于IDEA的JavaWeb开发环境搭建

基于IDEA的JavaWeb开发环境搭建 基于IDEA的JavaWeb开发环境搭建 jdk下载安装配置环境变量 下载 安装 配置环境变量 下载安装激活使用IntelliJ IDEA 下载 安装 激活 1文本编辑器首先打开hosts文件在最下面一行添加如下地址 2从lan yu获取最新激活码 3在激活页面输入激活码 使用 1创建普通Java工程 2创建Web工程 下载安装配置Tomcat 下载 安装 配置 配置Tomcat环境变量 IDEA工程配置Tomcat 常见问题 Tomcat端口被占用 I