Struts1 中提交中文表单到ActionForm后出现乱码问题的原因及处理方法
问题:
在你所有页面设置的编码都是utf-8的情况下仍然会出现中文乱码现象。
一、乱码出现原因
由于Struts框架直接把表单数据发送给了ActionForm,所以这里面没有对HttpRequestServlet进行SetCharacterEncoding,所以默认是按照ISO-8859-1。
二、解决办法
方法 : 就是在表单提交到ActionForm之前对request进行编码,写一个过滤器,对所有请求进行过滤
方式一:直接在过滤器中指定编码格式
MyFilter.java
public class MyFilter extends HttpServlet implements Filter {
private static final long serialVersionUID = 1L;
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws java.io.IOException, javax.servlet.ServletException {
// TODO Auto-generated method stub
arg0.setCharacterEncoding("utf-8"); //设置接收编码
arg1.setContentType("text/html;charset=utf-8");
arg2.doFilter(arg0, arg1); //必须
}
public void init(FilterConfig arg0) throws javax.servlet.ServletException {
// TODO Auto-generated method stub
}
}
在web.xml中添加
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.xidian.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
方式二:在web.xml中指定编码格式
MyFilter.java
package com.xidian.filter; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet; public class MyFilter extends HttpServlet implements Filter {
private static final long serialVersionUID = 1L;
private String encoding; public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws java.io.IOException, javax.servlet.ServletException {
// TODO Auto-generated method stub
arg0.setCharacterEncoding(encoding);
arg2.doFilter(arg0, arg1);
} public void init(FilterConfig arg0) throws javax.servlet.ServletException {
// TODO Auto-generated method stub
encoding=arg0.getInitParameter("encoding");
} }
在web.xml添加
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.xidian.filter.MyFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
下面是struts2中中文乱码的问题:
顺带再说下加上对输入数据内容的过滤的情况:
再添加一个过滤程序:
SafeFilter.java
package com.xidian.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 SafeFilter implements Filter {
private String keywords[]; public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//这里我们接收到用户名
String name=request.getParameter("name");
request.setAttribute("err", "您不允许登录<font color='red'>"+name+"</font>");
System.out.println("第二个过滤器:"+name);
if(name!=null){
//判断
for(String key:keywords){
if(key.equals(name)){
request.getRequestDispatcher("WEB-INF/ifo.jsp").forward(request, response);
return;
}
} }
chain.doFilter(request, response);
} public void init(FilterConfig filterConfig) throws ServletException {
keywords=filterConfig.getInitParameter("keywords").split(";"); } }
web.xml的配置
<!-- 部署过滤器的顺序就是执行的顺序 -->
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.xidian.filter.MyFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter> <filter>
<filter-name>SafeFilter</filter-name>
<filter-class>com.xidian.filter.SafeFilter</filter-class>
<init-param>
<param-name>keywords</param-name>
<param-value>拉登;小明;凤姐</param-value>
</init-param>
</filter>
Struts1 中提交中文表单到ActionForm后出现乱码问题的原因及处理方法的更多相关文章
- JavaWeb学习总结(十五)Jsp中提交的表单的get和post的两种方式
两者的比较: Get方式: 将请求的参数名和值转换成字符串,并附加在原来的URL之后,不安全 传输的数据量较小,一般不能大于2KB: post方式: 数量较大: 请求的参数和值放在HTML的请求头中, ...
- php中如何防止表单的重复提交
在php中如何防止表单的重复提交?其实也有几种解决方法. 下面小编就为大家介绍一下吧.需要的朋友可以过来参考下 代码: <?php /* * php中如何防止表单的重复提交 * by www.j ...
- ajax 提交所有表单内容及上传图片(文件),以及单独上传某个图片(文件)
我以演示上传图片为例子: java代码如下(前端童鞋可以直接跳过看下面的html及js): package com.vatuu.web.action; import java.io.File; imp ...
- jQuery form插件的使用--用 formData 参数校验表单,验证后提交(简单验证).
Form Plugin API 里提供了很多有用的方法可以让你轻松的处理表单里的数据和表单的提交过程. 测试环境:部署到Tomcat中的web项目. 一.引入依赖js <script src=& ...
- jQuery通过jquery.form.js插件使用AJAX提交Form表单
我简单使用了一下,jQuery Form插件有一下优点: 1.支持提交前验证. 2.支持提交后回调. 3.采用AJAX方式,有很好的用户体验 4.提交方式是灵活.只要指定要提交的form ID即可. ...
- 在Tomcat中采用基于表单的安全验证
.概述 (1)基于表单的验证 基于From的安全认证可以通过TomcatServer对Form表单中所提供的数据进行验证,基于表单的验证使系统开发者可以自定义用户的登陆页面和报错页面.这种验证方法 ...
- Django 提交 form 表单(使用sqlite3保存数据)
优化 提交 form 表单,https://www.cnblogs.com/klvchen/p/10608143.html 创建数据库的字段,在 models.py 中添加 from django.d ...
- 按下回车默认提交form表单问题
最近开发中碰到一个问题,项目中有几个列表展示页面,允许用户通过查询条件模糊查询数据.用户录入关键字后点击回车会调用查询方法根据关键字查询,原先功能没有问题,但是最近发现在查询输入框中按下回车会直接刷新 ...
- javascript中的常用表单事件用法
下面介绍几种javascript中常用的表单事件: 一,onsubmit:表单中的确认按钮被点击时发生的事件,如下案例. 案例解析:弹出表单中提交的内容 <form name="tes ...
随机推荐
- LinkedHashMap源码详解
序言 本来是不打算先讲map的,但是随着对set集合的认识,发现如果不先搞懂各种map,是无法理解set的.因为set集合很多的底层就是用map来存储的.比如HashSet就是用HashMap,Lin ...
- Java并发包中CyclicBarrier的工作原理、使用示例
1. CyclicBarrier的介绍与源码分析 CyclicBarrier 的字面意思是可循环(Cyclic)使用的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时 ...
- 利用SSIS的ForcedExecutionResult 属性 和CheckPoint调试Package
1,ForcedExecutionResult 强制一个package或task执行的结果,共有四种值 None,Success,Failure,Completion,默认值是None,表示不强制返回 ...
- Render OpenCascade Geometry Surfaces in OpenSceneGraph
在OpenSceneGraph中绘制OpenCascade的曲面 Render OpenCascade Geometry Surfaces in OpenSceneGraph eryar@163.co ...
- struts2DMI(动态方法调用)
struts2动态方法调用共有三种方式: 1.通过action元素的method属性指定访问该action时运行的方法 <package name="action" exte ...
- 如何下载android官网Lib包
例如:https://dl-ssl.google.com/android/repository/sources-23_r01.zip
- Sort the Array
/* 思路: 找到单调下降串的起始位置[l, r] 如果左边 0...l-1中的最大值 > l...r中的最小值 或者 r+1...n中的最小值 < l...r中的最大值 都是不能实现排序 ...
- kqueue用法简介
1.什么是kqueue和IO复用 kueue是在UNIX上比较高效的IO复用技术. 所谓的IO复用,就是同时等待多个文件描述符就绪,以系统调用的形式提供.如果所有文件描述符都没有就绪的话,该系统调用阻 ...
- 实例演示Android异步加载图片
本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个 ...
- requests模块--python发送http请求
requests模块 在Python内置模块(urllib.urllib2.httplib)的基础上进行了高度的封装,从而使得Pythoner更好的进行http请求,使用Requests可以轻而易举的 ...