问题描述:
平台登陆的时候没有问题,但是当从平台进入各个子平台的时候会出现用户名不存在的问题,但是当再次进入这个子系统的时候就是正常的。
解决方法:
后来经过认真的分析,发现是我们连接的数据库有问题,数据库放在了一个个人电脑了,经常会关机,所以导致数据库连接经常性断了,所以出现了上述情况。
1、 设置validationQuery属性
validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据,如你可以简单地设置为:“select 1 from dual”;
2、 把maxActive设置大于0,maxActive:最大连接数据库连接数,设置为0时,表示没有限制;
问题总结:
当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接,这样,就导致客户端程序报“ java.sql.SQLException: Io 异常: Connection resetby peer”或“java.sql.SQLException 关闭的连接”异常,加上<propertyname="validationQuery" value="select * from dual"/>
配置后,客户端在使用一个无效的连接时会先对该连接进行测试,如果发现该连接已经无效,则重新从连接池获取有效数据库连接来使用
以上是个人的分析和理解,有不对的地方请大家指出共同讨论~~~
出现Connection reset bypeer: socket write error 异常的几种可能:
1. 客户端发出请求时,没有完全获得服务器端的响应,客户端与服务器端发生断链(例如网络中断、用户点击了停止按钮、浏览器关闭等)时
2. 服务器的并发连接数超过了最大链接数,服务器关掉了其中的一些链接。
3. 数据传输时的等待时间过长,超出了数据库的会话时间限制。
以上服务器端都有可能报出 socket write error 异常。
有人说用 response.setCharacterEncoding("GBK"); 无效,必须用 response.setContentType("text/html;charset=GBK"); 本人没试过。
对于JSP,是比较方便的,只需要在JSP最前部分按如下方式声明:
<%@ pagecontentType="text/html;charset=GBK"%>
对于HTML,其和JSP文件基本类似,也是在页面最前部分按如下方式声明:
<head>
<METAHTP-EQUIV="contentType" CONTENT="text/html;charset=GBK">
</head>
3.? 国际化资源文件的中文问题
一个Struts应用程序中,可以配置多个资源包,无论是Action、ActionForm还是JSP都可以访问这些包中的资源。资源包就是由扩展名为.properties的文件组成的一组具有相同前缀的文件,如ApplicationResources_zh_CN.properties、ApplicationResources_zh.properties和ApplicationResources.properties。这些文件就构成一个Struts的资源包,它们都有一个统一的前缀ApplicationResources,凡是有相同前缀的资源文件就都属于一个包。
当用MyEclipse编写资源文件时,默认是不能保存中文的,因为默认保存编码的格式是ISO-8859-1,这就需要修改为gb2312或者gbk编码格式。Windons-->Preferences-->General -->Content Types-->Text-->JavaProperties File,在最下方把其Default encoding改为"UTF-8”,然后"update”就可以保存中文了。但就这样保存的中文还是不能够在页面上使用的,因为Web容器默认是使用ISO-8859-1,也就会把中文用ISO-8859-1的格式发送给客户页面,显示的还是乱码,这就是JAVA国际化的问题。JAVA是支持unicode编码格式的,unicode是国际统一通用编码,所以不管什么格式的编码转化为unicode编码肯定不会显示乱码的。这个时候就是需要把资源文件的UTG-8编码格式转化为unicode编码格式,而SUN公司又提供了这样的一种工具。在JDK的安装目录bin下,有一个叫native2ascii可执行文件,这个是专门来进行资源文件转码的。打开cmd,进入JDK的bin目录下,把资源文件拷贝到该目录下,执行该命令。比如:
native2ascii –encoding GBK ApplicationResources.propertiesApplicationResources_zh_CN.properties 就是把GBK编码格式ApplicationResources.properties转化为unicode编码格式ApplicationResources_zh_CN.properties,这样显示页面时就不会出现乱码了。