我们在使用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 方法中 获取此变量 并使用
图片说明:
第一次写博客,有什么错误 请告知我哦。
本文主要介绍了在使用jsp向servlet发送请求时可能出现的乱码问题及其解决方案。包括局部解决方法,即在获取request数据前设置编码,以及全局解决方法,利用filter过滤器统一处理页面编码,避免重复代码。
1219

被折叠的 条评论
为什么被折叠?



