如何解决setProperty、getProperty的中文乱码问题 ?

亲测有效,最后我会附上我的Demo运行结果。
这个方法(我用的方法二,即过滤器),我成功了,但是我所有编码用的都是utf-8,如果你也是做实验的小伙伴,记得把jsp文件最上边的编码改成utf-8哦~

方法一:转码

通过转码的方式来解决编码问题,比较麻烦,转码比较适合平时的实验,一旦程序比较庞大,就会造成很多垃圾代码;也有些违背java面向对象编程的思想(继承、封装、多态);

关于转码,大家可以看看我的另一篇文章 -> 点这里

方法二:过滤器Filter

关于Filter

关于过滤器,这里我简单的介绍一下过滤器的主要功能
1、正常调用请求的资源;
2、用修改后的请求信息调用请求的资源;
3、修改响应请求,然后发送到客户端;
4、禁止调用该资源,将请求重定向到其他的资源,或者返回一个特定的状态,或者产生替换输出;

好啦!就介绍这么多(因为解决这次这个问题就用到这么多内容),其他的大家可以去网上找找;

开整!!!

第一步当然是写一个过滤器(源码如下):
我的过滤器命名为:MyFilter.java(后面会用到);

package com.util;

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

//通过过滤器,链接到 Filter接口;
public class MyFilter implements Filter { 
  private FilterConfig config = null;
  //初始化操作
  public void init(FilterConfig config) throws ServletException {
    this.config = config;
  }
  public void destroy() {
    config = null;
  }
  //<---拦截程序--->
  //对Servlet的service方法进行拦截操作
  public void doFilter(ServletRequest request, ServletResponse response,
                     FilterChain chain) throws IOException, ServletException 
 {  
       //<---激活service--->
       //重新由doFilter激活service
       //转交过滤权限(给接下来的过滤器权限)
       request.setCharacterEncoding("utf-8");
       chain.doFilter(request, response); 
  }
}

备用过滤器

package com.util;

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 


public class MyFilter implements Filter {

public MyFilter() {}

public void destroy() {}

public void doFilter(ServletRequest request, ServletResponse response,
  FilterChain chain) throws IOException, ServletException {
  ServletContext servletContext = filterConfig.getServletContext();
  request.setCharacterEncoding("utf-8");
  response.setCharacterEncoding("utf-8");
  chain.doFilter(request, response);
}

private FilterConfig filterConfig;

public void init(FilterConfig fConfig) throws ServletException {
  this.filterConfig = fConfig;
}
}

过滤器写完了,我们要把它编译成.class文件,我的编译方式是,直接用cmd编译的,先跟踪到指定目录下,然后打下这条命令就可以了:(如果你也是用cdm直接编译,记得把注释都删掉,个别的jdk版本,有中文注释会编译错误)

javac MyFilter.java

如果编译之后报错,这样的错误:(没有报错,更好,嘿嘿~)

在这里插入图片描述

别慌!!!到这个目录,找到这个文件servlet-api.jar
在这里插入图片描述

然后拷贝到这个目录里面,就ok啦!
在这里插入图片描述

好的,到这里,你应该已经有一个MyFilter.class文件了,那么问题来了,我们把它放在哪里呢?
在这里插入图片描述
这是我的web服务目录(虚拟目录),可以看出,我新建了一个叫WEB-INF的文件夹,这个文件夹就是javaWeb的安全服务目录,可以放一些驱动程序或者过滤器等文件;
大家看一下我过滤器代码的第一行,如下:

package com.util;

所以,我是这样存放的,你要根据你自己的情况哦;
在这里插入图片描述

好啦!到这呢,你的过滤器已经写好了,并且准备就绪了,那么,最后一步,就是在web.xml文件里去部署啦!这个文件在tomcat目录下,conf目录中;
找到web.xml文件,在里面部署(说的明白点,就是在web.xml文件里,添加下面的代码)

源代码及具体位置:

<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>com.util.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

在这里插入图片描述

记住刚刚部署的位置,因为,如果代码打错了,过滤器会导致tomcat无法启动的;

天呐!!!
终于完事了,现在,就可以启动tomcat了,如果刚刚就是开启的状态,记得要重启tomcat哦~
附上我的成功截图,希望你跟我一样~

在这里插入图片描述

辛辛苦苦写了好久呢~
看官来都来了,就点个赞吧,支持一下原创,嘿嘿~

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值