SSH2项目,登录设计,用户名是中文没反应,非中文就可以

myxlj 2018-08-22 09:55:41
http://localhost:8080/zuhu/userAction!login?user_name=%E5%BE%90&user_psd=***
输入中文用户名,密码非中文,提交后,上面显示这样,密码是对的,我改成***了。
struts-2.5.13+spring-framework-4.3.2+hibernate-search-5.8.0+MYSQL的框架,web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>zuhu</display-name>
<!-- Spring 自带编码过滤器,解决中文乱码问题 -->
<filter>
<filter-name>Spring character encoding filter</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>Spring character encoding filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 这是一只拦路虎 -->
<filter>
<!-- 拦截的名字 -->
<filter-name>struts2</filter-name>
<!-- filter所需要的驱动包 -->
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<!-- 过滤的类 -->
<filter-name>struts2</filter-name>
<!-- 过滤的路径 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 给软件配置一个监听器 -->
<context-param>
<!-- 监听器的名字 -->
<param-name>contextConfigLocation</param-name>
<!-- 监听的路径 -->
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<!-- Spring所需要加载的驱动包 -->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>

</web-app>

dao层的关于用户名搜索的如下:
	@Override
public List<User> getBy(String name) {
Session session = sessionFactory.openSession();
Query query = session.createQuery("from User where user_name=:myname");
query.setParameter("myname", name);
List<User> list = query.getResultList();
session.close();
return list;

};

action层的login方法如下,cws是定义 的service层接口,private UserService cws;:
    public String login(){
List<User> userlist =cws.getBy(user_name);
System.out.println("用户名:"+user_name);
for(User user:userlist){
if(user.getUser_psd().equals(user_psd)){
return "success";
}
}
return "error";
}

login页面代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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">
<title>用户登录</title>
</head>
<body>
<div>
<form action="userAction!login">
<table align="center">
<caption>用户登录</caption>
<tr><td>用户名:</td><td><input type="text" name="user_name" size="20"/></td></tr>
<tr><td>密码:</td><td><input type="password" name="user_psd" size="20"/></td></tr>
<tr><td align="center"><input type="submit" value="登录"/>
</table>
</form> </div>
</body>
</html>

页面已经设置UTF-8,MYSQL数据库和表都是UTF-8,用户名字段是varchar类型,ACTION里用户名也定义成string型。英文和数字登录正常,中文不行。求高手指点
...全文
1176 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
myxlj 2018-09-10
  • 打赏
  • 举报
回复
引用 32 楼 su1573 的回复:
一般url不要带输入的用户名和密码哦,这样不太安全,建议使用post提交方式;
另外看上面评论,说是取不出数据,那么,是否是sql语句中"from tableName",表名和数据库表明不一致呢
恩,谢谢。我现在调试阶段,想看看提交的是什么,下次会改成post。表名和数据库应该是一致的,因为非中文操作都是正常的。
ssy03092919 2018-09-10
  • 打赏
  • 举报
回复
一般url不要带输入的用户名和密码哦,这样不太安全,建议使用post提交方式;
另外看上面评论,说是取不出数据,那么,是否是sql语句中"from tableName",表名和数据库表明不一致呢
myxlj 2018-09-10
  • 打赏
  • 举报
回复
我设置的是控制台显示SQL语句<prop key="hibernate.show_sql">true</prop>。奇怪,控制台显示Hibernate:
select
user0_.user_Id as user_Id1_3_,
user0_.user_name as user_nam2_3_,
user0_.user_psd as user_psd3_3_
from
tb_user user0_
where
user0_.user_name='徐'
但是MYSQL的日志里却显示的是
180910 8:59:00 7 Query select user0_.user_Id as user_Id1_3_, user0_.user_name as user_nam2_3_, user0_.user_psd as user_psd3_3_ from tb_user user0_ where user0_.user_name='?'。
如果我转换下new String(name.getBytes("GBK"),"ISO-8859-1",控制台的SQL语句里的user_name='?'了,但是MYSQL日志里的user_name='徐'了。也一样搜索不出数据。为什么控制台和MYSQL日志里显示的不一样呢。
myxlj 2018-09-10
  • 打赏
  • 举报
回复
终于解决了,把所有都设成UTF-8。感谢以上各位
  • 打赏
  • 举报
回复
应该一个项目中所有的编码要同意,就算是分布式也最好统一编码以便于转换
myxlj 2018-09-08
  • 打赏
  • 举报
回复
引用 23 楼 qq_42280739 的回复:
new String(str.getBytes("ISO-8859-1"),"utf-8");
用户名重复给他的格式就好了。

奇怪,我用String name1 = new String(name.getBytes("GBK"),"ISO-8859-1";MYSQL的操作日志里是63 Query select user0_.user_Id as user_Id1_3_, user0_.user_name as user_nam2_3_, user0_.user_psd as user_psd3_3_ from tb_user user0_ where user0_.user_name='徐'
后面的user_name是“徐”,是对的,但是一样没数据出来,list还是空的,其实数据库里是有“徐”这个用户名的。
myxlj 2018-09-07
  • 打赏
  • 举报
回复
如果数据库中已有的中文。我程序可以读取并显示出来。。
myxlj 2018-09-07
  • 打赏
  • 举报
回复
感谢楼上几位的回答,问题还是没解决,我打开MYSQL的日志查看。23:07:59 2 Query select user0_.user_Id as user_Id1_3_, user0_.user_name as user_nam2_3_, user0_.user_psd as user_psd3_3_ from tb_user user0_ where user0_.user_name='?'

登录名用中文,是个问号。但是我在eclipse里显示user_name是正常的“徐”,应该是到数据库的输入端和数据库的编码不对应?
老王就是我 2018-08-28
  • 打赏
  • 举报
回复
取出来没数据,那就不是中英文问题了,中英文是编码问题,如果代码没写错最多乱码并不会没数据
习惯普通 2018-08-27
  • 打赏
  • 举报
回复
打个断点 看你传递过去的参数是什么 应该是编码问题
习惯普通 2018-08-27
  • 打赏
  • 举报
回复
打断点 debug
  • 打赏
  • 举报
回复
new String(str.getBytes("ISO-8859-1"),"utf-8");
用户名重复给他的格式就好了。
myxlj 2018-08-25
  • 打赏
  • 举报
回复
引用 17 楼 t15137830 的回复:
使用post提交


引用 19 楼 TianH_legend 的回复:
form中提交方法改成post 试试,method=“post”

也还是不行
myxlj 2018-08-25
  • 打赏
  • 举报
回复
感谢以上各位的帮助,我再试试。
  • 打赏
  • 举报
回复
form中提交方法改成post 试试,method=“post”
ouyangjun__ 2018-08-24
  • 打赏
  • 举报
回复
如果用utf-8还是不行,可以试下下面的方式
第一:可以避免用中文作为用户名称,可以通过正则表达式进行限制
第二:可以在前端对用户名进行编码,在后台进行解码,比如Base64编码解码,js也是支持base64的
_沉浮_ 2018-08-24
  • 打赏
  • 举报
回复
一步一步来
先看什么错误,根据错误分析
最后无非是后台收到什么数据,是否正常,数据库取出什么数据,进行对比
myxlj 2018-08-24
  • 打赏
  • 举报
回复
数据插入数据库的时候,中文也不显示,是个问号,应该是同一个问题,操作数据库的时候不支持中文,但能从数据库中读出中文。就是->数据库的时候出错了。
Jomy_1994 2018-08-24
  • 打赏
  • 举报
回复
第一步 查看传过来的的值是否是乱码
第二步 打印执行的sql,是否乱码
第三步 在数据中执行带中文的sql,是否有结果
田小瘦 2018-08-24
  • 打赏
  • 举报
回复
使用post提交
加载更多回复(13)

81,091

社区成员

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

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