适合入门级看,但其中的错误解决适合大家参考。
在此使用MyEclipse6.0作为编程环境,真正领悟ssh后,就会知道MyEclipse添加spring与hibernate支持的用意只是让MyEclipse自动添加spring与hibernate的包,还有产生一些配置文件代码,在此为节省时间,使用MyEclipse来添加,但是其实自己添加也行。
要填的东西将会指出,其他都是默认
前提:
1/*
2SQLyog Enterprise - MySQL GUI v6.06
3Host - 5.0.27-community-nt : Database - ssh
4*********************************************************************
5Server version : 5.0.27-community-nt
6*/
7;
8
9;
10
11createdatabaseifnotexists `ssh`;
12
13USE `ssh`;
14
15/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
16/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
17
18/*Table structure for table `user` */
19
20DROPTABLEIFEXISTS `user`;
21
22CREATETABLE `user` (
23int(11) NOTNULL auto_increment,
24varchar(20) collate utf8_unicode_ci NOTNULL,
25varchar(20) collate utf8_unicode_ci NOTNULL,
26varchar(20) collate utf8_unicode_ci NOTNULL,
27PRIMARYKEY (`id`),
28UNIQUEKEY `name` (`name`)
29=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
30
31/*Data for the table `user` */
32
33insertinto `user`(`id`,`name`,`password`,`purview`) values (1,'admin','admin','MANAGER');
34
35/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
36/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
37
使用上面SQL语句在MySQL中建立表格,最好使用SQL yog Enterprise工具
安装MySQL与SQL yogEnterprise请自己掌握。
1.创建工程:
file-->web project(习惯使用,貌似dynamic web project也行)
project name:ssh
J2EE Specification Level选择Java EE5.0(使用新一点的吧)
finish->
菜单Wiindows-->Open Perspective-->MyEclipse Java Enterprise 视图
2.添加Spring支持:
工程名上右键-->MyEclipse-->Add Spring Capabilities
a).在框内选上:
Spring2.0 AOP Libraries(对于面向切面有用,后面会用到配置面向切面的)
Spring2.0 Core Libraries(Spring核心库)
Spring2.0 Persistence Core Libraries(持久层库,要Spring与Hibernate集成,当然就添加啦)
Spring2.0 J2EE Library
Spring2.0 Web Libraries
暂时就只添加这5个
Copy checked Library contents to project folder 选上,这样就可以将库添加到工程内,否则这个工程编译的时候会引用本机的文件系统内的库,工程转移到其它机器就需要重新将每个包改对路径,当然如果只需要本机开发的就不用copy啦。
next->
b).new applicationContext.xml 将路径改为在WebRoot/WEB-INF下面,其实放在src下也行,但是工程编译的时候将src下的东西编译到WebRoot/WEB-INF下的classes目录下,配置applicationContext路径的时候就相应修改就行。
finish->
3.建立数据库连接
菜单Wiindows-->Open Perspective-->MyEclipse Database Explorer
DB Browser中右键-->new,新建一个数据库连接,打开一个对话框
Driver template 选择MySQL connector/J(可以不选,选着只是为了下面显示出连接字符串的模板,让不熟悉的人可以照这模式来填)
Driver name:任意,用于标识这个连接,对我们工程没有任何关系的。
Connection URL:jdbc:mysql://localhost:3306/ssh (意思是本地地址IP的数据库ssh,如果是远程数据库,请写远程地址,当然要确保远程地址是可达的,例如防火墙阻隔等)
User name:你的数据库登录名
password:登录名密码
Add Jars-->打开对话框寻找本地文件系统的MySQL连接驱动包,(提供下载,解压取里面那个jar)
save password 打上钩,方便点
可以test 测试一下是否能够连接
这步骤的实际意义是在MyEclipse IDE工具上建立一个数据库连接,来管理,对于我们工程其实没有一点影响的,只是这个连接,以后引用或者管理的时候就较方便。
finish-->
4.添加Hibernate支持
切换回原来的视图,其实有多种切换视图的方法,快捷键等,自己学吧。
a).工程名上右键-->MyEclipse-->add Hibernate Capabilities
同样Copy checked Library Jars to project folder and add to build-path
next-->
b).选择Spring configuration file
next->
c).因为原来已经有一个spring配置文件,所以就选择Existing Spring configuration file
sessionFactory ID:sessionFactory(可以自定义名称,使用惯例的吧,随便啦)
next-->
d).DB Driver 选择在MyEclipse DB Explorer中建立的数据库连接名称(这里就体现到同一个IDE工具的好处,方便地引用那个连接的配置)
Bean ID:dataSource(又是惯例的名称)
next-->
取消掉create SessionFactory class
finish-->
5.添加Struts2.0支持
由于MyEclipse没有集成Struts2.0的包,所以自己添加Struts的五个包
由于空间有限,可以上网搜索一个叫struts2-blank的工程包,war文件也可以,可以用rar打开,取其里面lib下的这五个包
struts暂且只添加这5个包,多包反而会导致冲突(后面有说),至于struts想集成meshsite等的话,就另外加包吧。
顺便将原来的那个mysqlConnector的jar包也拿来吧,一起拖到WEB-INF/lib目录下,可以直接拖到IDE工具上的工程浏览框(即Package视图)的lib图标上,MyEclipse支持拖放功能。
还有commons-pool-1.4.jar和commons-dbcp-1.2.2.jar和struts2-spring-plugin-2.0.6.jar也是必须自己加进lib中的
如果有包重复的话,覆盖就行。
6.配置文件web.xml详解
1<?xml version="1.0" encoding="UTF-8"?>
2<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
3="http://www.w3.org/2001/XMLSchema-instance"
4="http://java.sun.com/xml/ns/javaee
5>
6<!-- 网站默认首页 -->
7<welcome-file-list>
8<welcome-file>index.jsp</welcome-file>
9</welcome-file-list>
10<!-- spring环境配置 -->
11<context-param>
12<param-name>contextConfigLocation</param-name>
13<param-value>/WEB-INF/applicationContext*.xml</param-value>
14</context-param>
15<listener>
16<listener-class>
17 org.springframework.web.context.ContextLoaderListener
18</listener-class>
19</listener>
20<!-- 这个过滤器负责管理hibernate的数据库访问session,session的关闭将在action完毕的时候关闭,这样既不迟也不早
21-->
22<filter>
23<filter-name>lazyLoadingFilter</filter-name>
24<filter-class>
25 org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
26</filter-class>
27</filter>
28<filter-mapping>
29<filter-name>lazyLoadingFilter</filter-name>
30<url-pattern>*.action</url-pattern>
31</filter-mapping>
32<!-- struts2过滤器,对任何请求都添加这个过滤器 -->
33<filter>
34<filter-name>struts2</filter-name>
35<filter-class>
36 org.apache.struts2.dispatcher.FilterDispatcher
37</filter-class>
38</filter>
39<filter-mapping>
40<filter-name>struts2</filter-name>
41<url-pattern>/*</url-pattern>
42</filter-mapping>
43</web-app>
44
struts的过滤器配置是有顺序的:
按照Struts2的API,filter的顺序是
struts-cleanup filter
SiteMesh filter
FilterDispatcher
如果需要配置字符转换过滤器的话,那就安排在FilterDispatcher之前
spring配置文件可以多个,从/WEB-INF/applicationContext*.xml的通配符就可以看出来了
7.struts.xml详解
在src下建立一个struts.xml的文件:
1<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
2<struts>
3<!-- 类似struts1中的spring代理管理struts,这里的constant也是将struts交给spring管理 -->
4<constant name="struts.objectFactory" value="spring"/>
5 6 7<!-- 默认的struts-default.xml文件,一定要写的。如果希望分开多个xml文件来配置action,可以再include几个struts的xml文件
8例如:自己写的struts-login.xml等,经典的就是这个文件不写package,在其他分文件中归类action package,在将个模块的xml包含进来 -->
9<include file="struts-default.xml"/>
1011
12<!-- 真正开始编写action,使用package括住,下面前两个action是示例样板
13141516-->
17
18<!-- package1里面的action调用方法:
191.在根目录的jsp页面:form方式:<form action="hello"> href方式:<a href="网站根目录/hello.action></a
202.在/folder里面的jsp调用这个action:form方式:<form action="hello" namespace="/">
2122-->
23<!--<package name="package1" extends="struts-default">
24 <action name="hello" class="helloBean" method="test">
25 <result>hello.jsp</result>
262728-->
29<!-- package2里面的action调用方法:
301.在根目录的jsp页面:form方式:<form action="hello" namespace="/folder"> href方式:<a href="网站根目录/folder/hello.action></a
3132herf方式:<a href="hello.action"></a> 或者写全路径<a href="网站根目录/folder/hello.action"></a>
33-->
34<!--<package name="package2" extends="struts-default" namespace="/folder">
35 <action name="" class="helloBean" method="test">
36 <result>hello.jsp</result>
373839-->
40
41<package name="login" extends="struts-default" namespace="/login">
42<action name="login" class="loginAction" method="login">
43<result name="login">loginSuccess.jsp</result>
44<result name="none">loginFailed.jsp</result>
45</action>
46</package>
47</struts>
48
8.applicationContext.xml详解
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3="http://www.w3.org/2001/XMLSchema-instance"
4="http://www.springframework.org/schema/aop"
5="http://www.springframework.org/schema/tx"
6="http://www.springframework.org/schema/beans
7 8 91011>
12
13<!-- 配置数据库连接,使用MyEclipse可以通过对话框配置产生,如果有问题的话就自己copy这一段,然后按照自己的实际来配置 -->
14<bean id="dataSource"
15="org.apache.commons.dbcp.BasicDataSource">
16<property name="driverClassName"
17="com.mysql.jdbc.Driver">
18</property>
19<property name="url" value="jdbc:mysql://localhost:3306/ssh"></property>
20<property name="username" value="root"></property>
21<property name="password" value="root"></property>
22</bean>
23<!-- 数据库访问sessionFactory 关键的地方是dialect那里指定数据库方言,按照自己使用的是什么数据库来配置,一般都是mySQL
24-->
25<bean id="sessionFactory"
26="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
27<property name="dataSource">
28<ref bean="dataSource"/>
29</property>
30<property name="hibernateProperties">
31<props>
32<prop key="hibernate.dialect">
33 org.hibernate.dialect.MySQLDialect
34</prop>
35</props>
36</property>
37<property name="mappingResources">
38<list>
39<value>ssh/pojo/User.hbm.xml</value>
40</list>
41</property>
42</bean>
43</beans>
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3="http://www.w3.org/2001/XMLSchema-instance"
4="http://www.springframework.org/schema/aop"
5="http://www.springframework.org/schema/tx"
6="http://www.springframework.org/schema/beans
7 8 91011>
1213<!-- 配置自己编写的各个类,在此注册,在类的编写中,就可以省去属性的初始化,因为spring会帮我们初始化 -->
14<bean id="UserDAO" class="ssh.dao.hibernate.UserDAO">
15<property name="sessionFactory">
16<ref bean="sessionFactory"></ref>
17</property>
18</bean>
1920<bean id="userServiceBean" class="ssh.service.impl.UserServiceImpl">
21<property name="userDAO">
22<ref bean="UserDAO"/>
23</property>
24</bean>
2526<bean id="loginAction" class="ssh.action.UserAction">
27<property name="userService">
28<ref bean="userServiceBean"/>
29</property>
30</bean>
31</beans>
9.构造pojo与dao
先建好包结构如下:
a).切换到MyEclipse DB Explorer视图->双击你建的那个连接来打开数据库连接->Table下user表右键->Hibernate Reverse Engineering->
->finish:这样会产生三个文件,数据库user映射的pojo实体类对象User.java,数据库访问对象UserDAO.java,数据库映射文件User.hbm.xml
将User.java 与 hbm文件移到pojo包下
上面搞错了点,将UserDAO移到dao.hibernate包下吧
这里的东西涉及到applicationContext.xml的改变,没有关系,前面已经详尽讲解了各xml文件的意义。
UserDAO已经自动生成很多数据库访问函数,从字面上可以看出是什么意思,大部分函数是不一定用到的,自己想使用的方法写在下面说的接口上,再实现他吧。
我们为其写个UserDAO接口,在dao包下编写一个IUserDAO.java的接口,并且使UserDAO实现这个接口
10.编写服务
参照代码吧!
11.编写action
12.编写页面
(略)
13.常见错误
appllicationConotext.xml中的org.apache.commons.dbcp.BasicDataSource not found错误,可能是没有添加commons-pool.jar和commons-dbcp.jar和commons-collections.jar
Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: entity class not found: ssh.dao.User
因为自己在移动产生的User.java类的时候,忘记修改User.hbm.xml文件的映射实体类,需要改成
<class table="user" catalog="ssh">
Action class [loginAction] not found - action - file:/D:/workspace2/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/ssh/WEB-INF/classes/struts.xml
因为login action的class我指定为loginAction,所以在spring中的login Bean的id="loginAction"来对应,但是我却写成了login,所以找不到。
org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: model near line 1, column 56 [from ssh.pojo.User as model where model.name= adminand model.password= admin]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: model near line 1, column 56 [from ssh.pojo.User as model where model.name= adminand model.password= admin]
可以从from字符串中看出,我忘记写空格了。
javax.servlet.ServletException: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot create PoolableConnectionFactory (Unknown database 'ssh1'); nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Unknown database 'ssh1')
因为spring中的dataSource的 <property value="jdbc:mysql://localhost:3306/ssh"></property>,我原来指定了ssh1的数据库,我并没有创建这个数据,所以改回ssh
javax.servlet.ServletException: org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
这个是因为我忘记把sql字符串中的值用''括起来,例如:
from ssh.pojo.User as model where model.name = admin and model.password = admin
应该要变成:
from ssh.pojo.User as model where model.name = 'admin' and model.password = 'admin'
自己改UserDAO中的字符串吧。
No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath:....
如果有这个问题的话,那就参看:http://www.blogjava.net/jianyue/archive/2008/08/28/225415.html
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit
CGLIB Enhancement failed
主要是hibernate与spring包冲突问题,可能有多种情况,都参照一下吧,但是最关键的原则是一个同样功能的包,
不要将多个版本都放进来。根据这个原则,自己也能够知道应该删去什么包。
解决方案:参看:http://www.blogjava.net/jianyue/archive/2008/08/28/225246.html
No configuration found for the specified action: in namespace:
那么一定是action配置得不对,不是包的问题,自己详细参照一下我的那份action配置说明。
代码工程
由于空间有限,去掉了包。包的列表如下:
分享到:
相关推荐
将Struts与Hibernate进行整合,可以充分利用两者的优点,解决Struts框架在模型层的不足。通过将Hibernate作为数据访问层,可以实现以下目标: - **提高开发效率**:利用Hibernate的强大ORM功能,可以显著减少数据库...
这个项目可能包括了使用Struts(S),Spring(s)和Hibernate(h)这三大框架的集成,以及JSP(JavaServer Pages)作为前端展示,MySql作为后端数据库来存储和管理数据。下面将详细介绍这些关键知识点: **1. Java ...
这个项目利用了Struts2(SSH中的S)、Spring(SSH中的H)和Hibernate(SSH中的第二个S)这三大主流Java企业级开发框架,以及JSP作为视图层技术,MySql作为数据库存储系统。 【描述】项目的核心在于实现高效、稳定的...
2. **Spring 3.1 Persistence Libraries**:这部分是Spring的持久层库,包含Spring Data Access模块,支持ORM(对象关系映射)框架如Hibernate,JPA(Java Persistence API),以及对JDBC的高级封装,简化数据访问...
SSH框架(Spring、Struts、Hibernate)为J2EE Web应用开发提供了一套完整的解决方案。通过结合这些框架的特点和优势,开发人员可以在较短时间内搭建出结构清晰、可复用性强、可扩展性好的Web应用程序。未来,随着...
本文详细介绍了基于SSH框架(Struts2 + Spring + Hibernate)设计与实现的一个网上商城购物系统的前台商品展示模块。该模块旨在通过网站展示商品信息,为用户提供便捷的购物体验。 #### 二、系统概述 本系统主要...
- **SSH**:Spring + Struts + Hibernate的缩写,是一个流行的JavaEE开发组合。 - **SSH2**:通常指的是Spring Boot + Spring MVC + Hibernate的组合,是SSH的一个现代版,更加强调自动化配置和简化开发流程。 ####...
246 14.5.2 CORBA和RMI的互操作 247 14.6 小结 248 第15章 Spring框架 249 15.1 Spring 2.0的体系结构 249 15.2 Ioc容器 250 15.2.1 BeanFactory 250 15.2.2 ApplicationContext 252 15.2.3 Beans的生命周期过程 253...
SSH2框架(Struts2、Spring、Hibernate)在这里起到了关键作用。Struts2负责提供MVC模型,实现界面、业务逻辑和数据的分离,提供高扩展性的架构。Spring作为核心,通过Inversion of Control(IoC,控制反转)容器...
- 技术可行性:选用Struts、Spring、Hibernate(SSH)三大框架作为核心技术,这三者是Java Web开发中的主流框架,有成熟的技术支持和丰富的社区资源。 - 经济可行性:Java Web技术开源免费,降低了开发成本,...
Java EE(Enterprise Edition)为企业级应用提供了一整套框架和服务,如Struts、Hibernate和Spring等,用于构建分布式、多层架构的应用程序。 2.2 Struts Struts是Java EE中的一个开源MVC框架,它简化了Web应用的...
- **多层开发模式**:在这种模式中,dorado不仅通过JDBC连接数据库,还会集成其他的业务逻辑框架(如Struts、Spring、Hibernate等),适用于复杂的应用场景。 ### 第一杯茶:单表展现 #### 2.1 页面效果 这部分...
### J2EE Web 开发关键...J2EE 技术栈包含了 Java Servlet、JSP、Spring、Hibernate 和 Struts 等核心组件,这些技术共同构成了企业级应用的基础。通过学习这些技术,开发者可以构建出功能强大且可扩展的 Web 应用。