SSH配置详细步骤及异常处理
该文章详细介绍了SSH的配置步骤与工程代码。
配置步骤见:http://blog.csdn.net/sipsir/archive/2009/10/23/4721526.aspx
代码下载:http://sipsir.download.csdn.net/
本文word格式:http://download.csdn.net/source/1764763
1 环境介绍
Jdk:1.5s
服务器:tomcat5.5
开发工具:myeclipse 6.5 ga
数据库工具:oracle 10g(确定有class12.jar或带有oracle驱动的jar包)
开发技术:Spring2.0,struts1.3,hibernate3.1,jsp
好了,进行SSH的开发。
2 新建web project
新建web项目(使用j2ee 5.0),项目名称为guestbook2,如图:
(图一)
第二步:为项目创建一个文件夹lib(用来将来存放相应的jar包,在添加相应的SSH支持后,要把lib里面的jar通过configure build-path—add jar的方式将其加入),
--可以采用系统默认的lib库位置,目录为WebRoot/WEB-INF/lib(Add by Michael)
如图:
(图二)
3 配置MyEclipse数据库(Add by Michael)
打开Hibernate视图
new一个
配置数据库,其中要手动指定Class12.jar的目录,如下图
4 添加hibernate支持
第1步:为项目添加hibernate 支持,如图:
(图三)
如 下图,我们添加hibernate3.1的核心库而且采用:copy checked library jars to project folder and add to build-path 的方式把包添加至我们刚刚新建的lib文件夹处。完成后,点击”next”.
hibe
接着,他会询问是否创建hibernate的配置文件:hibernate.cfg.xml,我们不需要发动,直接点”next”。
我们需要配置项目中要应用的数据库的配置信息:
在 上图中,我使用了名为DB Driver 为Linkoracle10g的连接方式(可使用myeclipse的myeclipse database explorer方式来创建与oracle10g的连接),相应地,myeclipse会使项目具有与oracle数据库连接的能力了。
接着点”next”,会看见如下图:
默 认是挑选了“create SessionFactory class”的,在这里,它想为我们创建一个sessionfactory的类,但我们不创建sessionfactory,因为我将来使用spring 来完成这步操作,使用spring ,可以帮助我们可以生成一个能获得hibernate session对象的一个类。
点击”finish”完成的hibernate的支持。
5 添加Spring支持
第1步:为项目添加Spring 支持,如图:
在这里,我使用spring2.0的支持,把相应的四个选项选中:
第四个为:
--选择了spring2.0,如何选择sping2.5的jar?实际情况是我没有选择spring2.5也能完成这个测试(Add by Michael)
而且,我们采用:copy checked library jars to project folder and add to build-path 的方式把包添加至我们刚刚新建的lib文件夹处。完成后,如图:
完成后,点击”next”.会看到如下图:(Myeclipse会为我们创建spring的配置文件,我们确定创建)
点击”next”.进入下一步。这时会看到,如图:
在上图中,他会创建一个能获得hibernate session 对象的一个sessionFactory 类型的对象,他被设置在了applicationContext.xml文件中。
点击“finish”,完成Spring 的支持了。
备注:打开applicationContext.xml文件,源码如下: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation" value="classpath:hibernate.cfg.xml"> </property> </bean> </beans> |
在 这里,我们发现设置了一个id为sessionFactory类型的一个对象,他的类型是 org.springframework.orm.hibernate3.LocalSessionFactoryBean,当中还有属性 configLocation,value="classpath:hibernate.cfg.xml,这些配置信息呢。实际上可以这样理解:
设 定了一个id为sessionFactory 类型的对象,它的类型是:org.springframework.orm.hibernate3.LocalSessionFactoryBean的, 通过这个对象就能获取hibernate 的session 对象,进行完成对数据的添加、删除、修改的操作。也就是说这个对象是spring 帮我们提供的一个支持.
6 开发持久层的这些类和接口
6.1 oracle表SQL
增加了hibernate ,spring的支持后,我们就可以开发持久层的这些类和接口了。首先,我们的项目要用到了guestbook、admin两个表,所以要使用oracle来创建这两个表,表的创建的sql提供给大家,如下所示:
create table ADMIN
(
ID NUMBER not null,
USERNAME VARCHAR2(20),
PASSWORD VARCHAR2(20)
);
alter table ADMIN add constraint ADMIN_PK primary key (ID);
create table GUESTBOOK
(
ID NUMBER not null,
NAME VARCHAR2(40),
EMAIL VARCHAR2(60),
URL VARCHAR2(60),
TITLE VARCHAR2(200),
CONTENT VARCHAR2(2000),
TIME VARCHAR2(40)
);
alter table GUESTBOOK add constraint GBOOK_PK primary key (ID);
insert into ADMIN (ID, USERNAME, PASSWORD)
values (1, 'liuwei', '123456');
commit;
insert into GUESTBOOK (ID, NAME, EMAIL, URL, TITLE, CONTENT, TIME)
values (100026, '刘伟', 'liuwei8809@163.com', 'http://www.v512.com', '欢迎大家观看我的视频', '感谢大家对我们的支持,请持续关注我们的网站。更多内容,更多视频,尽在www.v512.com。', '2007-16-14 02:12:51');
insert into GUESTBOOK (ID, NAME, EMAIL, URL, TITLE, CONTENT, TIME)
values (1000072, '开发工具与软件', null, 'http://news.sina.com.cn', '我们爱大家', '开发工具与软件开发工具与软件开发工具与软件开发工具与软件,我们爱大家我们爱大家我们爱大家我们爱大家我们爱大家我们爱大家我们爱大家我们爱大家我们 爱大家。', '2007-42-20 01:12:17');
insert into GUESTBOOK (ID, NAME, EMAIL, URL, TITLE, CONTENT, TIME)
values (1000074, '开发工具与软件', 'liuwei@v512.com', 'http://news.sina.com.cn', '我们爱大家', '开发工具与软件开发工具与软件开发工具与软件开发工具与软件,我们爱大家我们爱大家我们爱大家我们爱大家我们爱大家我们爱大家我们爱大家我们爱大家我们 爱大家。', '2007-50-20 02:12:52');
commit;
而且还应该在oracle10g中创建名为gb_seq的序列,sql语句为:(有问题,在哪里创建sequence的?)
我只用了一个创建sequence的SQL,如下:
create sequence GB_SEQ
minvalue 1
maxvalue 99999999
start with 1
increment by 1
cache 20;
以下是原作者关于sequence的sql,我都没有使用因为不知道在哪里create。
-- Alter sequence
alter sequence gb_seq
nominvalue
nomaxvalue
nocache;
-- Modify the last number
alter sequence gb_seq increment by -20 nocache;
select gb_seq.nextval from dual;
alter sequence gb_seq increment by 1 nocache;
declare
LastValue integer;
begin
loop
select gb_seq.currval into LastValue from dual;
exit when LastValue >= 100000 - 1;
select gb_seq.nextval into LastValue from dual;
end loop;
end;
/
alter sequence gb_seq increment by 1 nocache;
(备注:在创建数据库的表时,我是使用了PLSQLDeveloper工具来创建的,这样更方便快捷些,要使用这个工具,请自行下载。)
好了,接着做下去。
6.2 生成Admin,guestbook表model
首先,我们打开myeclipse database explorer 视图,在这里,我们进行逆向工程的操作,如图:
这样就打开了逆向工程的操作的界面了。
接着,我们会看到如下的操作界面,如图:
使用如上图的设置,com.v512.guestbook.model存放的是映射文件和相应的实体类(POJO),再点击”next”.
这时,会出现操作界面,如下图:
在这一步,他设置了主键的生成方式,我使用了native,其它不用改变。最后点击”finish”.
同理,添加guestbook表。(add by Michael)
再查看目录结构,会显示如下的目录结构,如图:
里面针对两个表生成了相应的.hbm.xml的映射文件和相应的两个类。查看hibernate.cfg.xml,其源码如下:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="connection.username">scott</property>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:ora10g
</property>
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<property name="myeclipse.connection.profile">
Linkoracle10g
</property>
<property name="connection.password">tiger</property>
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<mapping resource="com/v512/guestbook/model/Admin.hbm.xml" />
<mapping resource="com/v512/guestbook/model/Guestbook.hbm.xml" />
</session-factory>
</hibernate-configuration>
执行上面的操作后,接着往下做。呵呵。
6.3 数据库接口
6.3.1 GuestbookDao接口
我们为项目新建一个包,包名称为:com.v512.guestbook.dao,它用来存放对底层数据库进行的操作的一系列接口。接着在包中新建一个接口,名为:GuestbookDao,如图:
在接口中,我们定义了几个方法,如下:
package com.v512.guestbook.dao;
import java.util.*;
import com.v512.guestbook.model.Guestbook;
//DAO指的是能对底层数据训进行怎样的操作,通常是增删改查的操作
public interface GuestbookDao {
public void save(Guestbook g);
public void delete(Long id);
public List getGuestbooks();
public Guestbook getGuestbook(Long id);
}
6.3.2 GuestbookDao接口的实现类GuestbookDaoHibernate
紧接着我们创建一个包,包名为:com.v512.guestbook.dao.hibernate,这个包存放的是实现了上面定义的dao接口的类,而这些类当中都是通过使用Hibernate 的技术来执行相应的操作的。
在该包中,我创建了一个类,类的名称为:GuestbookDaoHibernate,它要实现上面定义的GuestbookDao接口,并且继承于HibernateDaoSupport.类的完整的源码是:
package com.v512.guestbook.dao.hibernate;
//这个包存放的实现了dao接口的一些类,而这些类都是通过Hibernate的技术来执行相应的操作
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.v512.guestbook.dao.GuestbookDao;
import com.v512.guestbook.model.Guestbook;
public class GuestbookDaoHibernate extends HibernateDaoSupport implements GuestbookDao {
public void delete(Long id) {
this.getHibernateTemplate().delete(getGuestbook(id));
}
public Guestbook getGuestbook(Long id) {
return (Guestbook)getHibernateTemplate().get(com.v512.guestbook.model.Guestbook.class, id);
}
public List getGuestbooks() {
return getHibernateTemplate().find("from Guestbook order by id desc");
}
public void save(Guestbook g) {
getHibernateTemplate().saveOrUpdate(g);
}
}
6.3.3 GuestbookManager接口
在上面操作完成后,我们开始编写服务层的接口和相应的接口实现类(可以理解为spring层)。
我们新建一个包,包的名称为com.v512.guestbook.service,接着我们在该包中定义了一个接口。完整的源如下:
package com.v512.guestbook.service;
import java.util.List;
import com.v512.guestbook.model.Guestbook;
public interface GuestbookManager {
public void save(Guestbook g);
public void delete(String id);
public Guestbook getGuestbook(String id);
public List getGuestbooks();
}
6.3.4 GuestbookManager接口的实现类GuestbookManagerImpl
到了这里,我们新建一个包,包名称为:com.v512.guestbook.service.impl,在包中,我定义了上面GuestbookManager的实现类,完整的源码如下:
package com.v512.guestbook.service.impl;
import java.util.List;
import com.v512.guestbook.dao.GuestbookDao;
import com.v512.guestbook.model.Guestbook;
import com.v512.guestbook.service.GuestbookManager;
public class GuestbookManagerImpl implements GuestbookManager {
private GuestbookDao dao;
public void setGuestbookDao(GuestbookDao dao) {
this.dao = dao;
}
public void delete(String id) {
dao.delete(new Long(id));
}
public Guestbook getGuestbook(String id) {
return dao.getGuestbook(new Long(id));
}
public List getGuestbooks() {
return dao.getGuestbooks();
}
public void save(Guestbook g) {
dao.save(g);
}
}
6.3.5 AdminDao接口
执行类似的操作,我们在com.v512.guestbook.dao中定义AdminDao的接口,代码如下:
package com.v512.guestbook.dao;
public interface AdminDao {
public boolean validate(String username,String password);
}
6.3.6 AdminDao接口的实现类AdminDaoHibernate
再创建AdminDao的实现类,类名称为AdminDaoHibernate,把它放置在com.v512.guestbook.dao.hibernate包中,完整的源码是:
package com.v512.guestbook.dao.hibernate;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.v512.guestbook.dao.AdminDao;
public class AdminDaoHibernate extends HibernateDaoSupport implements AdminDao {
public boolean validate(String username, String password) {
String param[]={username,password};
List list =getHibernateTemplate().find("from Admin where username=? and password=?",param);
return list.size()>0;
}
}
在上面操作完成后,我们开始编写服务层的接口和相应的接口实现类(可以理解为spring层)。
6.3.7 AdminManager接口
我们新建一个包,包的名称为com.v512.guestbook.service,接着我们在该包中定义了一个接口。完整的源如下:
package com.v512.guestbook.service;
public interface AdminManager{
public boolean validate(String username,String password);
}
6.3.8 AdminManager接口的实现类
到了这里,我们新建一个包,包名称为:com.v512.guestbook.service.impl,在包中,我定义了上面AdminManager的实现类,完整的源码如下:
package com.v512.guestbook.service.impl;
import com.v512.guestbook.dao.AdminDao;
import com.v512.guestbook.service.AdminManager;
public class AdminManagerImpl implements AdminManager {
private AdminDao dao;
public void setAdminDao(AdminDao dao){
this.dao=dao;
}
public boolean validate(String username, String password) {
return dao.validate(username, password);
}
}
6.4 在spring的配置文件配置数据源,舍弃hibernate.cfg.xml
紧 接着,我们在执行完上面的操作后,我们去修改项目当中的配置文件。在applicationContext.xml中,我想把Hibernate 的配置信息也设置到applicationContext.xml 文件中去,这样的话,hibernate.cfg.xml文件就不需要了.
首先,打开applicationContext.xml,右键,我在当中创建一个dataSource的bean,如图:
接着会弹出这样一个操作界面,如图:
设置后,applicationContext.xml中便新增了名为dataSourece的bean。如图:
注 意:这里会提示错误,因为project里没有commons-dbcp.jar把导致。到D:/MyEclipse 6.5/myeclipse/eclipse/plugins 的目录下搜索, copy到project lib目录下,再加到project的build path(add by Michael)
在增加了DataSource bean的设置后,再增加两个bean的设置,右键,在“Spring”---"New Bean" ,我们添加了guestbookDao和guestbookManager 两个bean,如图,
在上图中,要注意三点:
1)Bean id 指的是bean 的id;
2)Bean class :选择
的”Browse”按钮,选择GuestbookDaoHibernate.
3)最重要的就是:Properties
在上图,表示guestbookDao要依赖注射一个sessionFactory的一个对象,添加玩后,如下图
(guestbookManager, adminDao, adminManager的添加与上类同,不再赘述。同理他也依赖于guestbookManager 依赖于(ref) guestbookDao;
adminDao 依赖于(ref) sessionFactory;
adminManager 依赖于(ref) adminDao;)。(add by Michael)
现在呢,我们想不再使用Hibernat.cfg.xml文件 ,这里,要修改一下这个applicationContext.xml文件。完整的applicationContext.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 设定了一个id为sessionFactory 类型的对象,它的类型是:org.springframework.orm.hibernate3.LocalSessionFactoryBean的, 通过这个对象就能获取hibernate 的session 对象,进行完成对数据的添加、删除、修改的操作。也就是说这个对象是spring 帮我们提供的一个支持. -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- <property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
-->
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>com/v512/guestbook/model/Admin.hbm.xml</value>
<value>
com/v512/guestbook/model/Guestbook.hbm.xml
</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
</props>
</property>
</bean>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@localhost:1521:ora10g">
</property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<!-- guestbookDao bean -->
<bean id="guestbookDao"
class="com.v512.guestbook.dao.hibernate.GuestbookDaoHibernate"
abstract="false" lazy-init="default" autowire="default"
dependency-check="default">
<property name="sessionFactory"><!-- 表示guestbookDao要依赖注射一个sessionFactory的一个对象 -->
<ref bean="sessionFactory" />
</property>
</bean>
<!-- guestbookManager bean -->
<bean id="guestbookManager"
class="com.v512.guestbook.service.impl.GuestbookManagerImpl"
abstract="false" lazy-init="default" autowire="default"
dependency-check="default">
<property name="guestbookDao"><!--表示guestbookManager需要一个DAO的支持,这里我注射一个guestbookDao -->
<ref bean="guestbookDao" />
</property>
</bean>
<bean id="adminDao"
class="com.v512.guestbook.dao.hibernate.AdminDaoHibernate"
abstract="false" lazy-init="default" autowire="default"
dependency-check="default">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="adminManager"
class="com.v512.guestbook.service.impl.AdminManagerImpl"
abstract="false" lazy-init="default" autowire="default"
dependency-check="default">
<property name="adminDao">
<ref bean="adminDao" />
</property>
</bean>
</beans>
好了,我们现在应用的持久和服务层的实现类都编写好了,就到了web的开发了。
现在做2件事:(add by Michael)
1. src下的hibernate.cfg.xml要删除。
2. 把src的applicationContext.xml移到WebRoot/WEB-INF下,否则启动服务器时会报错找不到配置文件。
7 添加struts支持
为项目添加struts1.3的支持。包名为com.v512.guestbook.web,如图:
这时,项目结构发生了改变,如下图:
最后,我们修改配置文件,把struts和spring 结合起来。
修改配置文件web.xml文件,如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- spring 提供了一个过滤器,我们直接拿来用 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<!-- 指定使用UTF-8 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 指对所有进行过滤,要加过滤映射,告诉他哪些文件要过滤-->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 下面的代码为了在web中使用spring,还要加载spring 的配置文件,所以要指定application.xml文件的位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value> <!-- 在这里,指定applicationContext.xml文件的路径,因此呆会要把applicationContext.xml剪切至/WEB- INF目录下 -->
</context-param>
<!-- 为了让web应用能加载spring,设置一个侦听,通过这样一个监听器,一启动WEB应用它自动根据上面设置好的配置文件的位置把配置文件加载到内存中,为进一步使用spring中的bean做好准备 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>input.jsp</welcome-file>
</welcome-file-list>
</web-app>
紧接着,struts-config.xml中我们要创建相应的Form,action,jsp页面,创建方式如图:
在此之后,详细的请参见所提供的源码的struts-config.xml文件,通过这个方式,就创建了相应的action,form,在完成这些操作后,SSH的配置就完成了。
(注:读者如果觉得看不懂的话,可以依照着源码重新做一次,文档写的不是很详细)
最后部署项目至tomcat容器下,就能够通过这个地址访问了:
http://localhost:8080/guestbook2/ .
原作者说到此结束,如果对于一个新手来说要把这个project运行起来可以还会有不少的困难。
8 运行project
8.1 copy相关文件到project
JSP文件:admin.jsp,display.jsp,edit.jsp,index.jsp,input.jsp,login.jsp,loginfail.jsp到WebRoot。
目录:css,images到WebRoot。
配置文件: action-servlet.xml,spring.tld,spring-form.tld,validations.xml到WebRoot/WEB-INF。
8.2 配置tomcat的log4j
目的是跟踪可能出现的异常,实践证明log能够快速的发现问题。另外很多新手的确也出现很多的问题,也包括我。
1. commons-logging-1.0.4.jar,log4j-1.2.11.jar copy到project的lib下。
2. 在Project的WebRoot下建目录logs。
3. 在src下新建log4j.properties文件,内容如下
log4j.rootLogger=info,Console,R
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
#log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-dd HH/:mm/:ss} %5p %c{1}/:%L - %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D://Tomcat5.5// logs//tomcat.txt
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy.MM.dd HH/:mm/:ss} %5p %c{1}(%L)/:? %m%n
log4j.logger.org.apache=info, R
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R
log4j.logger.org.apache.catalina.core=info, R
log4j.logger.org.apache.catalina.session=info, R
log4j.appender.R.File要修改成你的log目录。
8.3 配置tomcat
Windows->preference
8.4 Deploy project
点击Deploy按钮,如下图
8.5 运行服务器tomcat
在你的IE里输入http://localhost:8080/guestbook2/。
此时如果你认为已经结束就太乐观了,大问题在后头呢。我第一次运行时被Error listenerStart搞的晕头。
9 服务器异常处理
9.1 服务器启动异常1
现象:
09-10-23 21:07:10 ERROR [/guestbook]:667 - action: null
java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1352)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198)
解决:
到D:/MyEclipse 6.5/myeclipse搜索spring-web.jar,加到project的lib下.重新部署Redeploy,再启动。
又遇到了下面的异常。
9.2 服务器启动异常2
现象:
2009.10.23 21:22:47 ERROR [/guestbook2](3678):? Error configuring application listener of class com.sun.faces.config.ConfigureListener
java.lang.NoClassDefFoundError: org/apache/commons/digester/RuleSet
at java.lang.Class.getDeclaredConstructors0(Native Method)
解决:
到D:/MyEclipse 6.5/myeclipse搜索commons-pool.jar,jsf-impl,加到project的lib下.重新部署Redeploy,再启动。
至此,问题已经解决。
9.3 可能的其他异常供参考(从网上找的)
9.3.1 JSF--整合spring
使用JSF-Spring整合 <?xml version="1.0" encoding="UTF-8"?> 请注意以上listener的顺序,如果位置不同可能出现找不到在spring中定义的bean。请按以上顺序配置即可。 posted on 2007-04-26 16:18 风人园 阅读(2936) 评论(3) 编辑 收藏 所属分类: JSF 我按照你的配置修改后,后台老提示 2007-07-16 12:04 | zzb 我的也是这个问题 2007-09-27 17:02 | wxyhibernate com.sun.faces.config.ConfigureListener在jsf的sun参考实现jsf-impl.jar中。 2007-12-04 15:18 | KimmKing |
9.3.2 严重: Exception sending context initialized event to listener instance
已解决提问者:smallbqxy_062 - 二副 十一级
严重: Exception sending context initialized event to listener instance o
用 myeclipse 做 spring+hibernate+struts2 时报错,不知为什么,可能是spring包有问题 ,说是asm..之类的我都弄了也不行,如有知道请告诉一下。
严 重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NoClassDefFoundError: org/springframework/context/support/AbstractRefreshableConfigApplicationContext
2008-12-6 16:08:39 org.apache.catalina.core.StandardContext start
严重: Context [/t8] startup failed due to previous errors
7481086_582 - 二副 十一级
你可能把不要的包也导进去了或是哪个必需的包没导入,以下是必需包:
Spring包(9个):
commons-dbcp.jar、commons-pool.jar、spring.jar、spring-beans.jar、
spring-context.jar、spring-core.jar、spring-dao.jar、
spring-hibernate3.jar、spring-web.jar。
struts2.0包(6个):commons-logging-api-1.1.jar、freemarker-2.3.8.jar
ognl-2.6.11.jar、struts2-core-2.0.8.jar、
struts2-spring-plugin-2.0.11.2.jar、xwork-2.0.3.jar
hibernate包:myeclipse工具自动添加生成导入。
还有就是数据库驱动包。
如果还有什么问题加:QQ 274339969
回答采纳率达:27%(440个被采纳)
评价已经被关闭 目前有 0 个人评论
好不好
0% (0)0% (0)
相关问题
- ·我这个配置能玩魔兽世界吗 内存2GB 显卡9400GT 主板主板 To be filled by O.E.M. To be filled by O.E.M.
- ·AMD Athlon(tm) 64 X2 Dual Core Processor 3800+ 主板 To be filled by O.E.M. To be filled by O.E.M.
- ·开机显示:The CPU was previously shutdown due to a thermal event(overtheting)
- ·当After Effects出现了Faled to share context-monitor color depth must be 32该怎么办
- ·⊙O1⊙O2内切于A,⊙O1⊙O2的半径为3、2,P是除A外⊙O1上任一点,PA交⊙O2于C,PB与⊙O2相切于B,PB比PC=
- ·[+to-v][+v-ing][+wh-][O1][O2]等相关问题,急!!!在线等·~~
其它回答 (共2条)
xuan6325293_706 - 二副 十一级
别的我不多说,我只告诉你些配置Spring的问题所报出的这种错误
你这问题如果是启动Tomcat出的问题报错解决方法很简单如下:
需要加载的包(必须):commons-dbcp.jar和commons-pool.jar
需要删除的包(必须):asm-2.2.3.jar
如果按照此方法,必定解除你的错误 如果这加载包没有 我给你!
回答采纳率达:30%(472个被采纳)
89B2A3604_868 - 二副 十一级
java.lang.NoClassDefFoundError:
你在配置文件里定义的某个类,没有找到,估计是包名没有写对,把报错信息再仔细地看一看
回答采纳率达:29%(453个被采纳)
9.3.3 严重: Error listenerStart
最 近关于SPRING的配置的问题一启动TOMCAT就出现"严重: Error listenerStart",通过BAIDU和GOOLGE查找了差不多两天,没有找一个有建设性的意见.都是一些转载,我真的想问问他们有没有真真的 去面对过,和测试过,就在这里乱说!出现这种错误的主要原因是由于WEB.XML配置SPRING的时候出错的:
org.springframework.web.context.ContextLoaderListener
现在我认为有必要说说我解决的方面了:要考虑的方面有:
1、web.xml的配置有没有问题!
2、一些必要的JAR文件,有没有多余JAR文件,是不是版本问题
3、是不是JDK和TOMCAT的版本问题
4、最重要的是在这里了:SPRING配置文件是不是有配置BEAN有错误!
补充:还一个更绝的方法:通过TOMCAT的LOG来解决这个问题,更方便,更简单.不过要配置TOMCAT的LOG
首 先在TOMCAT目录下找到common下的lib,在这个目录下加入两个JAR文件,分别是commons-logging-1.0.4.jar和 log4j-1.2.9.jar,同时还需要在common下的classes目录下加入log4j.properties文件,
我的log4j.properties文件配置如下:
log4j.rootLogger=info, A1 , R
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#log4j.appender.A1.layout=org.apache.log4j.HTMLLayout
#log4j.appender.A1.layout=org.apache.log4j.SimpleLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${myappfuse.root}/WEB-INF/classes/log/log4j.log
log4j.appender.R.MaxFileSize=200KB
log4j.appender.R.MaxBackupIndex=100
log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.R.layout.ConversionPattern=%p -thread: %t - %l - %c - %m%n
log4j.appender.R.layout.ConversionPattern=%p -%-d{yyyy-MM-dd HH:mm:ss} %l - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL#
log4j.logger.org.hibernate.SQL=INFO
#log4j.logger.java.sql.PreparedStatement=DEBUG
### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug
### log schema export/update ###
#log4j.logger.org.hibernate.tool.hbm2ddl=debug
### log HQL parse trees
#log4j.logger.org.hibernate.hql=info
### log cache activity ###
#log4j.logger.org.hibernate.cache=debug
### log transaction activity
#log4j.logger.org.hibernate.transaction=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
9.3.4 使用spring中,出现深恶痛绝的Error listenerStart!!
使用spring中,出现深恶痛绝的Error listenerStart!!
楼主syhgxyhzb(剑雨飞花)2006-09-30 22:10:24 在 Java / 框架、开源 提问
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
applicationContext.xml在src下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/study" />
<property name="username" value="root" />
<property name="password" value="admin" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mappingResources">
<list>
<value>/org/study/domain/hbm/Test1.hbm.xml</value>
<value>/org/study/domain/hbm/Test2.hbm.xml</value>
</list>
</property>
</bean>
</beans>
这样的话,启动tomcat便出现熟悉的:
2006-9-30 21:50:30 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2006-9-30 21:50:30 org.apache.catalina.core.StandardContext start
严重: Context [/yumen] startup failed due to previous errors
如果将applicationContext当中的:
<property name="mappingResources">
<list>
<value>/org/study/domain/hbm/Test1.hbm.xml</value>
<value>/org/study/domain/hbm/Test2.hbm.xml</value>
</list>
</property>
去掉就没有问题了,但是我确信目录没有错。
请问这是怎么回事??
问题点数:100、回复次数:10Top
1 楼kinsey0514(春天的老黄牛)回复于 2006-09-30 22:59:37 得分 0
upTop
2 楼timtin0361(究极奥义)回复于 2006-10-01 11:32:11 得分 0
/org/study/domain/hbm/Test1.hbm.xml
第一个/ 要吗Top
3 楼syhgxyhzb(剑雨飞花)回复于 2006-10-01 12:25:06 得分 0
无论要不要,都照样出错。Top
4 楼jrwx()回复于 2006-10-01 19:00:49 得分 0
可能Test2.hbm.xml,Test1.hbm.xml的格式不对,读不出里面的内容 你转一下本地编码格式试试Top
5 楼syhgxyhzb(剑雨飞花)回复于 2006-10-01 19:27:18 得分 0
什么叫本地编码格式呢?Top
6 楼zqpsswh(似水无痕)回复于 2006-10-03 17:27:35 得分 0
明显格式不对 仔细检查吧
是否DTD错误?Top
7 楼syhgxyhzb(剑雨飞花)回复于 2006-10-04 08:38:51 得分 0
什么叫明显格式不对呢?
好多书上,网上都是这样写的,那这么明显,您看出来了?Top
8 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-10-04 11:46:20 得分 100
运行一下
new ClassPathXmlApplicationContext("applicationContext.xml").getBean("sessionFactory");
看看报什么异常。Top
9 楼syhgxyhzb(剑雨飞花)回复于 2006-10-04 21:13:17 得分 0
按照Saro的方法找到了错误,原来是hibernate2和hibernate3的版本问题.解决了.
Top
10 楼syhgxyhzb(剑雨飞花)回复于 2006-10-04 21:15:37 得分 0
贴子回复次数大于跟给分次数 ,是什么意思,不能给分
9.3.5 开发异常的解决方法
2009年04月09日 00时00分
1、java.lang.NoSuchMethodError: sun.rmi.transport.ObjectTable.getStub(Ljava/rmi/Remote;)Ljava/rmi/server/RemoteStub
问题描述:当集成JOTM 2.0.13到Tomcat 5.5.27时出现。
解决方法:修改carol.properties文件中的carol.jvm.rmi.local.call属性为true。
2、java.lang.NoSuchMethodError: org.springframework.util.Assert.noNullElements([Ljava/lang/Object;Ljava/lang/String;)V
解决方法:不能将Spring 2.0和Spring 2.5中的spring.jar与spring-[modules].jar混合使用。
9.3.6 Tomcat严重错误,日志里出现: java.lang.NoClassDefFoundError: javax/el/ExpressionFactory
发布工程时,抛出以下异常:
java.lang.NoClassDefFoundError: javax/el/ExpressionFactory
Apache Tomcat/5.0.28
则将javaee.jar包再copy一份放在tomcat目录的common/lib下就不会了。
关于用到的javaee.jar、jsf-api.jar、jsf-impl.jar、jstl-1.2.jar这四个包可以通过myeclipse中获得,这四个包的所在的目录是:
D:/Program Files/MyEclipse 6.5/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806/data/libraryset/EE_5
posted on 2008-08-29 19:39 Documents 阅读(1370) 评论(0) 编辑 收藏 所属分类: Tomcat
9.3.7 tomcat启动时出现的 严重: Error listenerStart
最近看《WebWork.Spring.Hibernate整合开发网络书城》视频教程,自己按照教程上说的做练习,在启动tomcat时总是出一个错误:<o:p></o:p>
2007-5-31 14:27:13 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2007-5-31 14:27:13 org.apache.catalina.core.StandardContext start
严重: Context [/testWSH] startup failed due to previous errors
教 程的作者在录制教程时也遇到了此问题,但是他删了一个jar包后就没事了,可是我的一直无法正常启动,从昨天到现在一天的时间都在研究这个问题,也“百 度”到了很多有关此问题的信息,但是都没有很明确的解决方案。现在此问题已经解决,而且基本肯定问题所在,所以将解决方案写出来以供参考。
有一种解决方案是把web.xml文件中的<o:p></o:p>
<listener> <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
改为
<servlet>
<servlet-name>SpringContextServletservlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
servlet-class>
<load-on-startup>1load-on-startup>
servlet><o:p></o:p>
但这种方法可能会出现其他问题(网上又说会导致其他文件无法打开)。
<o:p></o:p>
我的最终解决方案如下:
我用的是tomcat5.5,配置了日志之后打印出下列信息:
ERROR main org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
Caused by:
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2328)
at java.lang.Class.getConstructor0(Class.java:2640)
at java.lang.Class.getDeclaredConstructor(Class.java:1953)
……
从日志信息看问题已经很明显了,是 applicationContext.xml 的 dataSource 问题。
将
<bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSource"></bean><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSource"></bean>改为
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource"></bean><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
之后问题得到解决。 <o:p></o:p>
出现"Error listenerStart"一般是applicationContext.xml中 的bean加载有问题。在用eclipse做webwork + spring + hibernate 的项目时一般都是用Myeclipse自动生成那些配置文件,而有些相关的jar或者文件并没有加载在至项目中,以至引出奇怪的问题,又因为是自动生成的 东西所以往往会忽略一些文件,而问题确恰恰是这些生成的文件所致,所以自动化的东西也未必一定是正确的,呵 呵……<o:p></o:p>
org.springframework.jdbc.datasource.DriverManagerDataSource 不可以使用连接池。org.apache.commons.dbcp.BasicDataSource作为注入的DataSource源,为了使用 DBCP的功能,必须要将commons-dbcp.jar加入CLASSPATH中,另外还需要commons-pool.jar和commons- collections.jar,这些都可以在Spring的lib目录下找到。
org.springframework.jdbc.datasource.DriverManagerDataSource并没有提供连接池的功能,只能作作简单的单机连接测试。
使用org.apache.commons.dbcp.BasicDataSource时缺少commons-pool.jar所以会出现如题的问题。 <o:p></o:p>
再次修正:<o:p></o:p>
昨天又遇到此问题,解决的办法是删除无用的jar。<o:p></o:p>
工 程是 spring+hibernate+tomcat<st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">5.5.25</st1:chsdate>,jar都是用eclipse自动加载的,很多jar明显的用不到,例 如:ibatis,toplink等。将无用的jar删除后问题解决。<o:p></o:p>
<o:p> </o:p>
- 15:06
- 浏览 (27818)
- 论坛浏览 (10360)
- 评论 (12)
- 分类: 技术空间
- 相关推荐
评论
我也遇到了这个问题,研究了3天,最后知道是少了几个spring的包。去官网下载spring的最新包。就ok了。具体的文件配置在http://user.qzone.qq.com/3470537/blog/1211351181
怪事,偶也是报这个错误,发现没加入spring.jar包,加了之后.tomcat6启动就OK了
10 楼 richardlovejob 2007-10-26 引用
谢谢你的提示帮助!
9 楼 danielchen19 2007-09-01 引用
我也曾经试过这样可以过一次,但现在又出现这种情况,原因是在web.xml 删了<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>就可以了, 正常情况是可以的,不知是什么原因,请高手解答一下。
danielchen19 写道
我也是将它变成这样<!--<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
-->
<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class> </servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
但是还是出现严重: Error listenerStart
2007-8-12 8:37:30 org.apache.catalina.core.StandardContext start
严重: Context [/ConnectNote] startup failed due to previous errors, 请问是什么原因??
ybbtgvusr 写道
我也遇到了楼主说的情况,按你说的解决方法试过了。但没有用呀,还是出现Error listenerStart错误!!
先看看日志吧,看看报什么异常
7 楼 danielchen19 2007-08-12 引用
我也是将它变成这样<!--<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
-->
<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class> </servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
但是还是出现严重: Error listenerStart
2007-8-12 8:37:30 org.apache.catalina.core.StandardContext start
严重: Context [/ConnectNote] startup failed due to previous errors, 请问是什么原因??
我也遇到了楼主说的情况,按你说的解决方法试过了。但没有用呀,还是出现Error listenerStart错误!!
楼上说的很对,commons-dbcp.jar、commons-pool.jar和commons- collections.jar都加到lib就好了
我现在报sessionFactory不能创建,请问要加那几个包啊
4 楼 aimama_1314 2007-06-04 引用
在这里搜到你的帖`~ XJ~~
我又遇见这样的问题了``
估计是刚才applicationContext.XML 加bean的时候加错了``555
泪``继续改错``
使用org.apache.commons.dbcp.BasicDataSource时缺少commons-pool.jar所以会出现如题的问题。
org.springframework.jdbc.datasource.DriverManagerDataSource并没有提供连接池的功能,只能作作简单的单机连接测试。
<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"& gt;不可以使用连接池。org.apache.commons.dbcp.BasicDataSource作为注入的DataSource源,为了使用 DBCP的功能,必须要将commons-dbcp.jar加入CLASSPATH中,另外还需要commons-pool.jar和commons- collections.jar,这些都可以在Spring的lib目录下找到。
9.3.8 在部署Struts时,出现如下404错误信息
struts常见问题1:HTTP Status 404 - Servlet action is not available 收藏
在部署Struts时,出现如下错误信息:
HTTP Status 404 - Servlet action is not available
--------------------------------------------------------------------------------
type Status report
message Servlet action is not available
description The requested resource (Servlet action is not available) is not available.
问题原因:
1.、web.xml文件中未配置ActionServlet。
2、struts-config.xml文件未配置你要访问的Action。
3、你的jsp文件form标记中action属性的路径名称错误。
4、非以上三种情况。
针对以上4种情况相应的解决方案如下:
1、在web.xml文件中加上ActionServlet的配置信息
2、在struts-config.xml文件检查你要访问的Action配置文件。
3、检查jsp文件form标记中action属性的路径名称是否与struts-config.xml文件中action标记的path属性的路径名称一致。
4、非以上情况的解决办法就是检查web容器的log日志,如果时tomcat则检查下logs目录下的localhost_log文件,看里边是否记录有错误信息,然后根据错误信息提示将其纠正。