jsp向servlet发出请求,响应时,出现的乱码问题解决方法

本文主要介绍了在使用jsp向servlet发送请求时可能出现的乱码问题及其解决方案。包括局部解决方法,即在获取request数据前设置编码,以及全局解决方法,利用filter过滤器统一处理页面编码,避免重复代码。

我们在使用jsp 向servlet发出请求 ,接收数据时 ,可能会出现乱码问题 下面是我的解决方法

预处理:jsp页面上部
在这里插入图片描述

1.局部解决。方法如下:

第一种情况:

说明:我们在jsp中使用request去传输数据。在servlet接受数据时,会产生 接受数据乱码,
方法: 在我们获取request数据之前 使用代码
(以"utf-8"编码格式为例)
(“utf-8” 大小写皆可)

request.setCharacterEncoding("utf-8");

举例:以servlet doPost 方法为例 在这里插入图片描述
第二种情况:
说明:我们在jsp使用request传输数据时,第一种 情况 在servlet 里获取request的数据前 使用代码。但是,我们处理完数据,逻辑以后,当我们需要将数据同样通过reqeust的请求转发时,jsp页面也可能会出现接收数据乱码问题。
方法:与第一种情况方法相同。在传输数据前 加入代码
(以"utf-8"编码格式为例)

request.setCharacterEncoding("utf-8");

例子: 以servlet中doGet为例
在这里插入图片描述

2.全局解决。方法如下:

问题:我们使用第一种方法时,会出现一个严重问题:当我们的servlet过多,其对数据的处理就越多,我们再用第一种的方法去处理,所需添加重复代码过多,浪费时间也繁琐。
说明:那有没有一种方法,可以在我们 每一次 传输数据时 进行编码格式修改呢。是有的。这里我们引用filter类 过滤器 将每个jsp页面进行处理。
方法:使用filter 对页面进行过滤。(filter类不深入介绍 下面是具体使用方法)
创建filter类方法:在java 代码中 新建一个包,用于存放filter类,创建filter类方法:
在这里插入图片描述
如果没有filter类我们可以在 Other…中寻找:在这里插入图片描述然后:
在这里插入图片描述

新建Filter 类如下:
在这里插入图片描述

具体方法:

第一步:在 chain.doFilter(request, response); 代码语句前添加代码
(与方法一 代码相同):

request.setCharacterEncoding(encoding);

图片说明
在这里插入图片描述
第二步:在web.xml中配置过滤器:
首先,在web程序中找到web.xml
在这里插入图片描述
如果没有web.xml 选中 项目名
右击选择 Java EE Tools 中的 Generate Deployment Descriptor Stub 可完成创建
在这里插入图片描述
在web.xml中加入以下代码:

 <filter>
  <filter-name>EncodeFilter</filter-name>
  <filter-class>com.ss.filter.EncodeFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>EncodeFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

图面展示:在这里插入图片描述/* 作用于所有web下的资源。
/dir/* 作用于某一文件夹下的资源。
*.扩展名 作用于某一扩展名的所有文件。
index.jsp 表示仅过滤此页面。

其他:

问题: 在我们需要 更换编码方式时,按照第二种方法 更改 编码方式 过于麻烦。
方法:引入在web.xml 定义一个变量,在filter类中获取并使用此变量
代码如下:

<filter>
  <filter-name>EncodeFilter</filter-name>
  <filter-class>com.ss.filter.EncodeFilter</filter-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
  </init-param>
  </filter>
  <filter-mapping>
  <filter-name>EncodeFilter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>

说明 :在 init 中定义一个encoding变量 其值为UTF-8
在filter类的init 方法中 获取此变量 并使用
图片说明:在这里插入图片描述
第一次写博客,有什么错误 请告知我哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值