乱码其实是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 jar大全"是一个集合了相关jar包的压缩文件,专为解决S2SH框架在项目运行中可能出现的jar冲突问题。S2SH是Struts2、Spring和Hibernate这三个流行开源框架的缩写,它们共同构建了一个强大的企业级Web应用开发...
**S2SH架构搭建简单实例解析** S2SH架构,全称为Struts2+Spring+Hibernate,是Java Web开发中的经典MVC(Model-View-Controller)架构组合。这个架构结合了Struts2的视图控制、Spring的依赖注入与事务管理以及...
**S2SH框架详解** **一、什么是S2SH框架** S2SH是Struts2、Spring和Hibernate三个开源框架的缩写组合。..."简单的s2shdemo"实例则是一个很好的学习资源,可以帮助开发者快速理解并掌握这三个框架的使用和集成。
S2SH整合指的是Struts2、Spring和Hibernate这三个开源框架的集成应用,它们分别是MVC(Model-View-Controller)架构中的控制层、业务层和数据持久层的优秀解决方案。在Java Web开发中,S2SH整合能提供一个强大、灵活...
在S2SH项目中,Hibernate配置文件(hibernate.cfg.xml)定义了数据库连接参数,实体类(如User)映射到数据库表,以及数据操作的相关设置。通过SessionFactory,我们可以创建Session对象来执行CRUD(Create, Read, ...
在S2SH中,Spring负责协调其他两个框架,例如配置数据源、事务管理、Bean的实例化等。Spring 2.5.5版本提供了对JSR-250注解的支持,增强了AOP和国际化功能。 3. **Hibernate**: Hibernate是持久层的解决方案,它...
在IT行业中,S2SH框架组合是Web应用开发中常用的一种技术栈,它结合了Struts2、Spring和Hibernate三个强大的开源框架。Struts2是一个MVC(Model-View-Controller)架构,Spring则提供了依赖注入和事务管理,而...
在S2SH中,Spring负责管理Bean,包括Struts2的Action和Hibernate的SessionFactory,以及事务管理。 3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,而无需...
在S2SH中,Hibernate负责数据持久化,主要的jar包有`hibernate-core.jar`、`hibernate-entitymanager.jar`,以及可能需要的数据库驱动,如`mysql-connector-java.jar`或`ojdbc.jar`。 4. **其他依赖**: 为了使S2SH...
S2SH框架,全称为Struts2+Spring+Hibernate框架,是Java Web开发中的经典组合,它整合了三个强大的开源框架:Struts2负责表现层,Spring处理业务逻辑和依赖注入,Hibernate则用于持久化层。这个框架的目的是为了简化...
在S2SH整合中,Spring主要负责管理Bean的生命周期,包括初始化、装配和销毁,同时也提供了事务管理和数据源管理等功能。 **3. Hibernate框架** Hibernate是一个ORM框架,它可以将Java对象与数据库表进行映射,从而...
S2SH框架是Java Web开发中的一个经典组合,由Struts 2、Spring和Hibernate三大框架组成,提供了模型-视图-控制器(MVC)架构的支持,实现了业务逻辑、数据访问和用户界面的解耦。本教程将详细介绍如何在MyEclipse ...
1.本例为S2SH示例程序S2SHDemo 2.使用Struts2,Spring4, Hibernate4技术组合 3.包含十余个对象的CRUD 4.是良好的编程风格 5.例程非常完整,包含所有的Jar包
在S2SH中,Spring通常用于实现业务逻辑层(Service层)的管理,以及数据库访问对象(DAO层)的事务控制。在示例中,我们可以找到Spring的配置文件(如applicationContext.xml),它定义了Bean的配置和依赖注入。 3....
【标题】:“s2sh框架整合类包” 在IT领域,"s2sh"是一个流行的Web应用程序开发框架,由Spring、Struts和Hibernate三个组件整合而成。这个框架因其高效、灵活和可扩展性而被广泛应用。Spring提供了依赖注入和AOP...
压缩包中的文件名"**s2shlib--jar包**"暗示了这是一个包含所有S2SH相关jar文件的库。解压后,我们可能会看到以下类型的jar文件: 1. **Struts2**:如`struts2-core.jar`,`struts2-convention-plugin.jar`,`struts...
总的来说,"S2SH整合简单登陆增删改查"项目涉及到了企业级Web开发中的核心概念,包括MVC架构、依赖注入、ORM、数据库操作以及项目构建流程。理解和掌握这些知识点对于成为一名合格的Java Web开发者至关重要。
在S2SH中,Spring主要负责管理Bean的生命周期和依赖关系,可以用来创建服务层、数据访问层的组件,并提供事务管理。 2. **Hibernate**:Hibernate 是一个对象关系映射(ORM)框架,它允许开发者用Java对象来操作...
在S2SH中,Spring主要负责IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)。IoC使得对象的创建和依赖关系的维护变得更加简单,AOP则允许我们在不修改原有代码的情况下,...