`
java10000
  • 浏览: 24715 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

有关S2SH中乱码的简单解释

阅读更多
乱码其实是S2SH开发过程中经常遇到而又不太注意的东西,往往这一次解决了下次不知道什么情况下又会出现
记录一下自己最近一次解决乱码的过程,仅供参考
程序很简单,假设一个用户注册页面提交,后台struts的UserAction接收参数,再调用Dao的方法存储。整个S2SH工程配置均无问题,数据库mysql数据库查询数据发现中文乱码。

很简单的程序
1.register.jsp注册页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>用户注册</title>
  </head>
  <body>
    <form method="post" action="u.action">
	用户名:<input type="text" id="username" name="username"><br>
	密码:<input type="password" id="password" name="password"><br>
	确认密码:<input type="password" id="password2" name="password2"><br>
	<input type="submit" value="注册提交">
	</form>
  </body>
</html>

2.UserAction的内容
@Component("u")
@Scope("prototype")
public class UserAction extends ActionSupport implements ModelDriven {

	private UserService userService;
	private UserDto userDto = new UserDto();
	private User user ;
	
	@Override
	public String execute() throws Exception{
		User u = new User();
		u.setUsername(userDto.getUsername());
		u.setPassword(userDto.getPassword());
		System.out.println(">>>>>>>>>username="+userDto.getUsername());
		userService.save(u);
		return "success";
	}
}

	public Object getModel(){
		return userDto;
	}

	public UserDto getUserDto() {
		return userDto;
	}

	public void setUserDto(UserDto userDto) {
		this.userDto = userDto;
	}	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
	public UserService getUserService() {
		return userService;
	}
	@Resource
	public void setUserService(UserService userService) {
		this.userService = userService;
	}

3.UserDaoImpl的内容
@Component("userDao")
public class UserDaoImpl implements UserDao {
	
	private HibernateTemplate hibernateTemplate;
	
	public void save(User u){
		hibernateTemplate.save(u);
	}	
	
	public HibernateTemplate getHibernateTemplate() {
		return hibernateTemplate;
	}
	@Resource
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}	
}


针对这样的问题,采用断层分析
首先u.setUsername(userDto.getUsername())更改为u.setUsername("测试"));
在此进行页面提交,发现数据库中的中文显示正常,确认乱码原因与后台存储无关
然后在UserAction中输出接收到的参数,例如
System.out.println(">>>>>>>>>username="+userDto.getUsername());
输出值乱码,确认乱码来源


解决方法分为两种:
1.在struts.xml配置文件中增加
<constant name="struts.i18n.encoding" value="UTF-8" />

2.在web.xml中增加如下
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


需要注意的事情
1.两者配置中的编码方式"UTF-8"需要和页面中pageEncoding="UTF-8"保持一致
2.两者配置选择一个即可,但是struts2.1.6存在struts的i18n配置不起作用的bug
所以请选择第二种配置,struts2.1.8已修正该bug,所以两种配置都可以
3.在web.xml的配置需要注意过滤器执行先后顺序
过滤器顺序不对会造成过滤器不起作用
OpenSessionInViewFilter
encodingFilter(页面编码要和转换的编码类型一致)
ActionContextCleanUp
StrutsPrepareAndExecuteFilter
的顺序,这一点需要注意。
分享到:
评论

相关推荐

    S2SH框架搭建和心得

    《S2SH框架搭建和心得》 S2SH(Struts2、Spring、Hibernate)是一个经典的Java Web开发框架组合,它整合了三个强大的开源组件,以提供模型-视图-控制器(MVC)架构的解决方案。对于初学者来说,理解并熟练掌握S2SH...

    s2shmysql乱码问题

    在使用Struts2+Spring+Hibernate(简称S2SH)框架结合MySQL数据库进行Web应用开发的过程中,经常会出现字符编码不一致导致的乱码问题。这类问题不仅影响用户体验,还可能导致数据处理错误。本文将详细介绍S2SH+MySQL...

    s2sh框架+struts2国际化的实例

    另外,关于struts2国际化乱码问题: 解决方法: 找到jdk的安装目录--C:\Program Files\Java\jdk1.6.0_10\bin(我的安装目录) 在bin里面找到native2ascii.exe并运行 在命令窗口输入 native2ascii -encoding UTF-8 ...

    centos7.5分布式平台搭建.docx

    - 在`$CATALINA_HOME/bin/catalina.sh`中设置内存参数。 ##### 8.2. 服务自启动 - 创建Tomcat的Systemd服务文件`/etc/systemd/system/tomcat.service`。 - 启用服务:`systemctl enable tomcat`。 #### 九、MySQL ...

    乌兰察布市-察哈尔右翼中旗-街道行政区划_150927_Shp数据-wgs84坐标系.rar

    街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用

    张家口市-阳原县--街道行政区划_130727_Shp-wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接下载使用。

    太远市-晋源区-街道行政区划_140110_Shp数据-wgs84坐标系.rar

    街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用

    轻量级密码算法LBlock的FPGA优化实现.docx

    轻量级密码算法LBlock的FPGA优化实现.docx

    吕梁市-岚县-街道行政区划_141127_Shp数据-wgs84坐标系.rar

    街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用

    Git 资料 progit-zh-v2.1.1.pdf

    Git 资料 progit-zh-v2.1.1.pdf

    张家口市-下花园区--街道行政区划_130706_Shp-wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接下载使用。

    篮球计分器FPGA附程序..doc

    篮球计分器FPGA附程序..doc

    秦皇岛市-卢龙县--街道行政区划_130324_Shp-wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接下载使用。

    【Linux开发】Linux开发相关资源教程:涵盖开发环境搭建、基础命令、编程语言及内核开发全攻略

    内容概要:本文档全面介绍了Linux开发的基础知识、应用场景、环境搭建、常用命令、Shell脚本编程以及C/C++和Python开发等内容。首先阐述了Linux开发的重要性及其在服务器端开发、嵌入式开发和系统运维等领域的广泛应用。接着详细讲解了如何选择合适的Linux发行版并安装系统,配置开发环境,包括安装必要的开发工具和配置SSH服务。文档还深入讲解了Linux基础命令,如文件和目录操作、文件内容查看与编辑、进程管理和权限管理。此外,介绍了Shell脚本编程的基本语法,包括变量、条件语句、循环语句和函数定义。针对C/C++和Python开发,文档分别讲解了编译器安装、程序编写与编译、调试方法及使用虚拟环境等内容。最后,简要介绍了Linux内核开发的相关知识,包括下载编译内核、内核模块开发等,并推荐了相关学习资源。 适合人群:对Linux开发感兴趣的初学者及有一定经验的研发人员,尤其是希望深入掌握Linux开发技能的开发者。 使用场景及目标:①掌握Linux开发环境的搭建与配置;②熟悉Linux基础命令和Shell脚本编程;③学习C/C++和Python在Linux下的开发流程;④了解Linux内核开发的基本概念和技术。 阅读建议:此文档内容丰富,涵盖面广,建议读者根据自身需求选择性阅读,并结合实际操作进行练习。特别是对于初学者,应先掌握基础命令和开发环境的搭建,再逐步深入到编程语言和内核开发的学习。

    石家庄市-石家庄市-石家庄市-石家庄市-街道行政区划_130100_Shp数据wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接下载使用。

    石家庄市-石家庄市-石家庄市-无极县-街道行政区划_130130_Shp数据wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接下载使用。

    保定市-易县--街道行政区划_130633_Shp-wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接使用。

    【办公软件应用】Word文档编辑与排版练习题集:涵盖内容编辑、页面布局及高效文档技巧

    内容概要:本文档《word练习题.docx》是一份详细的Word操作练习指南,涵盖了从基础到高级的各种功能。文档分为三个主要部分:内容编辑、页面布局和高效文档。内容编辑部分包括文本格式化、段落设置、项目编号、制表位、边框与底纹等练习;页面布局部分涉及分节符、分栏、页眉页脚、水印等设置;高效文档部分则聚焦于样式管理、导航窗格、题注、书签、超级链接、脚注与尾注、交叉引用等功能。每个练习都有具体的操作步骤,帮助用户掌握Word的各种实用技巧。 适合人群:适用于Word初学者及希望提高Word技能的中级用户,尤其是需要频繁使用Word进行文档编辑和排版的办公人员。 使用场景及目标:①帮助用户熟悉Word的基本操作,如文本编辑、格式设置等;②提升用户的文档排版能力,学会设置复杂的页面布局;③提高工作效率,掌握高效文档管理技巧,如样式应用、题注和交叉引用等。 其他说明:此文档不仅提供了具体的练习题目,还附带了详细的步骤说明,用户可以根据指引逐步完成每个练习。此外,文档中的一些练习涉及到智能文档和Office智能客户端的应用,有助于用户了解Word在企业级应用中的潜力。建议用户按照章节顺序逐步学习,实践每一个练习,以达到最佳的学习效果。

    邢台市-信都区--街道行政区划_130503_Shp-wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接下载使用。

    腐败感知指数(CPI)数据和各种治理指标数据集

    全球腐败感知数据(2000-2023)——3000行 33个指标 关于数据集 该数据集包含3000行和33列,涵盖了2000年至2023年的腐败感知指数(CPI)数据和各种治理指标。它包括国家排名、分数和其他指标,如公共部门腐败、司法腐败、贿赂指数、商业道德、民主指数、法治、政府效率、经济指标和人类发展指数。 这些数据可用于: 腐败趋势分析 腐败对GDP、人类发展指数和治理的影响 跨国比较 数据可视化和机器学习模型 该数据集对研究人员、数据分析师、政策制定者和对研究全球腐败趋势非常有用。

Global site tag (gtag.js) - Google Analytics