﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-、慕白-随笔分类-Java</title><link>http://www.blogjava.net/AntiquMan/category/38656.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 15 Dec 2021 01:45:10 GMT</lastBuildDate><pubDate>Wed, 15 Dec 2021 01:45:10 GMT</pubDate><ttl>60</ttl><item><title>简单爬虫：东方财富网股票数据爬取</title><link>http://www.blogjava.net/AntiquMan/archive/2021/12/15/436089.html</link><dc:creator>AntiquMan</dc:creator><author>AntiquMan</author><pubDate>Wed, 15 Dec 2021 01:07:00 GMT</pubDate><guid>http://www.blogjava.net/AntiquMan/archive/2021/12/15/436089.html</guid><wfw:comment>http://www.blogjava.net/AntiquMan/comments/436089.html</wfw:comment><comments>http://www.blogjava.net/AntiquMan/archive/2021/12/15/436089.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AntiquMan/comments/commentRss/436089.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AntiquMan/services/trackbacks/436089.html</trackback:ping><description><![CDATA[转载 https://zhuanlan.zhihu.com/p/50099084<img src ="http://www.blogjava.net/AntiquMan/aggbug/436089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AntiquMan/" target="_blank">AntiquMan</a> 2021-12-15 09:07 <a href="http://www.blogjava.net/AntiquMan/archive/2021/12/15/436089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j配置祥解</title><link>http://www.blogjava.net/AntiquMan/archive/2013/08/26/403305.html</link><dc:creator>AntiquMan</dc:creator><author>AntiquMan</author><pubDate>Mon, 26 Aug 2013 03:27:00 GMT</pubDate><guid>http://www.blogjava.net/AntiquMan/archive/2013/08/26/403305.html</guid><wfw:comment>http://www.blogjava.net/AntiquMan/comments/403305.html</wfw:comment><comments>http://www.blogjava.net/AntiquMan/archive/2013/08/26/403305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AntiquMan/comments/commentRss/403305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AntiquMan/services/trackbacks/403305.html</trackback:ping><description><![CDATA[<div style="font-size: 12px" id="blogDetailDiv"><span style="line-height: 1.3em; font-family: '宋体'">第一步：加入log4j-1.2.8.jar到lib下。</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">第二步：在CLASSPATH下建立log4j.properties。内容如下：</span><wbr><br /><br />1 log4j.rootCategory=INFO, stdout , R<br /><br />2<br /><br />3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br /><br />4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br /><br />5 log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n<br /><br />6<br /><br />7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender<br /><br />8 log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log<br /><br />9 log4j.appender.R.layout=org.apache.log4j.PatternLayout<br /><br />10 log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n<br /><br />11<br /><br />12 log4j.logger.com.neusoft=DEBUG<br /><br />13 log4j.logger.com.opensymphony.oscache=ERROR<br /><br />14 log4j.logger.net.sf.navigator=ERROR<br /><br />15 log4j.logger.org.apache.commons=ERROR<br /><br />16 log4j.logger.org.apache.struts=WARN<br /><br />17 log4j.logger.org.displaytag=ERROR<br /><br />18 log4j.logger.org.springframework=DEBUG<br /><br />19 log4j.logger.com.ibatis.db=WARN<br /><br />20 log4j.logger.org.apache.velocity=FATAL<br /><br />21<br /><br />22 log4j.logger.com.canoo.webtest=WARN<br /><br />23<br /><br />24 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN<br /><br />25 log4j.logger.org.hibernate=DEBUG<br /><br />26 log4j.logger.org.logicalcobwebs=WARN<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">第三步：相应的修改其中属性，修改之前就必须知道这些都是干什么的，在第二部分讲解。</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">第四步：在要输出日志的类中加入相关语句：</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">定义属性：protected final Log log = LogFactory.getLog(getClass());</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">在相应的方法中：</span><wbr><br /><br />if (log.isDebugEnabled())<br /><br />{<br /><br />log.debug(&#8220;System &#8230;..&#8221;);<br /><br />}<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">二、Log4j说明</span><wbr><br /><br />1 log4j.rootCategory=INFO, stdout , R<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">此句为将等级为INFO的日志信息输出到stdout和R这两个目的地，stdout和R的定义在下面的代码，可以任意起名。等级可分为OFF、 FATAL、ERROR、WARN、INFO、DEBUG、ALL，如果配置OFF则不打出任何信息，如果配置为INFO这样只显示INFO, WARN, ERROR的log信息，而DEBUG信息不会被显示，具体讲解可参照第三部分定义配置文件中的logger。</span><wbr><br /><br />3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">此句为定义名为stdout的输出端是哪种类型，可以是</span><wbr><br /><br />org.apache.log4j.ConsoleAppender<span style="line-height: 1.3em; font-family: '宋体'">（控制台），</span><wbr><br /><br />org.apache.log4j.FileAppender<span style="line-height: 1.3em; font-family: '宋体'">（文件），</span><wbr><br /><br />org.apache.log4j.DailyRollingFileAppender<span style="line-height: 1.3em; font-family: '宋体'">（每天产生一个日志文件），</span><wbr><br /><br />org.apache.log4j.RollingFileAppender<span style="line-height: 1.3em; font-family: '宋体'">（文件大小到达指定尺寸的时候产生一个新的文件）</span><wbr><br /><br />org.apache.log4j.WriterAppender<span style="line-height: 1.3em; font-family: '宋体'">（将日志信息以流格式发送到任意指定的地方）</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">具体讲解可参照第三部分定义配置文件中的Appender。</span><wbr><br /><br />4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">此句为定义名为stdout的输出端的layout是哪种类型，可以是</span><wbr><br /><br />org.apache.log4j.HTMLLayout<span style="line-height: 1.3em; font-family: '宋体'">（以HTML表格形式布局），</span><wbr><br /><br />org.apache.log4j.PatternLayout<span style="line-height: 1.3em; font-family: '宋体'">（可以灵活地指定布局模式），</span><wbr><br /><br />org.apache.log4j.SimpleLayout<span style="line-height: 1.3em; font-family: '宋体'">（包含日志信息的级别和信息字符串），</span><wbr><br /><br />org.apache.log4j.TTCCLayout<span style="line-height: 1.3em; font-family: '宋体'">（包含日志产生的时间、线程、类别等等信息）</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">具体讲解可参照第三部分定义配置文件中的Layout。</span><wbr><br /><br />5 log4j.appender.stdout.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern，打印参数如下：</span><wbr><br /><br />%m <span style="line-height: 1.3em; font-family: '宋体'">输出代码中指定的消息</span><wbr><br /><br />%p <span style="line-height: 1.3em; font-family: '宋体'">输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL</span><wbr><br /><br />%r <span style="line-height: 1.3em; font-family: '宋体'">输出自应用启动到输出该log信息耗费的毫秒数</span><wbr><br /><br />%c <span style="line-height: 1.3em; font-family: '宋体'">输出所属的类目，通常就是所在类的全名</span><wbr><br /><br />%t <span style="line-height: 1.3em; font-family: '宋体'">输出产生该日志事件的线程名</span><wbr><br /><br />%n <span style="line-height: 1.3em; font-family: '宋体'">输出一个回车换行符，Windows平台为&#8220;rn&#8221;，Unix平台为&#8220;n&#8221;</span><wbr><br /><br />%d <span style="line-height: 1.3em; font-family: '宋体'">输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921</span><wbr><br /><br />%l <span style="line-height: 1.3em; font-family: '宋体'">输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。</span><wbr><br /><br />[QC]<span style="line-height: 1.3em; font-family: '宋体'">是log信息的开头，可以为任意字符，一般为项目简称。</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">输出的信息</span><wbr><br /><br />[TS] DEBUG [main] AbstractBeanFactory.getBean(189) | Returning cached instance of singleton bean 'MyAutoProxy'<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">具体讲解可参照第三部分定义配置文件中的格式化日志信息。</span><wbr><br /><br />7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">此句与第3行一样。定义名为R的输出端的类型为每天产生一个日志文件。</span><wbr><br /><br />8 log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">此句为定义名为R的输出端的文件名为D:\Tomcat 5.5\logs\qc.log</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">可以自行修改。</span><wbr><br /><br />9 log4j.appender.R.layout=org.apache.log4j.PatternLayout<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">与第4行相同。</span><wbr><br /><br />10 log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">与第5行相同。</span><wbr><br /><br />12 log4j.logger.com. neusoft =DEBUG<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">指定com.neusoft包下的所有类的等级为DEBUG。</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">可以把com.neusoft改为自己项目所用的包名。</span><wbr><br /><br />13 log4j.logger.com.opensymphony.oscache=ERROR<br /><br />14 log4j.logger.net.sf.navigator=ERROR<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">这两句是把这两个包下出现的错误的等级设为ERROR，如果项目中没有配置EHCache，则不需要这两句。</span><wbr><br /><br />15 log4j.logger.org.apache.commons=ERROR<br /><br />16 log4j.logger.org.apache.struts=WARN<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">这两句是struts的包。</span><wbr><br /><br />17 log4j.logger.org.displaytag=ERROR<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">这句是displaytag的包。（QC问题列表页面所用）</span><wbr><br /><br />18 log4j.logger.org.springframework=DEBUG<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">此句为Spring的包。</span><wbr><br /><br />24 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN<br /><br />25 log4j.logger.org.hibernate=DEBUG<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">此两句是hibernate的包。</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">以上这些包的设置可根据项目的实际情况而自行定制。</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">三、log4j详解</span><wbr><br /><br />1<span style="line-height: 1.3em; font-family: '宋体'">、定义配置文件</span><wbr><br /><br />Log4j<span style="line-height: 1.3em; font-family: '宋体'">支持两种配置文件格式，一种是XML格式的文件，一种是Java特性文件log4j.properties（键=值）。下面将介绍使用log4j.properties文件作为配置文件的方法:</span><wbr><br /><br />&#9312;<span style="line-height: 1.3em; font-family: '宋体'">、配置根Logger</span><wbr><br /><br />Logger <span style="line-height: 1.3em; font-family: '宋体'">负责处理日志记录的大部分操作。</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">其语法为：</span><wbr><br /><br />log4j.rootLogger = [ level ] , appenderName, appenderName, &#8230;<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">其中，level 是日志记录的优先级，分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别，优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别，您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别，只有等于及高于这个级别的才进行处理，则应用程序中所有DEBUG级别的日志信息将不被打印出来。ALL:打印所有的日志，OFF：关 闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。</span><wbr><br /><br />&#9313;<span style="line-height: 1.3em; font-family: '宋体'">、配置日志信息输出目的地 Appender</span><wbr><br /><br />Appender <span style="line-height: 1.3em; font-family: '宋体'">负责控制日志记录操作的输出。</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">其语法为：</span><wbr><br /><br />log4j.appender.appenderName = fully.qualified.name.of.appender.class<br /><br />log4j.appender.appenderName.option1 = value1<br /><br />&#8230;<br /><br />log4j.appender.appenderName.optionN = valueN<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">这里的appenderName为在&#9312;里定义的，可任意起名。</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">其中，Log4j提供的appender有以下几种：</span><wbr><br /><br />org.apache.log4j.ConsoleAppender<span style="line-height: 1.3em; font-family: '宋体'">（控制台），</span><wbr><br /><br />org.apache.log4j.FileAppender<span style="line-height: 1.3em; font-family: '宋体'">（文件），</span><wbr><br /><br />org.apache.log4j.DailyRollingFileAppender<span style="line-height: 1.3em; font-family: '宋体'">（每天产生一个日志文件），</span><wbr><br /><br />org.apache.log4j.RollingFileAppender<span style="line-height: 1.3em; font-family: '宋体'">（文件大小到达指定尺寸的时候产生一个新的文件），可通过 log4j.appender.R.MaxFileSize=100KB设置文件大小，还可通过 log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。</span><wbr><br /><br />org.apache.log4j.WriterAppender<span style="line-height: 1.3em; font-family: '宋体'">（将日志信息以流格式发送到任意指定的地方）</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">例如：log4j.appender.stdout=org.apache.log4j.ConsoleAppender</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">定义一个名为stdout的输出目的地，ConsoleAppender为控制台。</span><wbr><br /><br />&#9314;<span style="line-height: 1.3em; font-family: '宋体'">、配置日志信息的格式（布局）Layout</span><wbr><br /><br />Layout <span style="line-height: 1.3em; font-family: '宋体'">负责格式化Appender的输出。</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">其语法为：</span><wbr><br /><br />log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br /><br />log4j.appender.appenderName.layout.option1 = value1<br /><br />&#8230;<br /><br />log4j.appender.appenderName.layout.optionN = valueN<br /><br /><span style="line-height: 1.3em; font-family: '宋体'">其中，Log4j提供的layout有以下几种：</span><wbr><br /><br />org.apache.log4j.HTMLLayout<span style="line-height: 1.3em; font-family: '宋体'">（以HTML表格形式布局），</span><wbr><br /><br />org.apache.log4j.PatternLayout<span style="line-height: 1.3em; font-family: '宋体'">（可以灵活地指定布局模式），</span><wbr><br /><br />org.apache.log4j.SimpleLayout<span style="line-height: 1.3em; font-family: '宋体'">（包含日志信息的级别和信息字符串），</span><wbr><br /><br />org.apache.log4j.TTCCLayout<span style="line-height: 1.3em; font-family: '宋体'">（包含日志产生的时间、线程、类别等等信息）</span><wbr><br /><br />2<span style="line-height: 1.3em; font-family: '宋体'">、格式化日志信息</span><wbr><br /><br />Log4J<span style="line-height: 1.3em; font-family: '宋体'">采用类似C语言中的printf函数的打印格式格式化日志信息，打印参数如下：</span><wbr><br /><br />%m <span style="line-height: 1.3em; font-family: '宋体'">输出代码中指定的消息</span><wbr><br /><br />%p <span style="line-height: 1.3em; font-family: '宋体'">输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL</span><wbr><br /><br />%r <span style="line-height: 1.3em; font-family: '宋体'">输出自应用启动到输出该log信息耗费的毫秒数</span><wbr><br /><br />%c <span style="line-height: 1.3em; font-family: '宋体'">输出所属的类目，通常就是所在类的全名</span><wbr><br /><br />%t <span style="line-height: 1.3em; font-family: '宋体'">输出产生该日志事件的线程名</span><wbr><br /><br />%n <span style="line-height: 1.3em; font-family: '宋体'">输出一个回车换行符，Windows平台为&#8220;rn&#8221;，Unix平台为&#8220;n&#8221;</span><wbr><br /><br />%d <span style="line-height: 1.3em; font-family: '宋体'">输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921</span><wbr><br /><br />%l <span style="line-height: 1.3em; font-family: '宋体'">输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。</span><wbr><br /><br />3<span style="line-height: 1.3em; font-family: '宋体'">、在代码中使用Log4j</span><wbr><br /><br /><span style="line-height: 1.3em; font-family: '宋体'">我们在需要输出日志信息的类中做如下的三个工作：</span><wbr><br /><br />1<span style="line-height: 1.3em; font-family: '宋体'">、导入所有需的commongs-logging类：</span><wbr><br /><br />import org.apache.commons.logging.Log;<br /><br />import org.apache.commons.logging.LogFactory;<br /><br />2<span style="line-height: 1.3em; font-family: '宋体'">、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员：</span><wbr><br /><br />private final Log log = LogFactory.getLog(getClass());<br /><br />LogFactory.getLog()<span style="line-height: 1.3em; font-family: '宋体'">方法的参数使用的是当前类的class。</span><wbr><br /><br />3<span style="line-height: 1.3em; font-family: '宋体'">、使用org.apache.commons.logging.Log类的成员方法输出日志信息：</span><wbr><br /><br />if (log.isDebugEnabled())<br />{<br />log.debug("111");<br />}<br />if (log.isInfoEnabled())<br />{<br />log.info("222");<br />}<br />if (log.isWarnEnabled())<br />{<br />log.warn("333");<br />}<br />if (log.isErrorEnabled())<br />{<br />log.error("444");<br />}<br />if (log.isFatalEnabled())<br />{<br />log.fatal("555")<br />} <!--v:3.2--></div><br /><br />转载：<a href="http://www.blogjava.net/kit-soft/archive/2009/08/28/292977.html">http://www.blogjava.net/kit-soft/archive/2009/08/28/292977.html</a><img src ="http://www.blogjava.net/AntiquMan/aggbug/403305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AntiquMan/" target="_blank">AntiquMan</a> 2013-08-26 11:27 <a href="http://www.blogjava.net/AntiquMan/archive/2013/08/26/403305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unrecognized Windows Sockets error: 0: JVM_Bind</title><link>http://www.blogjava.net/AntiquMan/archive/2010/12/04/339789.html</link><dc:creator>AntiquMan</dc:creator><author>AntiquMan</author><pubDate>Sat, 04 Dec 2010 03:56:00 GMT</pubDate><guid>http://www.blogjava.net/AntiquMan/archive/2010/12/04/339789.html</guid><wfw:comment>http://www.blogjava.net/AntiquMan/comments/339789.html</wfw:comment><comments>http://www.blogjava.net/AntiquMan/archive/2010/12/04/339789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AntiquMan/comments/commentRss/339789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AntiquMan/services/trackbacks/339789.html</trackback:ping><description><![CDATA[<h3>刚装WINDOWS 7 启动tomcat 时 报Unrecognized Windows Sockets error: 0: JVM_Bind <br />
&nbsp;&nbsp;&nbsp;&nbsp; 当时，我就觉的怪了，我以前系统重装后，根本就没有出现这样的事情啊，最我想一下,一定是tomcat的 <br />
&nbsp;&nbsp; 配置文件端口有问题.最后我终于发现在了 在tomcat 下的conf文件下的server.xml 把 <br />
&lt;Server port="8009" shutdown="SHUTDOWN"&gt; <br />
&lt;Connector port="8090" protocol="HTTP/1.1" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionTimeout="20000" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirectPort="8443" /&gt; <br />
<br />
&nbsp;&nbsp;&nbsp; &lt;Connector port="8099" protocol="AJP/1.3" redirectPort="8443" /&gt; <br />
这三个端口改掉就OK了 </h3>
<img src ="http://www.blogjava.net/AntiquMan/aggbug/339789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AntiquMan/" target="_blank">AntiquMan</a> 2010-12-04 11:56 <a href="http://www.blogjava.net/AntiquMan/archive/2010/12/04/339789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse 6.0.1 注册码</title><link>http://www.blogjava.net/AntiquMan/archive/2009/10/13/298022.html</link><dc:creator>AntiquMan</dc:creator><author>AntiquMan</author><pubDate>Tue, 13 Oct 2009 01:21:00 GMT</pubDate><guid>http://www.blogjava.net/AntiquMan/archive/2009/10/13/298022.html</guid><wfw:comment>http://www.blogjava.net/AntiquMan/comments/298022.html</wfw:comment><comments>http://www.blogjava.net/AntiquMan/archive/2009/10/13/298022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AntiquMan/comments/commentRss/298022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AntiquMan/services/trackbacks/298022.html</trackback:ping><description><![CDATA[kevin1543
xLR8ZC-855575-6754735755635682
<img src ="http://www.blogjava.net/AntiquMan/aggbug/298022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AntiquMan/" target="_blank">AntiquMan</a> 2009-10-13 09:21 <a href="http://www.blogjava.net/AntiquMan/archive/2009/10/13/298022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WSDD文件参考文档</title><link>http://www.blogjava.net/AntiquMan/archive/2009/09/08/294273.html</link><dc:creator>AntiquMan</dc:creator><author>AntiquMan</author><pubDate>Tue, 08 Sep 2009 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/AntiquMan/archive/2009/09/08/294273.html</guid><wfw:comment>http://www.blogjava.net/AntiquMan/comments/294273.html</wfw:comment><comments>http://www.blogjava.net/AntiquMan/archive/2009/09/08/294273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AntiquMan/comments/commentRss/294273.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AntiquMan/services/trackbacks/294273.html</trackback:ping><description><![CDATA[<div><span  style="background-color: rgba(0, 0, 0, 0);">本部分介绍的所有的WSDD元素的名称空间都是"http://xml.apache.org/axis/wsdd/"。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;deployment&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">告诉Axis Engine这是一个部署描述文件。一个部署描述文件可以表示一个完整的engine配置或者将要部署到一个活动active的一部分组件。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;GlobalConfiguration&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">用于控制engine范围的配置。可以包含以下子元素：</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&#183; &nbsp; &lt;parameter&gt; : 用来设置Axis的各种属性，参考Global Axis Configuration，可以配置任意数量的参数元素.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&#183; &nbsp; &lt;role&gt; : 设置一个SOAP actor/role URI，engine可以对它进行识别。这允许指向这个role的SOAP headers成功的被engine处理。任意数量.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&#183; &nbsp; &lt;requestFlow&gt; : 全局的请求Handlers。在调用实际的服务之前调用.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&#183; &nbsp; &lt;responseFlow&gt; : 全局响应Handlers，在调用完实际的服务后，还没有返回到客户端之前调用.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;requestFlow [name="name"] [type="type"] &gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">可以放置任意多个&lt;handler&gt; or &lt;chain&gt;在&lt;requestFlow&gt;中，但是可能只有一个&lt;requestFlow&gt;.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;responseFlow [name="name"] [type="type"] &gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">This is used to configure handlers in response flow. You may put any number of &lt;handler&gt; or &lt;chain&gt; elements (see below) inside the &lt;responseFlow&gt;, but there may only be one &lt;responseFlow&gt;.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;undeployment&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">部署文档的根元素，用于指示Axis这是个卸载描述文件.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;handler [name="name"] type="type"&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">位于顶层元素&lt;deployment&gt; or &lt;undeployment&gt;, or inside a &lt;chain&gt;, &lt;requestFlow&gt;, or &lt;responseFlow&gt;. 用于定义Handler，并定义handler的类型。"Type" 可以是已经定义的Handler或者是"java:class.name"形式的QName。可选的"name"属性允许将这个Handler的定义在其他部署描述部分中引用。可以包含任意数量的&lt;parameter name="name" value="value"&gt;元素.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;service name="name" provider="provider" &gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">部署/卸载一个Axis服务。这是最复杂的一个WSDD标签。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">Options可能通过以下元素来指定: &lt;parameter name="name" value="value"/&gt;, 一些常用的包括:</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&#183; &nbsp; className : 后台实现的类</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&#183; &nbsp; allowedMethods : 每个provider可以决定那些方法允许web services访问</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">Axis支持的providers有如下几种:</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">Java RPC Provider (provider="java:RPC") 默认情况下所有的public方法都可以web service方式提供</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">Java MsgProvder (provider="java:MSG")&nbsp;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">为了更进一步的限制上面的方法，allowedMethods选项用于指定一个以空格分隔的方法名，只有这些方法可以通过web service访问。也可以将这个值指定为&#8221;*&#8221;表示所有的方法都可以访问。同时operation元素用来更进一步的定义被提供的方法，但是它不能决定方法的可见性.&nbsp;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">注意，发布任何web service都有安全含义.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&#183; &nbsp; allowedRoles : 都好分离的允许访问服务的角色列表。注意，这些是安全角色，和SOAP角色相反。安全角色控制访问，SOAP角色控制哪些SOAPheaders会被处理。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&#183; &nbsp; extraClasses : 指定一个空格或者都好分离的类名称列表，这些类的名字应该被包含在WSDL文档的类型定义部分。当服务接口引用一个基类的时候，或者希望WSDL文件包含其他类的XML Schema类型定义的时候，这个参数很有用。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">如果希望为服务定义handler，可以在&lt;service&gt;元素中添加&lt;requestFlow&gt;和&lt;responseFlow&gt;子元素。他们的语义和&lt;chain&gt;元素中的定义时一样的。也就是说，它们可以包含&lt;handler&gt; and &lt;chain&gt; 元素，根据指定的顺序被调用.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">通过服务的Handlers来控制角色，可以在服务声明中指定任意数量的&lt;role&gt;元素。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">例如:</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;service name="test"&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&lt;parameter name="className" value="test.Implementation"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&lt;parameter name="allowedMethods" value="*"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&lt;namespace&gt;http://testservice/&lt;/namespace&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&lt;role&gt;http://testservice/MyRole&lt;/role&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&lt;requestFlow&gt; &lt;!-- Run these before processing the request --&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;handler type="java:MyHandlerClass"/&gt;\</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;handler type="somethingIDefinedPreviously"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&lt;/requestFlow&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;/service&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">可以通过使用&lt;operation&gt;标签指定关于服务的特殊操作的元数据。这可以将方法的java参数名和特定的XML名进行映射，为参数指定特定的模式，并将特定的XML名字映射到特定的操作。例如</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;operation name="method"&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;/operation&gt;&nbsp;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;chain name="name"&gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;subelement/&gt;...</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;/chain&gt;&nbsp;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">定义一个链。当chain被调用的时候，按顺序调用其中的handler。这样就可以构建一个常用功能的模块，chain元素的子元素可以是handler或者chain。handler的定义形式可以是如下两种方式:</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;chain name="myChain"&gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&lt;handler type="java:org.apache.axis.handlers.LogHandler"/&gt;&lt;/chain&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">或者</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;handler name="logger" type="java:org.apache.axis.handlers.LogHandler"/&gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;chain name="myChain"/&gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &lt;handler type="logger"/&gt;&lt;/chain&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;transport name="name"&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">定义了一个服务器端的传输。当一个输入请求到达的时候，服务器传输被调用。服务器传输可能定义&lt;requestFlow&gt; and/or &lt;responseFlow&gt; 元素来指定handlers/chains，在请求和响应被处理的时候被调用，这个功能和service元素中的功能一样。典型的传输请求响应handler实现了关于传输的功能。例如转换协议headers等等.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">对于任何种类的传输，经常是指HTTP传输，当特定的查询字符串传递到servlet的时候用户可能允许Axis servlets执行任意的动作，以plug-in的方式。 (参考Axis Servlet Query String Plug-ins).当查询字符串handler的类名被指导后，用户可以通过在&lt;transport&gt;中添加合适的&lt;parameter&gt;来启用它(插件)。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;transport name="http"&gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp;&lt;parameter name="useDefaultQueryStrings" value="false" /&gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp;&lt;parameter name="qs.name" value="class.name" /&gt;&lt;/transport&gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">在上面的例子中，AxisServlet会处理的查询字符串是?name，它调用的类是class.name。&lt;parameter&gt;元素的name属性必须加上前缀qs来表示这个元素定义了一个查询字符串handler。value属性值相实现了org.apache.axis.transport.http.QSHandler 接口的类。默认情况下，Axis提供了三个Axis servlet查询字符串handlers (?list, ?method, and ?wsdl). 查看Axis服务器配置文件来了解它们的定义。如果不希望使用默认的handlers，就设置"useDefaultQueryStrings" 为false。默认会被设置成true.&nbsp;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;transport name="name" pivot="handler type" &gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">定义了一个客户端的传输，当发送SOAP消息的时候来调用。"pivot"属性指定一个Handler来作为实际的传输sender，例如HTTPSender。请求和响应流和服务器端的设置相同.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;typeMapping qname="ns:localName" classname="classname" serializer="classname" deserializer="classname"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">每个typeMapping将一个XML qualified名字和一个Java类进行映射，使用一个序列器和反序列器。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;beanMapping qname="ns:localName" classname="classname"&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">讲话的类型映射，使用一个预定义的序列器/反序列器来编码/解码JavaBeans。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;documentation&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">在&lt;service&gt;, &lt;operation&gt; 或者操作的&lt;parameter&gt;中使用。.是文档说明，生成wsdl的&lt;wsdl:document&gt;元素.</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">Example:</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;operation name="echoString" &gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp;&lt;documentation&gt;This operation echoes a string&lt;/documentation&gt; &nbsp;&lt;parameter name="param"&gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp; &lt;documentation&gt;a string&lt;/documentation&gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp;&lt;/parameter&gt;</span></div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;/operation&gt;&nbsp;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">全局的Axis配置参数</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">服务默认的是通过server-config.wsdd文件中的值来进行配置的。但是熟练的Axis用户可以写自己的配置handler，这样就可以将配置数据保存在LDAP服务器，数据库或者远程的web service等等。查看源代码来了解如何实现。也可以在web.xml文件中使自动的获取配置信息。但是Axis不推荐这样使用，因为最好将配置信息放在一个位置。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">在server-config文件中，有一个全局配置部分，支持以名/值对的形式作为嵌套元素使用。</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;globalConfiguration&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;parameter name="adminPassword" value="admin"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;parameter name="axis.servicesPath" value="/services/"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;parameter name="attachments.Directory" value="c:\temp\attachments"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;parameter name="sendMultiRefs" value="true"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;parameter name="sendXsiTypes" value="true"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/&gt;&nbsp;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;parameter name="sendXMLDeclaration" value="true"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;parameter name="enable2DArrayEncoding" value="true"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&nbsp;&nbsp; &nbsp;&lt;parameter name="dotNetSoapEncFix" value="false"/&gt;</span></div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">&lt;/globalConfiguration&gt;</span></div>
<div><br />
</div>
<div><br />
</div>
<div><br />
</div>
<div><span  style="background-color: rgba(0, 0, 0, 0);">本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/oolala/archive/2009/03/08/3967677.aspx</span></div>
<img src ="http://www.blogjava.net/AntiquMan/aggbug/294273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AntiquMan/" target="_blank">AntiquMan</a> 2009-09-08 11:31 <a href="http://www.blogjava.net/AntiquMan/archive/2009/09/08/294273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>六种异常处理的陋习</title><link>http://www.blogjava.net/AntiquMan/archive/2009/08/10/290499.html</link><dc:creator>AntiquMan</dc:creator><author>AntiquMan</author><pubDate>Mon, 10 Aug 2009 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/AntiquMan/archive/2009/08/10/290499.html</guid><wfw:comment>http://www.blogjava.net/AntiquMan/comments/290499.html</wfw:comment><comments>http://www.blogjava.net/AntiquMan/archive/2009/08/10/290499.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/AntiquMan/comments/commentRss/290499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AntiquMan/services/trackbacks/290499.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><span style="line-height: 18px; font-size: x-small; "><span style="line-height: 18px; font-family: mceinline; ">你觉得自己是一个Java专家吗？是否肯定自己已经全面掌握了Java的异常处理机制？在下面这段代码中，你能够迅速找出异常处理的六个问题吗？&nbsp;<br />
<br />
</span></span></p>
<table border="1" align="center" bgcolor="#dadacf" bordercolor="#ffcc66" style="width: 828px; ">
    <tbody>
        <tr>
            <td><span style="font-size: x-small; "><span style="font-family: mceinline; ">1 OutputStreamWriter out = ...&nbsp;<br />
            2 java.sql.Connection conn = ...&nbsp;<br />
            3 try { // ⑸&nbsp;<br />
            4 　Statement stat = conn.createStatement();&nbsp;<br />
            5 　ResultSet rs = stat.executeQuery(&nbsp;<br />
            6 　　"select uid, name from user");&nbsp;<br />
            7 　while (rs.next())&nbsp;<br />
            8 　{&nbsp;<br />
            9 　　out.println("ID：" + rs.getString("uid") // ⑹&nbsp;<br />
            10 　　　"，姓名：" + rs.getString("name"));&nbsp;<br />
            11 　}&nbsp;<br />
            12 　conn.close(); // ⑶&nbsp;<br />
            13 　out.close();&nbsp;<br />
            14 }&nbsp;<br />
            15 catch(Exception ex) // ⑵&nbsp;<br />
            16 {&nbsp;<br />
            17 　ex.printStackTrace(); //⑴，⑷&nbsp;<br />
            18 }</span></span></td>
        </tr>
    </tbody>
</table>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><span style="line-height: 21px; font-family: mceinline; "><br />
</span><span style="line-height: 18px; font-size: x-small; "><span style="line-height: 18px; font-family: mceinline; ">　　作为一个Java程序员，你至少应该能够找出两个问题。但是，如果你不能找出全部六个问题，请继续阅读本文。&nbsp;<br />
<br />
本文讨论的不是Java异常处理的一般性原则，因为这些原则已经被大多数人熟知。我们要做的是分析各种可称为&#8220;反例&#8221;（anti-pattern）的违背优秀编码规范的常见坏习惯，帮助读者熟悉这些典型的反面例子，从而能够在实际工作中敏锐地察觉和避免这些问题。&nbsp;<br />
<br />
</span><strong><span style="line-height: 18px; font-family: mceinline; ">反例之一：丢弃异常&nbsp;</span></strong><span style="line-height: 18px; font-family: mceinline; "><br />
<br />
代码：15行-18行。&nbsp;<br />
<br />
这段代码捕获了异常却不作任何处理，可以算得上Java编程中的杀手。从问题出现的频繁程度和祸害程度来看，它也许可以和C/C++程序的一个恶名远播的问题相提并论??不检查缓冲区是否已满。如果你看到了这种丢弃（而不是抛出）异常的情况，可以百分之九十九地肯定代码存在问题（在极少数情况下，这段代码有存在的理由，但最好加上完整的注释，以免引起别人误解）。&nbsp;<br />
<br />
这段代码的错误在于，异常（几乎）总是意味着某些事情不对劲了，或者说至少发生了某些不寻常的事情，我们不应该对程序发出的求救信号保持沉默和无动于衷。调用一下printStackTrace算不上&#8220;处理异常&#8221;。不错，调用printStackTrace对调试程序有帮助，但程序调试阶段结束之后，printStackTrace就不应再在异常处理模块中担负主要责任了。&nbsp;<br />
<br />
丢弃异常的情形非常普遍。打开JDK的ThreadDeath类的文档，可以看到下面这段说明：&#8220;特别地，虽然出现ThreadDeath是一种&#8216;正常的情形&#8217;，但ThreadDeath类是Error而不是Exception的子类，因为许多应用会捕获所有的Exception然后丢弃它不再理睬。&#8221;这段话的意思是，虽然ThreadDeath代表的是一种普通的问题，但鉴于许多应用会试图捕获所有异常然后不予以适当的处理，所以JDK把ThreadDeath定义成了Error的子类，因为Error类代表的是一般的应用不应该去捕获的严重问题。可见，丢弃异常这一坏习惯是如此常见，它甚至已经影响到了Java本身的设计。&nbsp;<br />
<br />
那么，应该怎样改正呢？主要有四个选择：&nbsp;<br />
<br />
1、处理异常。针对该异常采取一些行动，例如修正问题、提醒某个人或进行其他一些处理，要根据具体的情形确定应该采取的动作。再次说明，调用printStackTrace算不上已经&#8220;处理好了异常&#8221;。&nbsp;<br />
<br />
2、重新抛出异常。处理异常的代码在分析异常之后，认为自己不能处理它，重新抛出异常也不失为一种选择。&nbsp;<br />
<br />
3、把该异常转换成另一种异常。大多数情况下，这是指把一个低级的异常转换成应用级的异常（其含义更容易被用户了解的异常）。&nbsp;<br />
<br />
4、不要捕获异常。&nbsp;<br />
<br />
结论一：既然捕获了异常，就要对它进行适当的处理。不要捕获异常之后又把它丢弃，不予理睬。&nbsp;<br />
<br />
</span><strong><span style="line-height: 18px; font-family: mceinline; ">反例之二：不指定具体的异常&nbsp;</span></strong><span style="line-height: 18px; font-family: mceinline; "><br />
<br />
代码：15行。&nbsp;<br />
<br />
许多时候人们会被这样一种&#8220;美妙的&#8221;想法吸引：用一个catch语句捕获所有的异常。最常见的情形就是使用catch(Exception ex)语句。但实际上，在绝大多数情况下，这种做法不值得提倡。为什么呢？&nbsp;<br />
<br />
要理解其原因，我们必须回顾一下catch语句的用途。catch语句表示我们预期会出现某种异常，而且希望能够处理该异常。异常类的作用就是告诉Java编译器我们想要处理的是哪一种异常。由于绝大多数异常都直接或间接从java.lang.Exception派生，catch(Exception ex)就相当于说我们想要处理几乎所有的异常。&nbsp;<br />
<br />
再来看看前面的代码例子。我们真正想要捕获的异常是什么呢？最明显的一个是SQLException，这是JDBC操作中常见的异常。另一个可能的异常是IOException，因为它要操作OutputStreamWriter。显然，在同一个catch块中处理这两种截然不同的异常是不合适的。如果用两个catch块分别捕获SQLException和IOException就要好多了。这就是说，catch语句应当尽量指定具体的异常类型，而不应该指定涵盖范围太广的Exception类。&nbsp;<br />
<br />
另一方面，除了这两个特定的异常，还有其他许多异常也可能出现。例如，如果由于某种原因，executeQuery返回了null，该怎么办？答案是让它们继续抛出，即不必捕获也不必处理。实际上，我们不能也不应该去捕获可能出现的所有异常，程序的其他地方还有捕获异常的机会??直至最后由JVM处理。&nbsp;<br />
<br />
结论二：在catch语句中尽可能指定具体的异常类型，必要时使用多个catch。不要试图处理所有可能出现的异常。&nbsp;<br />
<br />
</span><strong><span style="line-height: 18px; font-family: mceinline; ">反例之三：占用资源不释放&nbsp;</span></strong><span style="line-height: 18px; font-family: mceinline; "><br />
<br />
代码：3行-14行。&nbsp;<br />
<br />
异常改变了程序正常的执行流程。这个道理虽然简单，却常常被人们忽视。如果程序用到了文件、Socket、JDBC连接之类的资源，即使遇到了异常，也要正确释放占用的资源。为此，Java提供了一个简化这类操作的关键词finally。&nbsp;<br />
<br />
finally是样好东西：不管是否出现了异常，Finally保证在try/catch/finally块结束之前，执行清理任务的代码总是有机会执行。遗憾的是有些人却不习惯使用finally。&nbsp;<br />
<br />
当然，编写finally块应当多加小心，特别是要注意在finally块之内抛出的异常??这是执行清理任务的最后机会，尽量不要再有难以处理的错误。&nbsp;<br />
<br />
结论三：保证所有资源都被正确释放。充分运用finally关键词。</span></span></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><span style="line-height: 18px; font-size: x-small; "><strong><span style="line-height: 18px; font-family: mceinline; ">反例之四：不说明异常的详细信息&nbsp;<br />
<br />
</span></strong><span style="line-height: 18px; font-family: mceinline; ">　　代码：3行-18行。&nbsp;<br />
<br />
仔细观察这段代码：如果循环内部出现了异常，会发生什么事情？我们可以得到足够的信息判断循环内部出错的原因吗？不能。我们只能知道当前正在处理的类发生了某种错误，但却不能获得任何信息判断导致当前错误的原因。&nbsp;<br />
<br />
printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程，但只提供了一些最基本的信息，未能说明实际导致错误的原因，同时也不易解读。&nbsp;<br />
<br />
因此，在出现异常时，最好能够提供一些文字信息，例如当前正在执行的类、方法和其他状态信息，包括以一种更适合阅读的方式整理和组织printStackTrace提供的信息。&nbsp;<br />
<br />
结论四：在异常处理模块中提供适量的错误原因信息，组织错误信息使其易于理解和阅读。&nbsp;<br />
<br />
</span><strong><span style="line-height: 18px; font-family: mceinline; ">反例之五：过于庞大的try块&nbsp;</span></strong><span style="line-height: 18px; font-family: mceinline; "><br />
<br />
代码：3行-14行。&nbsp;<br />
<br />
经常可以看到有人把大量的代码放入单个try块，实际上这不是好习惯。这种现象之所以常见，原因就在于有些人图省事，不愿花时间分析一大块代码中哪几行代码会抛出异常、异常的具体类型是什么。把大量的语句装入单个巨大的try块就象是出门旅游时把所有日常用品塞入一个大箱子，虽然东西是带上了，但要找出来可不容易。&nbsp;<br />
<br />
一些新手常常把大量的代码放入单个try块，然后再在catch语句中声明Exception，而不是分离各个可能出现异常的段落并分别捕获其异常。这种做法为分析程序抛出异常的原因带来了困难，因为一大段代码中有太多的地方可能抛出Exception。&nbsp;<br />
<br />
结论五：尽量减小try块的体积。&nbsp;<br />
<br />
</span><strong><span style="line-height: 18px; font-family: mceinline; ">反例之六：输出数据不完整</span></strong><span style="line-height: 18px; font-family: mceinline; ">&nbsp;<br />
<br />
代码：7行-11行。&nbsp;<br />
<br />
不完整的数据是Java程序的隐形杀手。仔细观察这段代码，考虑一下如果循环的中间抛出了异常，会发生什么事情。循环的执行当然是要被打断的，其次，catch块会执行??就这些，再也没有其他动作了。已经输出的数据怎么办？使用这些数据的人或设备将收到一份不完整的（因而也是错误的）数据，却得不到任何有关这份数据是否完整的提示。对于有些系统来说，数据不完整可能比系统停止运行带来更大的损失。&nbsp;<br />
<br />
较为理想的处置办法是向输出设备写一些信息，声明数据的不完整性；另一种可能有效的办法是，先缓冲要输出的数据，准备好全部数据之后再一次性输出。&nbsp;<br />
<br />
结论六：全面考虑可能出现的异常以及这些异常对执行流程的影响。&nbsp;<br />
<br />
</span><strong><span style="line-height: 18px; font-family: mceinline; ">改写后的代码</span></strong><span style="line-height: 18px; font-family: mceinline; ">&nbsp;<br />
<br />
根据上面的讨论，下面给出改写后的代码。也许有人会说它稍微有点?嗦，但是它有了比较完备的异常处理机制。&nbsp;<br />
<br />
</span></span></p>
<table border="1" align="center" bgcolor="#dadacf" bordercolor="#ffcc66" style="width: 828px; ">
    <tbody>
        <tr>
            <td><span style="font-size: x-small; "><span style="font-family: mceinline; ">OutputStreamWriter out = ...&nbsp;<br />
            java.sql.Connection conn = ...&nbsp;<br />
            try {&nbsp;<br />
            Statement stat = conn.createStatement();&nbsp;<br />
            ResultSet rs = stat.executeQuery(&nbsp;<br />
            "select uid, name from user");&nbsp;<br />
            while (rs.next())&nbsp;<br />
            {&nbsp;<br />
            out.println("ID：" + rs.getString("uid") + "，姓名: " + rs.getString("name"));&nbsp;<br />
            }&nbsp;<br />
            }&nbsp;<br />
            catch(SQLException sqlex)&nbsp;<br />
            {&nbsp;<br />
            out.println("警告：数据不完整");&nbsp;<br />
            throw new ApplicationException("读取数据时出现SQL错误", sqlex);&nbsp;<br />
            }&nbsp;<br />
            catch(IOException ioex)&nbsp;<br />
            {&nbsp;<br />
            throw new ApplicationException("写入数据时出现IO错误", ioex);&nbsp;<br />
            }&nbsp;<br />
            finally&nbsp;<br />
            {&nbsp;<br />
            if (conn != null) {&nbsp;<br />
            try {&nbsp;<br />
            conn.close();&nbsp;<br />
            }&nbsp;<br />
            catch(SQLException sqlex2)&nbsp;<br />
            {&nbsp;<br />
            System.err(this.getClass().getName() + ".mymethod - 不能关闭数据库连接: " + sqlex2.toString());&nbsp;<br />
            }&nbsp;<br />
            }&nbsp;<br />
            <br />
            if (out != null) {&nbsp;<br />
            try {&nbsp;<br />
            out.close();&nbsp;<br />
            }&nbsp;<br />
            catch(IOException ioex2)&nbsp;<br />
            {&nbsp;<br />
            System.err(this.getClass().getName() + ".mymethod - 不能关闭输出文件" + ioex2.toString());&nbsp;<br />
            }&nbsp;<br />
            }&nbsp;<br />
            }</span></span></td>
        </tr>
    </tbody>
</table>
<span style="font-family: mceinline; "><br />
</span><span style="font-size: x-small; "><span style="font-family: mceinline; ">　　本文的结论不是放之四海皆准的教条，有时常识和经验才是最好的老师。如果你对自己的做法没有百分之百的信心，务必加上详细、全面的注释。&nbsp;<br />
<br />
另一方面，不要笑话这些错误，不妨问问你自己是否真地彻底摆脱了这些坏习惯。即使最有经验的程序员偶尔也会误入歧途，原因很简单，因为它们确确实实带来了&#8220;方便&#8221;。所有这些反例都可以看作Java编程世界的恶魔，它们美丽动人，无孔不入，时刻诱惑着你。也许有人会认为这些都属于鸡皮蒜毛的小事，不足挂齿，但请记住：勿以恶小而为之，勿以善小而不为。</span><br />
<br />
<br />
<br />
<br />
<br />
------------------------------------------------------------------下面是一些java异常集-------------------------------------------------------------------------------------------</span>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">算术异常类：ArithmeticExecption</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">空指针异常类：NullPointerException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">类型强制转换异常：ClassCastException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">数组负下标异常：NegativeArrayException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">数组下标越界异常：ArrayIndexOutOfBoundsException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">违背安全原则异常：SecturityException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">文件已结束异常：EOFException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">文件未找到异常：FileNotFoundException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">字符串转换为数字异常：NumberFormatException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
操作数据库异常：SQLException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
输入输出异常：IOException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
方法未找到异常：NoSuchMethodException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.AbstractMethodError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">抽象方法错误。当应用试图调用抽象方法时抛出。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.AssertionError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">断言错。用来指示一个断言失败的情况。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.ClassCircularityError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">类循环依赖错误。在初始化一个类时，若检测到类之间循环依赖则抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.ClassFormatError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">类格式错误。当Java虚拟机试图从一个文件中读取Java类，而检测到该文件的内容不符合类的有效格式时抛出。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.Error</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">错误。是所有错误的基类，用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.ExceptionInInitializerError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">初始化程序错误。当执行一个类的静态初始化程序的过程中，发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.IllegalAccessError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">违法访问错误。当一个应用试图访问、修改某个类的域（Field）或者调用其方法，但是又违反域或方法的可见性声明，则抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.IncompatibleClassChangeError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时，抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下，容易引发该错误。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.InstantiationError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.InternalError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">内部错误。用于指示Java虚拟机发生了内部错误。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.LinkageError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">链接错误。该错误及其所有子类指示某个类依赖于另外一些类，在该类编译之后，被依赖的类改变了其类定义而没有重新编译所有的类，进而引发错误的情况。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.NoClassDefFoundError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类，而找不到该类的定义时抛出该错误。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.NoSuchFieldError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">域不存在错误。当应用试图访问或者修改某类的某个域，而该类的定义中没有该域的定义时抛出该错误。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.NoSuchMethodError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">方法不存在错误。当应用试图调用某类的某个方法，而该类的定义中没有该方法的定义时抛出该错误。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.OutOfMemoryError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.StackOverflowError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.ThreadDeath</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">线程结束。当调用Thread类的stop方法时抛出该错误，用于指示线程结束。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.UnknownError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">未知错误。用于指示Java虚拟机发生了未知严重错误的情况。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.UnsatisfiedLinkError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义时抛出。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.UnsupportedClassVersionError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">不支持的类版本错误。当Java虚拟机试图从读取某个类文件，但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候，抛出该错误。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.VerifyError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">验证错误。当验证器检测到某个类文件中存在内部不兼容或者安全问题时抛出该错误。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.VirtualMachineError</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">虚拟机错误。用于指示虚拟机被破坏或者继续执行操作所需的资源不足的情况。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
java.lang.ArithmeticException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">算术条件异常。譬如：整数除零等。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.ArrayIndexOutOfBoundsException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.ArrayStoreException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">数组存储异常。当向数组中存放非数组声明类型对象时抛出。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.ClassCastException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">类造型异常。假设有类A和B（A不是B的父类或子类），O是A的实例，那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.ClassNotFoundException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">找不到类异常。当应用试图根据字符串形式的类名构造类，而在遍历CLASSPAH之后找不到对应名称的class文件时，抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.CloneNotSupportedException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.EnumConstantNotPresentException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象，但该枚举对象并不包含常量时，抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.Exception</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">根异常。用以描述应用程序希望捕获的情况。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.IllegalAccessException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">违法的访问异常。当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法，而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.IllegalMonitorStateException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象（O）的监控器或者通知其他线程等待该对象（O）的监控器时，抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.IllegalStateException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">违法的状态异常。当在Java环境和应用尚未处于某个方法的合法调用状态，而调用了该方法时，抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.IllegalThreadStateException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">违法的线程状态异常。当县城尚未处于某个方法的合法调用状态，而调用了该方法时，抛出异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.IndexOutOfBoundsException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时，抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.InstantiationException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">实例化异常。当试图通过newInstance()方法创建某个类的实例，而该类是一个抽象类或接口时，抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.InterruptedException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态，而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.NegativeArraySizeException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">数组大小为负值异常。当使用负数大小值创建数组时抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.NoSuchFieldException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">属性不存在异常。当访问某个类的不存在的属性时抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.NoSuchMethodException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">方法不存在异常。当访问某个类的不存在的方法时抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.NullPointerException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">空指针异常。当应用试图在要求使用对象的地方使用了null时，抛出该异常。譬如：调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.NumberFormatException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">数字格式异常。当试图将一个String转换为指定的数字类型，而该字符串确不满足数字类型要求的格式时，抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.RuntimeException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">运行时异常。是所有Java虚拟机正常操作期间可以被抛出的异常的父类。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.SecurityException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">安全异常。由安全管理器抛出，用于指示违反安全情况的异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.StringIndexOutOfBoundsException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">字符串索引越界异常。当使用索引值访问某个字符串中的字符，而该索引值小于0或大于等于序列大小时，抛出该异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.TypeNotPresentException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">类型不存在异常。当应用试图以某个类型名称的字符串表达方式访问该类型，但是根据给定的名称又找不到该类型是抛出该异常。该异常与ClassNotFoundException的区别在于该异常是unchecked（不被检查）异常，而ClassNotFoundException是checked（被检查）异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">java.lang.UnsupportedOperationException</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">不支持的方法异常。指明请求的方法不被支持情况的异常。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">异常<br />
javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login （/Login是你的action名字）&nbsp;&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因<br />
action没有再struts-config.xml 中定义，或没有找到匹配的action，例如在JSP文件中使用 &lt;html:form action="Login.do".将表单提交给Login.do处理，如果出现上述异常，请查看struts-config.xml中的定义部分，有时可能是打错了字符或者是某些不符合规则，可以使用strutsconsole工具来检查。<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
org.apache.jasper.JasperException: Cannot retrieve definition for form bean null</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
这个异常是因为Struts根据struts-config.xml中的mapping没有找到action期望的form bean。大部分的情况可能是因为在form-bean中设置的name属性和action中设置的name属性不匹配所致。换句话说，action和form都应该各自有一个name属性，并且要精确匹配，包括大小写。这个错误当没有name属性和action关联时也会发生，如果没有在action中指定name属性，那么就没有name属性和action相关联。当然当action制作某些控制时，譬如根据参数值跳转到相应的jsp页面，而不是处理表单数据，这是就不用name属性，这也是action的使用方法之一。<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
No action instance for path /xxxx could be created</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因<br />
特别提示：因为有很多中情况会导致这个错误的发生，所以推荐大家调高你的web服务器的日志/调试级别，这样可以从更多的信息中看到潜在的、在试图创建action类时发生的错误，这个action类你已经在struts-config.xml中设置了关联（即添加了&lt;action&gt;标签）。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">在struts-config.xml中通过action标签的class属性指定的action类不能被找到有很多种原因，例如：定位编译后的.class文件失败。Failure to place compiled .class file for the action in the classpath (在web开发中，class的的位置在r WEB-INF/classes，所以你的action class必须要在这个目录下。例如你的action类位于WEB-INF/classes/action/Login.class,那么在struts-config.xml中设置action的属性type时就是action.Login).<br />
拼写错误，这个也时有发生，并且不易找到，特别注意第一个字母的大小写和包的名称。&nbsp;<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因<br />
没有位form bean中的某个变量定义getter 方法</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">这个错误主要发生在表单提交的FormBean中，用struts标记&lt;html:text property=&#8221;username&#8221;&gt;时，在FormBean中必须有一个getUsername()方法。注意字母&#8220;U&#8221;。<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
java.lang.NoClassDefFoundError: org/apache/struts/action/ActionForm</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因<br />
这个错误主要发生在在classpath中找不到相应的Java .class文件。如果这个错误发生在web应用程序的运行时，主要是因为指定的class文件不在web server的classpath中（/WEB-INF/classes 和 /WEB-INF/lib）。在上面的错误中，原因是找不到ActionForm类。<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
javax.servlet.jsp.JspException: Exception creating bean of class org.apache.struts.action.ActionForm: {1}</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因<br />
Instantiating Struts-provided ActionForm class directly instead of instantiating a class derived off ActionForm. This mightoccur implicitly if you specify that a form-bean is this Struts ActionForm class rather than specifying a child of this classfor the form-bean.</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">Not associating an ActionForm-descended class with an action can also lead to this error.<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因<br />
不是标识Struts actionServlet的&lt;servlet&gt;标记就是映射.do扩展名的&lt;sevlet-mapping&gt;标记或者两者都没有在web.xml中声明。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">在struts-config.xml中的打字或者拼写错误也可导致这个异常的发生。例如缺少一个标记的关闭符号/&gt;。最好使用struts console工具检查一下。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">另外，load-on-startup必须在web.xml中声明，这要么是一个空标记，要么指定一个数值，这个数值用来表servlet运行的优先级，数值越大优先级越低。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">还有一个和使用load-on-startup有关的是使用Struts预编译JSP文件时也可能导致这个异常。<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
java.lang.NullPointerException at org.apache.struts.util.RequestUtils.forwardURL(RequestUtils.java:1223)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因<br />
在struts-config.xml中的forward元素缺少path属性。例如应该是如下形式：<br />
&lt;forward name="userhome" path="/user/userhome.jsp"/&gt;<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">Probable Causes<br />
试图在Struts的form标记外使用form的子元素。这常常发生在你在&lt;/html:form&gt;后面使用Struts的html标记。另外要注意可能你不经意使用的无主体的标记，如&lt;html:form &#8230; /&gt;，这样web 服务器解析时就当作一个无主体的标记，随后使用的所有&lt;html&gt;标记都被认为是在这个标记之外的，如又使用了&lt;html:text property=&#8221;id&#8221;&gt;还有就是在使用taglib引入HTML标记库时，你使用的prefix的值不是html。<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
javax.servlet.jsp.JspException: Missing message for key xx.xx.xx</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">Probable Causes<br />
这个key的值对没有在资源文件ApplicationResources.properties中定义。如果你使用eclipse时经常碰到这样的情况，当项目重新编译时，eclipse会自动将classes目录下的资源文件删除。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">资源文件ApplicationResources.properties 不在classpath中应将资源文件放到 WEB-INF/classes 目录下，当然要在struts-config.xml中定义)<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
Cannot find message resources under key org.apache.struts.action.MESSAGE</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因<br />
很显然，这个错误是发生在使用资源文件时，而Struts没有找到资源文件。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">Implicitly trying to use message resources that are not available (such as using empty html:options tag instead of specifyingthe options in its body -- this assumes options are specified in ApplicationResources.properties file)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">XML parser issues -- too many, too few, incorrect/incompatible versions<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
Strange and seemingly random characters in HTML and on screen, but not in original JSP or servlet.</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因<br />
混和使用Struts的html:form标记和标准的HTML标记不正确。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">使用的编码样式在本页中不支持。<br />
-----------------------------------------------------------------------------------------------------------------<br />
异常<br />
"Document contained no data" in Netscape</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">No data rendered (completely empty) page in Microsoft Internet Explorer</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">可能原因<br />
使用一个Action的派生类而没有实现perform()方法或execute()方法。在Struts1.0中实现的是perform()方法，在Struts1.1中实现的是execute()方法，但Struts1.1向后兼容perform()方法。但你使用Struts1.1创建一个Action的派生类，并且实现了execute()方法，而你在Struts1.0中运行的话，就会得到"Document contained nodata" error message in Netscape or a completely empty (no HTML whatsoever) page rendered in Microsoft Internet Explorer.&#8221;的错误信息。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">---------------------------------------------------------------------------------------------------------------------------<br />
异常<br />
ServletException: BeanUtils.populate<br />
解决方案<br />
在用Struts上传文件时,遇到了javax.servlet.ServletException: BeanUtils.populate异常。<br />
我的ActionServlet并没有用到BeanUtils这些工具类。后来仔细检查代码发现是在jsp文件里的form忘了加enctype=&amp;quot;multipart/form-data&amp;quot; 了。所以写程序遇到错误或异常应该从多方面考虑问题存在的可能性，想到系统提示信息以外的东西。<br />
----------------------------------------------------------------------------------------------------------------------------<br />
1. 定义Action后, 如果指定了name, 那么必须要定义一个与它同名的FormBean才能进行form映射.2. 如果定义Action后, 提交页面时出现 "No input attribute for mapping path..." 错误, 则需要在其input属性中定义转向的页面.3. 如果插入新的数据时出现 "Batch update row count wrong:..." 错误, 则说明XXX.hbm.xml中指定的key的类型为原始类型(int, long),因为这种类型会自动分配值, 而这个值往往会让系统认为已经存在该记录, 正确的方法是使用java.lang.Integer或java.lang.Long对象.4. 如果插入数据时出现 "argument type mismatch" 错误, 可能是你使用了Date等特殊对象, 因为struts不能自动从String型转换成Date型,所以, 你需要在Action中手动把String型转换成Date型.5. Hibernate中, Query的iterator()比list()方法快很多.6. 如果出现 "equal symbol expected" 错误, 说明你的strtus标签中包含另一个标签或者变量, 例如:<br />
&lt;html:select property="test" onchange="&lt;%=test%&gt;"/&gt;<br />
或者<br />
&lt;html:hidden property="test" value="&lt;bean:write name="t" property="p"/&gt;"/&gt;<br />
这样的情况...&nbsp;<br />
---------------------------------------------------------------------------------------------------------------------------<br />
错误：Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update原因与解决：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为Hibernate Tools（或者Eclipse本身的Database Explorer）生成*.hbn.xml工具中包含有catalog="***"（*表示数据库名称）这样的属性,将该属性删除就可以了<br />
---------------------------------------------------------------------------------------------------------------------------<br />
错误：org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)<br />
原因与解决：<br />
方法1 删除Set方的cascade<br />
方法2 解决关联关系后，再删除<br />
方法3 在many-to-one方增加cascade 但值不能是none<br />
最后一招：<br />
检查一下hashCode equals是否使用了id作为唯一标示的选项了；我用uuid.hex时是没有问题的；但是用了native，就不行了，怎么办？删除啊！<br />
----------------------------------------------------------------------------------------------------------------------------<br />
问题：今天用Tomcat 5.5.12，发现原来很好用的系统不能用了，反复测试发现页面中不能包含 taglib，否则会出现以下提示：HTTP Status 500 -type Exception reportMessage description The server encountered an internal error () that prevented it from fulfilling this request.exceptionorg.apache.jasper.JasperException: /index.jsp(1,1) Unable to read TLD "META-INF/tlds/struts-bean.tld" from JAR file"file:*****/WEB-INF/lib/struts.jar":原因：更新了工程用的lib文件夹下的jar，发布时也发布了servlet.jar和jsp-api.jar。解决：把jsp-api.jar删除就解决这个问题了。-----------------------------------------------------------------------------------------------------------------------------<br />
错误： java.lang.NullPointerException<br />
原因： 发现 dao 实例、 manage 实例等需要注入的东西没有被注入（俗称空指针异常）解决：这个时候，你应该查看日志文件；默认是应用服务器的 log 文件，比如 Tomcat 就是 [Tomcat 安装目录 ]/logs ；你会发现提示你：可能是：org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sf' defined in ServletContextresource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception isorg.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xmlorg.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xml&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.Caused by: java.io.FileNotFoundException: src\hibernate.cfg.xml可能是：org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined inServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception isorg.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not foundorg.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not found然后你就知道原因是因为配置文件的解析出了错误，这个通过 Web 页面是看不出来的。更多的是持久化影射文件出的错误；导致了没有被解析；当然你需要的功能就无法使用了。<br />
----------------------------------------------------------------------------------------------------------------------------<br />
错误：StandardWrapperValve[action]: Servlet.service() for servlet action threw exception<br />
javax.servlet.jsp.JspException: Cannot retrieve mapping for action /settlementTypeManage<br />
或者：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type Status report&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message Servlet action is not available&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; description The requested resource (Servlet action is not available) is not available.<br />
原因： 同 上<br />
----------------------------------------------------------------------------------------------------------------------------<br />
错误StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exceptionjava.lang.ClassNotFoundException: org.apache.struts.taglib.bean.CookieTei界面错误具体描述：<br />
org.apache.jasper.JasperException: Failed to load or instantiate TagExtraInfo class: org.apache.struts.taglib.bean.CookieTei<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原因与解决：&nbsp;&nbsp;&nbsp; &lt;方案一&gt;你的&#8220;html:&#8221;开头的标签没有放在一个&lt;html:form&gt;中&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;方案二&gt;重新启动你的应用服务器，自动就没有这个问题</p>
</span>
<img src ="http://www.blogjava.net/AntiquMan/aggbug/290499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AntiquMan/" target="_blank">AntiquMan</a> 2009-08-10 10:32 <a href="http://www.blogjava.net/AntiquMan/archive/2009/08/10/290499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SUSE Linux操作系统搭建Java开发环境</title><link>http://www.blogjava.net/AntiquMan/archive/2009/08/10/290496.html</link><dc:creator>AntiquMan</dc:creator><author>AntiquMan</author><pubDate>Mon, 10 Aug 2009 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/AntiquMan/archive/2009/08/10/290496.html</guid><wfw:comment>http://www.blogjava.net/AntiquMan/comments/290496.html</wfw:comment><comments>http://www.blogjava.net/AntiquMan/archive/2009/08/10/290496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AntiquMan/comments/commentRss/290496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AntiquMan/services/trackbacks/290496.html</trackback:ping><description><![CDATA[<span  style="color: #444444; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp; &nbsp; 1.JDK.这个不必说(我的是1.6.0_03)<br />
2.改变安装文件权限。在终端中用cd命令把当前目录转移到jdk-6u3--i586-rpm.bin所在目录，用ls -l命令查看文件权限，如果是可执行x(eXecute)则不需要更改，否则用命令 chmod 755 jdk-6u3--i586-rpm.bin，使自解压包文件可执行<br />
3.安装。在终端输入。/jdk-6u3-Linux-i586-rpm.bin，按提示一步步执行即可。<br />
4.更改环境变量。刚才安装的版本默认在/usr/Java/jdk1.6.0_03，我们把它加到环境变量。用cd命令转移到etc目录，输入gedit profile，在profile在后三行<br />
#<br />
# End of /etc/profile<br />
#<br />
上面添加如下文本：<br />
export JAVA_HOME=/usr/java/jdk1.6.0_03<br />
export CLASSPATH=.：$JAVA_HOME/jre/lib：$JAVA_HOME/lib/tools.jar<br />
export JRE_HOME=$JAVA_HOME/jre<br />
5.重新启动系统，在终端输入java -version，显示内容：<br />
java version "1.6.0_03"<br />
(TM) SE Runtime Environment (build 1.6.0_03-b05)<br />
HotSpot(TM) Client VM (build 1.6.0_03-b05， mixed mode， sharing)<br />
说明环境变量设置成功。</span>
<img src ="http://www.blogjava.net/AntiquMan/aggbug/290496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AntiquMan/" target="_blank">AntiquMan</a> 2009-08-10 10:22 <a href="http://www.blogjava.net/AntiquMan/archive/2009/08/10/290496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse的SVN插件subclipse</title><link>http://www.blogjava.net/AntiquMan/archive/2009/06/02/279547.html</link><dc:creator>AntiquMan</dc:creator><author>AntiquMan</author><pubDate>Tue, 02 Jun 2009 04:44:00 GMT</pubDate><guid>http://www.blogjava.net/AntiquMan/archive/2009/06/02/279547.html</guid><wfw:comment>http://www.blogjava.net/AntiquMan/comments/279547.html</wfw:comment><comments>http://www.blogjava.net/AntiquMan/archive/2009/06/02/279547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AntiquMan/comments/commentRss/279547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AntiquMan/services/trackbacks/279547.html</trackback:ping><description><![CDATA[http://subclipse.tigris.org/update_1.6.x
<img src ="http://www.blogjava.net/AntiquMan/aggbug/279547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AntiquMan/" target="_blank">AntiquMan</a> 2009-06-02 12:44 <a href="http://www.blogjava.net/AntiquMan/archive/2009/06/02/279547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>