遇到的Exception/error及解决办法记录汇总
一、java.net.SocketException
1、java.net.SocketException:Connection reset
首先,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。
然后,一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。
简单的说就是在连接断开后的读和写操作引起的。
2、如果在报错中有java.net.SocketInputStream.read():考虑要读取的输入流的资源不存在或者格式错误,也可能是路径地址出错
3、socket-详细分析No buffer space available:参见 http://www.cnblogs.com/hjwublog/p/5114380.html
二、org.hibernate.Exception
1、org.hibernate.ObjectNotFoundException: No row with the given identifier exists:
原因可能是POJO映射文件中的字段和数据库里表的字段不匹配(不一致)。另外还有一种可能就是表A与表B之间存在关联关系,并且从表A中通过外键查询表B当中的符合条件的记录时,在表B找不到相应的记录,但这种关联关系还继续维持着!
很可能是因为设置级联操作。 又或者是在删除表A的记录时,你并没有同时删除与之关联表B中的记录!!!
2、org.hibernate.PropertyAccessException: exception setting property value:
主要是数据库中number类型的字段为空导致的错误。其实挺好理解的当HIBERNATE获取到空时返回NULL,但是如果 你配置的映射文件中type 是long或者其他基本数据类型时,就会出现错误。解决的方法有2种
第一:设定数据库,如果是number类型或者其他映射后是基本数据的类型时,为其设定默认值。
第二:在POJO类中的set器 传入基本数据类型的封装类,然后进行判断,如果是NULL就赋给默认值。
3、org.hibernate.LazyInitializationException: could not initialize proxy - no Session:
这是一个lazy使用后的Exception,使用迟时加载,在session(hibernate里的session),关闭后使用该对象的未加载变量,也就是说session已经关闭,没有保存到内存中,然后你使用了,导致该异常。
原因:<may-to-one>or<one-to-may>的lazy属性默认为:lazy = "proxy"
解决:<many-to-one> & <set> 中设置 lazy="false"
三、org.apache.jasper.jasperException
访问JSP时,报错:Attribute value is quoted with " which must be escaped when used within the value 。相信很多人都遇到过,以下结合本人查资料与亲自实践得到的结论。(有不对的地方还请指教)
错误常发生的位置 value="<%=""+request.getAttribute("name")%>"
错误产生的原因,是因为tomcat版本升级后(6.0以后),对双引号的处理机制引起的,如果出现双引号包含双引号的情况,就可能会出现这个错误。
解决办法有好多种,大多数网上的意见是改为value=‘<%=""+request.getAttribute("name")%>’ 这样确实可以解决这个报错,可能无法完全解决问题,比如项目中有很多地方以前都用的是双引号,修改起来会非常麻烦,还容易出错。
查看tomact文档有一段话这样描述的“If false the requirements for escaping quotes in JSP attributes will be relaxed so that an unescaped quote will not cause an error.
If not specified, the specification compliant default of true will be used.” 这个描述针对的是tomact的org.apache.jasper.compiler. Parser.STRICT_QUOTE_ESCAPING属性。
如此一来,我们知道只要在tomcat启动时将这个属性设为false就可以解决这个问题。
那么怎么将这个属性设置到tomcat的system属性中呢,有至少两个办法:
一种是利用tomcat启动的执行脚本,在执行过程中调用setenv.sh,在其中设置环境变量,如:JAVA_OPTS=%JAVA_OPTS%: -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false
另一种是找到conf/catalina.properties文件,在最后添加org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false 即可。
四、java.lang.NoClassDefFoundError:TagSupport
这个错误应该就是没有成功加载tomcat自带的jar包jsp-api.jar。
在网上看到很多网友说要把tomcat/lib下的jsp-api.jar拷贝到项目/WEB_INF/lib下并导入,本人试了一下这是有问题的,这样虽然在启动tomcat的时候不会报错了但是在运行程序(比如打开网页)的时候就会报错,因为jar包冲突了。
解决办法:
1.引用jsp-api.jar
项目右键-->properties-->java Build Path-->Libraries-->add External JREs-->tomcat下的jsp-api.jar
2.直接整体加入tomcat的jar包
项目右键-->properties-->java Build Path-->Libraries-->Add library-->Server Runtime-->Apache Tomcat xx
注意:当你已经引用了tomcat/lib下的jsp-api.jar,在运行程序的时候如果报以下错误:
java.lang.ClassCastException: org.apache.struts.taglib.bean.CookieTei cannot be cast to javax.servlet.jsp.tagext.TagExtraInfo
需要去你发布的项目下:也就是/tomcat xxx/webapps/项目名/WEB-INF/lib下去删除jsp-api.jar,然后重启tomcat。
五、javax.net.ssl.SSLHandshakeException
I.报错: javax.net.ssl.SSLHandshakeException
II.原因分析:
CAS部署时,常常要涉及到HTTPS的证书发布问题。由于在实验环境中,CAS和应用服务常常是共用一台PC机,它们跑在相同的JRE环境和Tomcat服务器上,因此忽略了证书的实际用途,一旦将CAS和应用分别部署在不同的机器上时,就晕了!
这里假设如下实验环境来说明相应的部署
机器A: 部署CAS服务
机器B: 部署OA应用
机器C: 用户浏览器端
1.由机器A上生成.keystore的证书文件,证书颁发者是机器A的完全域名
2.机器A上用于部署CAS的Tomcat的server.xml文件中定义HTTPS的配置,指向.keystore文件证书
3.从.keystore中导出的凭证文件要copy到机器B上,并导入机器B的JRE环境的证书库中
4.机器B上部署OA的Tomcat必须指定运行在导入凭证JRE环境上,而不是JDK,这点常有人搞错。
III.导入证书步骤:
1.找到JRE
1)机器B的OA应用直接部署在Tomcat
>>>独立的JRE
如果你在安装JDK时,选择了同时安装JRE,那么系统是跑在独立的JRE上。
为什么?因为在安装独立JRE的时候程序自动帮你把jre的java.exe添加到了系统变量中,验证的方法很简单,大家看到了系统环境变量的 path最前面有“%SystemRoot%system32;%SystemRoot%;”这样的配置,
那么再去Windows/system32下面去看看吧,发现了什么?有一个java.exe。
>>>JDK里的JRE
如果没有同时安装独立JRE,那么系统跑在JDK自带的JRE上。
2)机器B的OA应用在MyEclipse中开发测试中
MyEclipse-右键project-Java Build Path-Libraries-双击JRE-一般是Workspace default JRE;
MyEclipse-windows-Preferences-Java-Installed JREs-右边有Myeclipse默认自带的JDK,双击即可查到JRE home;
2.到机器A拷贝证书xxx.cer文件到机器B
3.导入命令
cmd进入命令行窗口;cd进入JRE目录\lib\security;
keytool -import -alias cacerts -keystore JRE目录\lib\security\cacerts -file 证书目录\xxx.cer -trustcacerts;
提示输入密码:changeit;
确定:y
4.如果keytool用不了,查看下path,classpath是否配置正确。
IV.自己总结的证书导入步骤(cmd进入命令行窗口,cd进入JRE目录\lib\security):
1.查看证书:keytool -list -keystore /xxx/cacerts -storepass changeit
2.删除同名证书:keytool -delete -alias 证书名称 -keystore /xxx/cacerts -keypass changeit
3.导入证书:keytool -import -alias 证书名称 -file /xxx/server.cer -keystore /xxx/cacerts -storepass changeit 或者
keytool -import -v -rfc -trustcacerts -alias 证书名称 -file /xxx/server.cer -keystore /xxx/cacerts -storepass changeit -keystore cacerts所在完整路径 -storetype JKS;
4.如果keytool不可用(提示不是内部命令);cd /xxx/jdk1.xxx/bin
或者直接在classpath里面配置%JAVA_HOME%\lib\tools.jar;
六、CASAuthenticationException: Unable to validate ProxyTicketValidator
单点登录报错:Unable to validate ProxyTicketValidator
edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator
[[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList = [ null ]
[edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl =
[https: // sourcesite:8443/cas/proxyValidate] ticket=[ST-0-UMjsI0YOhF15RhutnkHW]
service=[http%3A%2F%2Fdestsite%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample]
renew=false]]]
...
可能的原因:
1.证书未正确产生和导入。在SSL握手中,CAS Client无法识别CAS Server的证书(X),即无法建立一条从cacerts信任证书到X的信任路径,读者可以看一个叫做PKIX规范。
解决办法是检查tomcat使用的信任证书路径,通常是jre/lib/security/cacerts文件,看是否已经导入了所需信任证书。
2. 未使用域名作为访问服务器。
3. tomcat使用的jvm不是系统默认的jdk所带的JVM,这个经常发生。
七、java.lang.OutOfMemoryError: Java heap space
1、首先得确定有没有跑多个java进程,
2、然后看一下tomcat/wapps下面是不是有忘了remove的项目(本人就是关闭了一个之前的项目,但是还在wapps里面没有移除)
3、引起java.lang.OutOfMemoryError: Java heap space异常,可能是由JAVA的堆栈设置太小的原因
根据网上的答案大致有以下两种解决方法:
1)、在D:/apache-tomcat-6.0.18/bin/catalina.bat最前面加入:set JAVA_OPTS=-Xms384m -Xmx384m
注意:只有startup.bat启动tomcat,设置才能生效,如果利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说set JAVA_OPTS=-Xms384m -Xmx384m没起作用
2)、在Eclilpse中修改启动参数,在VM arguments 加入了-Xms384m -Xmx384m,设置如下图所示

八、java.lang.RuntimeException: Unable to create XMLReader
XmlReader 读取文件异常:
java.lang.RuntimeException: Unable to create XMLReader
org.jasig.cas.client.util.XmlUtils.getXmlReader(XmlUtils.java:44)
org.jasig.cas.client.util.XmlUtils.getTextForElement(XmlUtils.java:116)
root cause
java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser
...
解决办法:(jar包下载)
导入dom4j.jar和xerces.jar;尤其是需要后面一个jar包.
九:
遇到的Exception/error及解决办法记录汇总的更多相关文章
- jenkins编辑报错Exception when publishing, exception message的解决办法
jenkins编辑报错Exception when publishing, exception message的解决办法 查看目标主机的磁盘空间是否占满,清理磁盘空间即可
- 使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行
使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行 前几天项目中有一个图表的是用echart生成的,遇到一个问题,就是在手机端显示的售时候,如果文字太长就会超出div,之前的 ...
- 记录一次MyEclipse打开jsp文件出现Error的解决办法
今天正在忙着写项目,在打开一个项目内的jsp文件时发现我亲爱的代码消失了. 最后从网上找到了解决办法,希望可以帮到有需要的人,也作为个人记录 第一步:找到安装路径MyEclipse\configura ...
- Spring Boot连接MySQL报错“Internal Server Error”的解决办法
报错信息如下: {timestamp: "2018-06-14T03:48:23.436+0000", status: 500, error: "Internal Ser ...
- xp操作系统下配置iis,出现了server application error的解决办法
在网上搜索了很多解决办法,最后发现一个差不多的: Server Application Error The server has encountered an error while loading ...
- There was an internal API error.的解决办法
1.当安装应用到4s时,偶尔有些程序会报这个错误,There was an internal API error 解决办法如下: 真机运行下,项目在iOS8.0下运行正常,但是一旦换到iOS7.0和7 ...
- VC error LNK2005 解决办法
error LNK2005: "int __cdecl VerifyVMR9(void)" (?VerifyVMR9@@YAHXZ) 解决办法 在 属性->配置属性-> ...
- iOS 提交审核报错 ERROR ITMS-90087解决办法
ERROR ITMS-: "Unsupported Architectures. The executable for yht.temp_caseinsensitive_rename.app ...
- Odoo8出现Internal Server Error的解决办法之一
转载地址:http://blog.sina.com.cn/s/blog_7cb52fa80102vaf3.html 问题: 不知怎么回事,我的Odoo8出错了,重装也一样出错信息如下 Inte ...
随机推荐
- ABP源码分析四十三:ZERO的本地化
ABP Zero模块扩展了ABP基础框架中的本地化功能,实现了通过数据库管理本地化的功能.其通过数据库保存本地化语言及其资源. ApplicationLanguage:代表本地化语言的实体类.一种语言 ...
- Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 为一个”模型定义”函数返回一个计算列
11-3. 为一个”模型定义”函数返回一个计算列 问题 想从”模型定义”函数里返回一个计算列 解决方案 假设我们有一个员工(Employee)实体,属性有: FirstName, LastName,和 ...
- Android-Eclipse-INSTALL_FAILED_UPDATE_INCOMPATIBLE错误
电脑重装了系统,环境问题一大堆,唉,搞死人,这不,今天就出现了这样的一个奇怪的问题. INSTALL_FAILED_UPDATE_INCOMPATIBLE 最后搜了一遍,发现是因为已经安装了这个包,包 ...
- SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(47)-工作流设计-补充
系列目录 补充一下,有人要表单的代码,这个用代码生成器生成表Flow_Form表的Index代码就可以 加上几个按钮就可以了 <div class="mvctool"> ...
- Autofac 组件、服务、自动装配 《第二篇》
一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...
- alias拦截器的使用
在SSH项目中,有时需要由一个Action跳转到另一个Action.有两种方式可以实现Action之间的跳转,一种是chain,另一种是redirectAction,这两种方式之间的区别是chain是 ...
- 【Java每日一题】20161223
package Dec2016; public class Ques1223 { public static void main(String[] args){ Integer obj = Integ ...
- Oracle同义词
Oracle的同义词(synonyms)从字面上理解就是别名的意思,和试图的功能类似,就是一种映射关系.本文介绍如何创建同义词语句,删除同义词以及查看同义词语句. Oracle的同义词总结:从字面上理 ...
- Java之继承、抽象类、接口篇
一.继承(extends) 什么是继承? 继承是对现实生活中的"分类"概念的一种模拟. 狮子拥有动物的一切基本特性,但同时又拥有自己的独特的特性,这就是"继承" ...