laoding
本来我以为,隐身了别人就找不到我,没有用的,像我这样拉风的男人,无论走到哪里,都像在黑暗中的萤火虫一样,那样的鲜明,那样的出众。我那忧郁的眼神,稀疏的胡茬,那微微隆起的将军肚和亲切的笑容......都深深吸引了众人......
posts - 0,  comments - 37,  trackbacks - 0
这个是我抽空花了一上午做的,希望对大家有所帮助,废话不多说,下面开始

这里是用SSH+MYSQL做的

首先在mysql建立表user 字段有3 id(int) username(varchar) password(varchar)其中id为主键

新建web工程


切换到数据库透视图,在空白区域右键并选择
new,如下图(我这里是已经建立好了好几个数据库连接了)


在第一个
Driver template 里面选择mysql的那个

其他配置信息自己填写

有个ADD jars 选择mysql的数据库驱动包,点finish就可以了



右键你刚刚配置好的连接,选择
open connection 可以打开连接,若未成功请根据错误仔细检查配置。

切换回j2ee透视图

右键你的工程,选择MyEclipse->add Struts capabilities…如图:


Struts
用的版本是1.1,在Base package for new classess:里输入资源配置文件的路径.然后点进击Finish按钮

加入spring包,右键工程选择MyEclipse->add Spring capabilities...如图:


Spring版本我用2.0,注意所选jar包里面还有最后一个看到不的spring 2.0 web Labraries要选择中,在JAR Library Insatallation 里选择Library存放的路径,路径选择图上的这个为佳,然后点击Next


上图是
Spring的配置文件存放径。点击Finish。之后会遇到有相同的library提示,选择keep existing

Hibernate相关的jar包等加载进来
My
Eclipse->add Hibernate capabilities...如图:



我用的是
3.0 ,点击Next



上面所示为H
ibernate用的是Spring 的配置文件,因和Spring结合在一起,所以不用Hibernate.cfg.xml,选择第2applicationContext.xml,点击Next



SessionFactory ID取名:sessionFactory点击Next



Bean ID 输入dataSource DB Driver 选择你刚刚配置的,点击next


这里我们把勾勾掉,我们不需要创建这个,
点击Finish就可以了。

web.xml文件里面把spring的配置文件加载进来, 要注意spring配置文件的放置路径

  <context-param>
    
<param-name>contextConfigLocation</param-name>
    
<param-value>/WEB-INF/applicationContext.xml</param-value>
  
</context-param>
  
<servlet>
        
<servlet-name>contextLoader</servlet-name>
        
<servlet-class>
            org.springframework.web.context.ContextLoaderServlet
        
</servlet-class>
        
<load-on-startup>0</load-on-startup>
    
</servlet>

再把struts标签加进来,这里要注意路径了,在jsp页面上使用的时候也要注意路径

<jsp-config>
        
<taglib>
            
<taglib-uri>/WEB-INF/tld/struts-html.tld</taglib-uri>
            
<taglib-location>
                
/WEB-INF/tld/struts-html.tld
            
</taglib-location>
        
</taglib>
        
<taglib>
            
<taglib-uri>/WEB-INF/tld/struts-bean.tld</taglib-uri>
            
<taglib-location>
                
/WEB-INF/tld/struts-bean.tld
            
</taglib-location>
        
</taglib>
        
<taglib>
            
<taglib-uri>/WEB-INF/tld/struts-logic.tld</taglib-uri>
            
<taglib-location>
                
/WEB-INF/tld/struts-logic.tld
            
</taglib-location>
        
</taglib>
        
<taglib>
            
<taglib-uri>/WEB-INF/tld/struts-nested.tld</taglib-uri>
            
<taglib-location>
                
/WEB-INF/tld/struts-nested.tld
            
</taglib-location>
        
</taglib>

        
<taglib>
            
<taglib-uri>/WEB-INF/tld/struts-tiles.tld</taglib-uri>
            
<taglib-location>
                
/WEB-INF/tld/struts-tiles.tld
            
</taglib-location>
        
</taglib>

    
</jsp-config>




在工程下建立一些包备用,如下图:



然后打开
MyEclipse Database Explorer(数据库透视图),打开刚才连接的数据库,用鼠标右击user表,选择Hibernate Reverse Engineering,打开一对话框如下:


要注意最上面
srcpackage的选择,点击next



选择
increment即可,finish完成。


找到刚生成的
hbm.xmlcatalog删除掉,否则会报错(oracle数据库不要删除)




找到
struts的配置文件,选择design视图,右键选择new —>formbean action and jsp:



选择
NEXT



我用的
Superclass 是第2DispatchAction,个人比较喜欢它,最下面的Parameter输入status(这个随你数入什么,一会要对应到就行),点击finish完成。

接下来我们来写dao借口,在dao包下新建interface,代码如下:

public interface IUserDao {
    
boolean insert(User user);
}

dao包下的impl包下新建类实现这个接口



注意这里要继承
HibernateDaoSupport和实现刚刚的接口。

 


public class UserDaoImpl extends HibernateDaoSupport implements IUserDao {

    
public boolean insert(User user) {
        
boolean b = false;
        
try{
            
this.getHibernateTemplate().save(user);
            b
= true;
        }
catch(Exception e){
            e.printStackTrace();
        }

        
        
return b;
    }


}

 

service包下创建接口IUserService,里面的方法和dao的一样,复制过来

public interface IUserService {
    
boolean insert(User user);
}

service包下的impl建立类实现这个接口,并且将IUserDao接口作为它的一个属性(要有settergetter方法),这里是通过配置文件将它注入进来,一会spring配置文件就会体现出来,代码如下。

public class UserServiceImpl implements IUserService {

    
private IUserDao iuserdao;
    
    
public boolean insert(User user) {
        
// TODO Auto-generated method stub
        return iuserdao.insert(user);
    }
    
public IUserDao getIuserdao() {
        
return iuserdao;
    }
    
public void setIuserdao(IUserDao iuserdao) {
        
this.iuserdao = iuserdao;
    }

}

打开struts的配置文件,在 </action-mappings>下加入

 <controller

processorClass="org.springframework.web.struts.DelegatingRequestProcessor">

    </controller>

并在action里面加入forward元素

这个配置文件完成,如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
  
<data-sources />
  
<form-beans >
    
<form-bean name="userForm" type="com.myssh.form.UserForm" />

  
</form-beans>

  
<global-exceptions />
  
<global-forwards />
  
<action-mappings >
    
<action
      attribute
="userForm"
      name
="userForm"
      parameter
="status"
      path
="/user"
      scope
="request"
      type
="com.myssh.action.UserAction"
      validate
="false" >
      
<forward name="success" path="/success.jsp"></forward>
      
<forward name="fail" path="/fail.jsp"></forward>
      
</action>

  
</action-mappings>
  
  
<controller
        processorClass
="org.springframework.web.struts.DelegatingRequestProcessor">
    
</controller>
  
<message-resources parameter="com.myssh.struts.ApplicationResources" />
</struts-config>

webroot下建立test.jsp success.jsp fail.jsp

success.jspbody加入

    <h1>

              struts+spring+hibernate练习

           </h1>

           <br />

           <h2>

              恭喜,插入用户成功!!!

           </h2>

就可以,而fail.jsp 恭喜,插入用户成功!!!”改成“对不起,插入失败!!”。

test.jsp的代码:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/tld/struts-logic.tld" prefix="logic" %>

<html>
    
<head>
        
<title>JSP for LoginForm form</title>
    
</head>
    
<body>
        
<center>
            
<br />
            
<br />
            
<h1>
                struts
+spring+hibernate练习
            
</h1>
            
<br />
            
<h2>
                测试插入
            
</h2>
            
<br />
            
<html:form action="/user.do?status=insert">

            用户名 : 
<html:text property="username" />
                
<br /><br />
            密  码 : 
<html:password property="password" />
                
<br /><br />
                
<html:submit value="测试" />
                
<html:reset value="重置" />
                
<br />
                
<br />
            
</html:form>
        
</center>
    
</body>
</html>


打开类UserForm加入2个属性,并生成gettersetter方法

   

    private String username;

    private String password;

打开UserAction类,将service接口做为它的一个属性,并生成gettersetter方法。

属性是 private IUserService iuserservice;

代码如下:

public class UserAction extends DispatchAction {
    
    
private IUserService iuserservice;

    
public ActionForward insert(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        UserForm userForm 
= (UserForm) form;
        User user 
= new User();
        user.setUsername(userForm.getUsername());
        user.setPassword(userForm.getPassword());
        
        
boolean b = iuserservice.insert(user);
        
if(b){
            
return mapping.findForward("success");
        }
else{
            
return mapping.findForward("fail");
        }
        
    }

    
public IUserService getIuserservice() {
        
return iuserservice;
    }

    
public void setIuserservice(IUserService iuserservice) {
        
this.iuserservice = iuserservice;
    }
}

下面我们来配置spring

<?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">


    
<bean id="dataSource"
        
class="org.apache.commons.dbcp.BasicDataSource">
        
<property name="driverClassName"
            value
="com.mysql.jdbc.Driver">
        
</property>
        
<property name="url" value="jdbc:mysql://localhost:3306/ding"></property>
        
<property name="username" value="root"></property>
        
<property name="password" value="ding"></property>
    
</bean>
    
<bean id="sessionFactory"
        
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        
<property name="dataSource">
            
<ref bean="dataSource" />
        
</property>
        
<property name="hibernateProperties">
            
<props>
                
<prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                
</prop>
                
<prop key="hibernate.connection.autocommit">true</prop>
                
<prop key="hibernate.show_sql">true</prop>
            
</props>
        
</property>
        
<property name="mappingResources">
            
<list>
                
<value>com/myssh/po/User.hbm.xml</value>
            
</list>
        
</property>
    
</bean>
    
    
<bean id="transactionManager"
        
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        
<property name="sessionFactory">
            
<ref local="sessionFactory" />
        
</property>
    
</bean>
    
    
<bean name="/user" class="com.myssh.action.UserAction">
        
<!--这里将iuserservice属性注入进来了,在这就是UserAction类里面有这个属性并且有getter和setter方法的原因-->
        
<property name="iuserservice">
            
<ref bean ="iuserservice"/>
        
</property>
    
</bean>
    
    
<!--这里的class必须是实现类的路径,而不是接口本身-->
    
<bean id="iuserservice" class="com.myssh.service.impl.UserServiceImpl">
    
<!--这里将iuserdao属性注入进来了,在这就是UserService类里面有这个属性并且有getter和setter方法的原因-->
        
<property name="iuserdao">
            
<ref bean="iuserdao"/>
        
</property>
    
</bean>
    
    
<!--这里的class必须是实现类的路径,而不是接口本身-->
    
<bean id="iuserdao" class="com.myssh.dao.impl.UserDaoImpl">
        
<!--这里将sessionFactory注入进来了-->
        
<property name="sessionFactory">
            
<ref bean="sessionFactory"/>
        
</property>
    
</bean>
    
    
</beans>

运行工程测试,注意有些错误是jar包引起的,所以要加入LOG4J 文件,方便看到错误好方便去网上找到答案。

java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

这个错误是asm-2.23.jar导致的(删除),lib下只需要一个asm.jar,多个会冲突

我少了这个commons-pool.jar 包报创建sessionFactory出错,加上去就好了

在输入框里面输入 ding/123

提示成功,一看数据库也有数据了

OK


这里补充下:
对于test.jsp的   <html: form action="/user.do?status=insert">
要是普通的action就只要写<html: form action="/user">就可以了

我用的是DispathAction  所以要有个参数来标示,status对应于

struts配置文件里面的parameter

<action
      attribute="userForm"
      name="userForm"
      parameter="status"
      path="/user"
      scope="request"
      type="com.myssh.action.UserAction"
      validate="false" >
      <forward name="success" path="/success.jsp"></forward>
      <forward name="fail" path="/fail.jsp"></forward>
      </action><action
      attribute="userForm"
      name="userForm"
      parameter="status"
      path="/user"
      scope="request"
      type="com.myssh.action.UserAction"
      validate="false" >
      <forward name="success" path="/success.jsp"></forward>
      <forward name="fail" path="/fail.jsp"></forward>
      </action>



而insert对于UserAction类里面的方法

有什么问题请留言

源码下载地址:http://www.blogjava.net/Files/laoding/myssh.rar
里面的jar包比较多,我把它们去掉了,自己加上去


posted on 2008-09-05 15:18 老丁 阅读(7885) 评论(3)  编辑  收藏 所属分类: ssh

FeedBack:
# re: ssh+mysql简单例子实现
2009-06-11 12:18 | 不知名网友~
感谢,正想找找在ACTION中调用service的方式,这文章很有参考价值  回复  更多评论
  
# re: ssh+mysql简单例子实现
2010-09-18 21:20 | jinguizi
拜读了你的SSH+MYSQL的文章,觉得很不错,很合适我们初学者。
有一问题想咨询:我配置完毕,访问test.jsp文件,并提交表单时,出现了以下错误信息:
exception

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1175)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:285)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:189)
org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:82)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.startup.Catalina.start(Catalina.java:552)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

十分感谢。  回复  更多评论
  
# re: ssh+mysql简单例子实现
2012-03-22 21:14 | neely
楼主,add Spring capabilities这一步,没有找到"spring2.0 ORM/DAO/Hibernate3 Libraries-<Myeclipse-Library>“ 这一勾选项  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
本博客主为学习和复习之用,无关其他,想骂人的绕道
Email:dkm123456@126.com
大家一起交流进步
QQ:283582761


<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

留言簿(4)

我参与的团队

文章分类(50)

文章档案(48)

相册

朋友

搜索

  •  

积分与排名

  • 积分 - 95305
  • 排名 - 599

最新评论