ssh开发问题总结归纳.docx

上传人:b****6 文档编号:6167036 上传时间:2023-01-04 格式:DOCX 页数:36 大小:309.75KB
下载 相关 举报
ssh开发问题总结归纳.docx_第1页
第1页 / 共36页
ssh开发问题总结归纳.docx_第2页
第2页 / 共36页
ssh开发问题总结归纳.docx_第3页
第3页 / 共36页
ssh开发问题总结归纳.docx_第4页
第4页 / 共36页
ssh开发问题总结归纳.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

ssh开发问题总结归纳.docx

《ssh开发问题总结归纳.docx》由会员分享,可在线阅读,更多相关《ssh开发问题总结归纳.docx(36页珍藏版)》请在冰豆网上搜索。

ssh开发问题总结归纳.docx

ssh开发问题总结归纳

Struts专区:

1

Struts2.1.61

Struts异常处理区:

2

UnabletoinstantiateAction错误的解决3

Hibernate专区:

3

hibernate3.3.1:

3

Hibernate所用15个jar包:

4

Unknowncolumn'rownum'in'whereclause'解决方案4

Spring专区:

6

spring2.5.66

spring所用的5个jar:

7

SSH专区:

12

SSHjar冲突问题解决方案13

3.ssh整合找不到action15

SSH整合抛异常:

16

struts2必须JAR包(6个):

18

hibernate3.2必须JAR包(8个):

18

eclipse/myeclipse/SpringToolSuite奇怪的问题收集18

当当专区:

19

(二)NoDialectmappingforJDBCtype:

321

关于NoDialectmappingforJDBCtype:

-9hibernate执行原生sql语句问题22

%%%%ErrorCreatingSessionFactory%%%%27

Struts专区:

Struts2.1.6

lib\xwork-2.1.2.jar

lib\struts2-core-2.1.6.jar

lib\struts2-convention-plugin-2.1.6.jar

lib\ognl-2.6.11.jar

lib\freemarker-2.3.13.jar

lib\commons-loggin-1.0.4.jar---该包在上面的spring里已经导了lib\commons-fileupload-1.2.1.jarlib\struts2-spring-plugin-2.1.6.jar

Struts异常处理区:

struts2+json包冲突问题

在用strtus2的json插件读取数据时,出现了包冲突的问题,搞了老半天才解决,

严重:

Servlet.service()forservletdefaultthrewexception

java.lang.NoClassDefFoundError:

com/opensymphony/xwork2/util/TextUtils

atcom.googlecode.jsonplugin.JSONUtil.writeJSONToResponse(JSONUtil.java:

197)

atcom.googlecode.jsonplugin.JSONResult.writeToResponse(JSONResult.java:

192)

atcom.googlecode.jsonplugin.JSONResult.execute(JSONResult.java:

182)

我看了下xwork-core-2.1.6.jar下是没有com.opensymphony.xwork2.util.TextUtils这个类的,只有struts2.0的xwork才有,可是我的工程师struts2.1的,直接把以前的xwork2包弄进来是会报错的。

XX看了下大概原因就是jar包不兼容。

在struts2的官方上面说struts2.1.x要配合jsonplugin-0.33.jar使用

struts2.0.x配合jsonplugin-0.32.jar

我用的是struts2.1.8和jsonplugin-0.33.jar但是还是出现上面那个错误,后来经过高人的指点终于解决了这个问题解决方案:

将jsonplugin-0.33.jar替换成json-lib-2.1.jar、struts2-json-plugin-2.1.8.1.jar、struts2-junit-plugin-2.1.8.1.jar使用这三个包就不会出现冲突了

java.lang.NoSuchMethodError:

com.opensymphony.xwork2.util.ValueStack.findValue

java.lang.NoSuchMethodError:

com.opensymphony.xwork2.util.ValueStack.findValue(Ljava/lang/String;Z)Ljava/lang/Object;

jar包冲突,搜索有两个jar包含ValueStack这个类,极有可能是xwork-2.1.1.jar系列的包,你引入了多个。

struts2-core-2.1.8.1.jar,而xwork-core用xwork-2.1.2.jar。

有可能不兼容。

建议你用struts2-core-2.1.8.jar和xwork-core-2.1.6.jar的

把的xwork-2.1.2.jar换成xwork-core-2.1.6.jar就OK了!

Request[/B201]doesnotcontainhandlerparameternamed'action'.Thismaybecausedbywhitespaceinthelabeltext

解决:

在jsp页面的表单中,加入

java.lang.ClassNotFoundException:

mons.lang.xwork.StringUtils

解决方案:

下载个xwork-core-2.1.6.jar

这个包里面有,我也出现了这个问题,我之前的包时xwork-core-2.3.jar的

xwork-core-2.3.jar里面居然没有mons.lang.xwork.stringutils这个类,不过

xwork-core-2.1.6.jar里面就有了

今天在Struts2框架下使用JSON插件时,程序保存找不到类org/apache/commons/lang/xwork

/StringUtils,我很奇怪,commons-lang包明明导入了,却又发现commons-lang包中根本没有xwork子包,几经周折终

于找到了原因:

我没有导入xwork-core这个jar包。

呵呵,问题解决了。

UnabletoinstantiateAction错误的解决

UnabletoinstantiateAction,....action.CertAction,definedfor'...'innamespace'/...'null

原因是变量定义:

privateUserUtiluserUtil=(UserUtil)ServletActionContext.getContext().getSession().get("userUtil");

关键是这里,这个uerUtil成员变量使用了action的上下文"ServletActionContext.getContext()".

了解webwork中ServletDispatcher原理的人可能知道原因了,因为ServletDispatcher接受客户端的HTTP请求,将JavaServlet的很多相关对象进行包装,再传给我们的XWork框架,由我们的XWork框架去解析我们的xwork.xml配置文件,根据配置文件的信息,创建对应的Action,组装并调用相应的拦截器,执行Action,返回执行结果。

因此每次客户端的请求都将调用ServletDispatcher的service()方法,

该方法执行顺序如下:

1、通过request请求取得action的命名空间

2、根据servlet请求的Path,解析出要调用该请求的Action的名字(actionName)

3、创建Action上下文(extraContext)

4、根据前面获得的namespace、actionName、extraContext,创建一个ActonProxy

5、执行proxy的execute()方法,根据Action执行返回的值去调用执行相应的Result(返回结果处理)的方法。

现在应该能明白,原来是Action对象实例在ActionContext对象实例之前创建的,所有这样取得ActionContext容器对象就有可能会返回null.

因此解决次问题方法很简单,就是最好不要在成员变量或者是构造方法里调用ActionContext,而把它放在其它方法里.

struts2的执行原理是当一个request请求过来之后struts2拦截器根据其配置文件的解析然后再初始化并执行不同的java类,而之所以会出现上面的问题则是因为在初始化java类的时候在java类里面初始化了ActionContext的的一些对象,所以不要再java类里面去初始化一些struts2的类

一般则是在定义全局变量时定义生成了一些ActionContext的对象之类的,呵呵

因此解决次问题方法很简单,就是最好不要在成员变量或者是构造方法里调用ActionContext,而把它放在其它方法里.

Hibernate专区:

hibernate3.3.1:

在解压缩的hibernate-distribution-3.3.1.GA目录中,把hibernate.jar,和\lib\required\下的所用jar包引进到我们项目的lib目录下。

不知道用过Hibernate3.3开发的朋友会不会遇到过这样的问题:

把上面的包都准备好的,开发Hibernate测试类时,会报Causedby:

java.lang.NoClassDefFoundError:

org/slf4j/impl/StaticLoggerBinder或者Causedby:

java.lang.NoClassDefFoundError:

org/apache/log4j/LogManager的错误。

这是因为Hibernate3.3提供的jar包,缺少了slf4j-log4j12.jar这个包。

解决办法是:

在Hibernate的官方网站上下载hibernate-annotations-3.4.0.GA.zip,解压缩,把其\lib\下的slf4j-log4j12.jar引进我们项目的lib目录下。

而我们引进这个jar包后,若我们没有引进log4j.ar的话,就会报java.lang.NoClassDefFoundError:

org/apache/log4j/LogManager的错误,可能是slf4j-log4j12.jar要用调用log4j的类吧。

我们也引进log4j.jar即行。

当然,hibernate-annotations-3.4.0.GA.zip是我们开发HibernateAnnotation所要用到的,除以上面那些jar包外,我们还要引进其hibernate-annotations.jar,及其\lib\下的hibernate-commons-annotations.jar,ejb3-persistence.jar。

Hibernate所用15个jar包:

Hbernate3.jar--------核心包

antlr.jar--------------语言转换工具,hibernate用他将hql语句转换为sql语句dom4j.jar----------------解析xml文档的工具

ehcahe.jar-------------缓存工具,如没提供其它缓存,默认使用他

jta.jar-----------标准的JTAAPI(JTA即java事物API,JTA事务比JDBC事务更强大。

一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接),有朋友说这个包可以不要,不过没测试,反正加这个没错,所以就没删除了。

cglib.jar----高效的代码生成工具,Hibernate用它在运行时扩展Java类和实现Java接口

asm.jar-----ASM字节码库,使用“cglib”则必要

asm-attrs.jar----------ASM字节码库,使用“cglib”则必要commons-collections-2.1.1.jar-----Apache的工具集,集合类,用来增强Java对集合的处理能力。

jaxen-1.1-beta-7.jar----用dom的方式解析工程中xml文件,如果想提高启动性能则去使用(可选)

commons-logging.jar---------------日志工具

log4j1.2.11.jar----------log4j库,Apache的日志工具

commons-pool.jar,commons-dbcp.jar--------DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat4的连接池也是DBCP。

(可选)

xml-apis.jar------------------------------解析xml。

Unknowncolumn'rownum'in'whereclause'解决方案

在当当网struts+hibernate版本项目中,做“最新上架前几个产品时”,代码如下:

publicListfindByAddTime(intsize)throwsException{

//获取最新上架的前size个产品

Stringhql="fromProductwherehasDeleted=0orderbyaddTimedesc";

Queryquery=getSession().createQuery(hql);

query.setFirstResult(0);

query.setMaxResults(size);

Listproducts=query.list();

returnproducts;

}

出现主要错误信息:

WARN-SQLError:

1054,SQLState:

42S22

ERROR-Unknowncolumn'hasDeleted'in'whereclause'

Exceptioninthread"main"org.hibernate.exception.SQLGrammarException:

couldnotexecutequery

查询google与baidu解决方案:

Stringhql="fromProductorderbyaddTimedescwherehasDeleted=0";

运行代码:

publicstaticvoidmain(String[]args)throwsException{

ProductDAOImplp=newProductDAOImpl();

Listl=p.findByAddTime(5);

System.out.println(l.size());

}

再次报错:

WARN-SQLError:

1054,SQLState:

42S22

ERROR-Unknowncolumn'addTime'in'orderclause'

Exceptioninthread"main"org.hibernate.exception.SQLGrammarException:

couldnotexecutequery

再次检查,更改代码:

Stringhql="fromProductorderby'addTime'descwherehasDeleted=0";

正确运行,得到l.size()为0,不正常。

再次更改代码如,在hibernate使用sql语句执行,代码如:

Stringsql="select*fromd_productwherehas_deleted=0orderbyadd_timedesc";

Queryquery=getSession().createSQLQuery(sql);

执行结果正常输出。

成功。

参考数据:

(一)

Unknowncolumn'rownum'in'whereclause',当在嵌套的查询语句里面用到rownum的时候会遇到这个问题,比如:

SELECT*FROM(selectt.id,t.namefromUSER_INFOtwheret.status=0orderbyt.EMP_IDdesc)_queryForTopwhererownum<=10;

这条sql语句查询的时候就会遇到Unknowncolumn'rownum'in'whereclause'这个错误。

看了下mysql官方的解释,发现在嵌套的查询语句中,当用到where的时候,数据的条数可能还没有被决定,rownum这是根本都还没出来。

所以会报错。

有遇到这个问题的兄弟们,只能改一改你们的sql语句咯。

mysql官方的链接如下:

原来的那段文字如下:

StandardSQLdisallowsreferencestocolumnaliases(别名)inaWHEREclause(子句).ThisrestrictionisimposedbecausewhentheWHEREclauseisevaluated,thecolumnvaluemaynotyethavebeendetermined.

(二)

mysql+hibernate写HQL语句时报错unknowncolumn‘XXX’inwhereclause

单从字面上是列名不存在,但是实际上却是因为少写了单引号而引起的,例如:

(其中id是用uuid生成,对应是string类型)Listlist2=session.createQuery(

"fromUserwhereid='"+"ff8080812d9f1104012d9f11053a0001"+"'").list();则会报一下错误Causedby:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:

Unknowncolumn'ff8080812d9f1104012d9f11053a0001'in'whereclause'修改HQL如下Listlist2=session.createQuery(""+

"fromUserwhereid="+"ff8080812d9f1104012d9f11053a0001").list();成功运行

异常如图:

解决方案:

少Jar包:

Spring专区:

spring2.5.6

spring所需要的包:

spring.jar

lib\jakarta-commons\commons-logging.jar、

commons-dbcp.jar、commons-pool.jar

lib\aspectj\aspectjweaver.jar、aspectjrt.jar

lib\cglib\cglib-nodep-2.1_3.jar

lib\j2ee\common-annotations.jar

lib\log4j\log4j-1.2.15.jar---该包在上面的hibernate里已经导了

---------------------------SPRING详解------------------------------

1.spring.jar是包含有完整发布模块的单个jar包。

2.org.springframework.aop包含在应用中使用Spring的AOP特性时所需的类。

3.org.springframework.asmSpring独立的asm程序,Spring2.5.6的时候需要asmJar包,3.0开始提供他自己独立的asmJar。

4.org.springframework.aspects提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中,比如EclipseAJDT。

5.org.springframework.beans所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行InversionofControl/DependencyInjection(IoC/DI)操作相关的所有类。

6.org.springframework.context.support包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(JavaMail、COSMail)、任务计划Scheduling(Timer、Quartz)方面的类。

7.org.springframework.context为Spring核心提供了大量扩展。

可以找到使用SpringApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。

8.org.springframework.core包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心。

9.org.springframework.expressionSpring表达式语言。

10.org.springframework.instrument.tomcatSpring3.0对Tomcat的连接池的集成。

11.org.springframework.instrumentSpring3.0对服务器的代理接口。

12.org.springframework.jdbc包含对Spring对JDBC数据访问进行封装的所有类。

13.org.springframework.jms提供了对JMS1.0.2/1.1的支持类。

14.org.springframework.orm包含Spring对DAO特性集进行了扩展,使其支持iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。

这个jar文件里大部分的类都要依赖spring-dao.jar里的类,用这个包时你需要同时包含spring-dao.jar包。

15.org.springframework.oxmSpring对Object/XMl的映射支持,可以让Java与XML之间来回切换。

16.org.springframework.test对Junit等测试框架的简单封装。

17.org.springframework.transaction为JDBC、Hibernat

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1