SpringMvc 中文乱码问题

a88256730 2017-01-06 03:55:47
Jsp页面传值到Controller中为乱码。问题如下:
Jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/resources/css/admin/main.css"/>
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/resources/css/validate/main.css"/>
<script type="text/javascript" src="<%=request.getContextPath() %>/resources/js/jquery-3.1.1.min.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/resources/js/jquery.validate.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/resources/js/core/jquery.cms.validate.js"></script>
<script type="text/javascript">
$(function(){
$("#addForm").cmsvalidate();
});
</script>
</head>
<body>
<div id="content">
<h3 class="admin_link_bar">
<jsp:include page="inc.jsp"></jsp:include>
</h3>
<sf:form method="post" modelAttribute="userDTO" id="addForm">
<table width="800" cellspacing="0" cellPadding="0">
<thead><tr><td colspan="2">添加用户功能</td></tr></thead>
<tr>
<td class="rightTd" width="200px">用户名(必须是英文):</td>
<td class="leftTd"><sf:input path="username" size="30"/><sf:errors cssClass="errorContainer" path="username"/></td>
</tr>
<tr>
<td class="rightTd">显示名称(可以是中文):</td><td class="leftTd"><sf:input path="nickname" size="30"/></td>
</tr>

以上为Jsp页面部分代码,已经将编码格式统一为UTF-8,使用<sf:form modelAttribute="userDTO">标签传递userDTO对象到controller中。


web.xml中确认添加了转码的filter
	<!-- 以下filter用于转码 -->
<filter>
<filter-name>CharacterFilter</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>
</filter>

<filter-mapping>
<filter-name>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>



controller中也能访问相应的方法:
	@RequestMapping(value = "/add",method=RequestMethod.POST)
public String add(@Valid UserDTO userDTO,BindingResult br,Model model,HttpServletRequest req){
String olds= userDTO.getNickname();
try {
String news =new String(olds.getBytes("ISO-8859-1"),"utf-8");
System.out.println(req.getCharacterEncoding());
System.out.println(olds);
System.out.println(news);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "redirect:../../admin/user/users";
}


然后输出传递过来的中文值就为乱码。


调试过程如下:
首先输入以上三条代码,
结果分别为“utf-8”(说明web.xml的编码filter过滤器没问题),乱码字符(olds是从dto中取出的字符,还是有问题),正常中文(通过其他代码,查询到dto中的字符编码为ISO8859-1,因此将Iso8859-1转为utf-8就能正常显示了)。

综上所述,问题出在DTO的编码格式为IS08859-1,可以通过以上方式解决。但是项目中存在大量的中文输入问题,每次都转码很不现实。有没有什么方法统一的解决以上问题?
userDTO是通过页面层<sf:form modelAttribute="userDTO">标签生成的,对这个 modelAttribute="userDTO" 属性不是很了解,是不是这里出了什么问题?
欢迎大家讨论。
...全文
63 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
双子叶 2017-01-06
  • 打赏
  • 举报
回复
用的是tomcat容器吧,如果是在conf/server.xml里面将 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 修改成 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true" IEncoding="utf-8" URIEncoding="utf-8"/> 试试吧,看效果

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧