`
kyo100900
  • 浏览: 633869 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2+Spring+Hibernate In Action(一)

阅读更多
前言:
关于Struts2系列的文章网上基本上都有了,但鲜有比较系统的Demo。这几天朋友要我做了一个面试题,于是我用Struts2做了这个比较完整的Demo。
本程序用到的主要技术为:
Struts2,Spring,Hibernate,DWR,JavaMail,以及少部分正则表达式。其实都是非常基础简单的应用,目的就是让大家看看这些框架是如何协同工作的。开发平台为:Winxp2+JDK1.5+Tomcat5.5+MySQL5.0。
 
以下是本例子的需求:
 
每5分钟遍历一下页面(http://post.baidu.com/f?kw=%D2%EC%C8%CB%B0%C1%CA%C0%C2%BC),
请统计页面中"《"和"》"之间有多少个"异人"这两个字,
将这数值弹出一个alert并且发信给指定的邮件地址 获取页面内所有地方的以"<< >>"为标示的这个符号代表书名号,获取之中的内容 <<使用正则表达式>> 功能点:
1)URL抓取页面。
2)正则表达式匹配。
3)邮件系统调用 请注意设计思路和代码规范。
 
 
第一部分:
1.       设计实体
本程序共有四个实体:
User:用户基本信息,可用来登录本系统。
Article:存储每次通过正则从URL抓取的目标数据总数。
Log:邮件发送时的日志类。
Mail:邮件发送列表。
 
两个抽象实体,目的是为了承继。
PrimaryEntiry:承继主键(id)
CommonEntity:承继候选键(name)
实体之间的关系:
只有Log与Mai之间是多对一的关系。在看下面的Pojo类的时候需要注意一下,我这里用的是JPA,关系都写在Annotation里了。
 
 
以下是这几个实体详细信息:
 
PrimaryEntity.java
java 代码
  1. /**  
  2.  * @author SuperLeo  
  3.  * @date 2007-6-15  
  4.  * @version 1.0  
  5.  * �实体类的父类,抽象出ID部分  
  6.  */  
  7. package com.leo.po;   
  8.   
  9. import javax.persistence.GeneratedValue;   
  10. import javax.persistence.GenerationType;   
  11. import javax.persistence.Id;   
  12. import javax.persistence.MappedSuperclass;   
  13.   
  14. /**  
  15.  * @author SuperLeo  
  16.  */  
  17. @MappedSuperclass  
  18. // 用来声明这个是父类,子类可以继承属   
  19. public abstract class PrimaryEntity {   
  20.   
  21.     @Id  
  22.     @GeneratedValue(strategy = GenerationType.AUTO)   
  23.     private long id;   
  24.   
  25.     /**  
  26.      * @return 返回id  
  27.      */  
  28.     public long getId() {   
  29.         return id;   
  30.     }   
  31.   
  32.     /**  
  33.      * @param id  
  34.      *            设置id  
  35.      */  
  36.     public void setId(long id) {   
  37.         this.id = id;   
  38.     }   
  39.   
  40. }   

 CommonEntity.java

java 代码
  1. /**  
  2.  * @author SuperLeo  
  3.  * @date 2006-6-15  
  4.  * @version 1.0  
  5.  * 名称抽象实体类  
  6.  */  
  7. package com.leo.po;   
  8.   
  9. import javax.persistence.Column;   
  10. import javax.persistence.MappedSuperclass;   
  11.   
  12. /**  
  13.  * @author SuperLeo  
  14.  *   
  15.  */  
  16. @MappedSuperclass  
  17. // 用来声明这个是父类,子类可以继承属性   
  18. public abstract class CommonEntity extends PrimaryEntity {   
  19.   
  20.     @Column(name = "name")   
  21.     private String name;   
  22.   
  23.     /**  
  24.      * @return 返回名称  
  25.      */  
  26.     public String getName() {   
  27.         return name;   
  28.     }   
  29.   
  30.     /**  
  31.      * @param name  
  32.      *            设置名称  
  33.      */  
  34.     public void setName(String name) {   
  35.         this.name = name;   
  36.     }   
  37.   
  38. }   

 

Article.java

java 代码
  1. /**  
  2.  * 存储每次抓取的数量  
  3.  */  
  4. package com.leo.po;   
  5.   
  6. import java.util.Date;   
  7.   
  8. import javax.persistence.Column;   
  9. import javax.persistence.Entity;   
  10. import javax.persistence.Table;   
  11.   
  12. /**  
  13.  * @author superleo  
  14.  *   
  15.  */  
  16. @Entity  
  17. @Table(name = "tbl_article")   
  18. public class Article extends PrimaryEntity {   
  19.   
  20.     /**  
  21.      * 文章点击量  
  22.      */  
  23.     @Column(name = "count_size")   
  24.     private int count;   
  25.   
  26.     /**  
  27.      * 文章建立时间  
  28.      */  
  29.     @Column(name = "create_date")   
  30.     private Date createDate;   
  31.   
  32.     public int getCount() {   
  33.         return count;   
  34.     }   
  35.   
  36.     public void setCount(int count) {   
  37.         this.count = count;   
  38.     }   
  39.   
  40.     public Date getCreateDate() {   
  41.         return createDate;   
  42.     }   
  43.   
  44.     public void setCreateDate(Date createDate) {   
  45.         this.createDate = createDate;   
  46.     }   
  47.   
  48. }   

Log.java

java 代码
  1. /**  
  2.  * 邮件列表  
  3.  */  
  4. package com.leo.po;   
  5.   
  6. import java.util.Date;   
  7.   
  8. import javax.persistence.Column;   
  9. import javax.persistence.Entity;   
  10. import javax.persistence.JoinColumn;   
  11. import javax.persistence.ManyToOne;   
  12. import javax.persistence.Table;   
  13.   
  14. /**  
  15.  * @author superleo  
  16.  *   
  17.  */  
  18.   
  19. @Entity  
  20. @Table(name = "tbl_log")   
  21. public class Log extends PrimaryEntity {   
  22.   
  23.     @Column(name = "log")   
  24.     private String log;   
  25.   
  26.     @Column(name = "create_date")   
  27.     private Date createDate;   
  28.   
  29.     @ManyToOne  
  30.     @JoinColumn(name = "fk_mail_id")   
  31.     private Mail mail;   
  32.   
  33.     public Mail getMail() {   
  34.         return mail;   
  35.     }   
  36.   
  37.     public void setMail(Mail mail) {   
  38.         this.mail = mail;   
  39.     }   
  40.   
  41.     public String getLog() {   
  42.         return log;   
  43.     }   
  44.   
  45.     public void setLog(String log) {   
  46.         this.log = log;   
  47.     }   
  48.   
  49.     public Date getCreateDate() {   
  50.         return createDate;   
  51.     }   
  52.   
  53.     public void setCreateDate(Date createDate) {   
  54.         this.createDate = createDate;   
  55.     }   
  56.   
  57. }   

 

 Mail.java

java 代码
  1. /**  
  2.  * 邮件列表  
  3.  */  
  4. package com.leo.po;   
  5.   
  6. import java.util.List;   
  7.   
  8. import javax.persistence.CascadeType;   
  9. import javax.persistence.Column;   
  10. import javax.persistence.Entity;   
  11. import javax.persistence.OneToMany;   
  12. import javax.persistence.Table;   
  13.   
  14. /**  
  15.  * @author superleo  
  16.  *   
  17.  */  
  18.   
  19. @Entity  
  20. @Table(name = "tbl_mail")   
  21. public class Mail extends CommonEntity {   
  22.   
  23.     @Column(name = "email")   
  24.     private String email;   
  25.   
  26.     @OneToMany(mappedBy = "mail", cascade = { CascadeType.ALL })   
  27.     private List<log></log> log;   
  28.   
  29.     public String getEmail() {   
  30.         return email;   
  31.     }   
  32.   
  33.     public void setEmail(String email) {   
  34.         this.email = email;   
  35.     }   
  36.   
  37.     public List<log></log> getLog() {   
  38.         return log;   
  39.     }   
  40.   
  41.     public void setLog(List<log></log> log) {   
  42.         this.log = log;   
  43.     }   
  44.   
  45. }   

 

 User.java

java 代码
  1. /**  
  2.  * @author SuperLeo  
  3.  * @date 2006-6-15  
  4.  * @version 1.0  
  5.  * 用户实体类  
  6.  */  
  7. package com.leo.po;   
  8.   
  9. import javax.persistence.Column;   
  10. import javax.persistence.Entity;   
  11. import javax.persistence.Table;   
  12.   
  13. /**  
  14.  * @author SuperLeo  
  15.  *   
  16.  */  
  17.   
  18. @Entity  
  19. @Table(name = "tbl_user")   
  20. // 映射的表叫 person   
  21. public class User extends CommonEntity {   
  22.   
  23.     @Column(name = "password")   
  24.     private String password;   
  25.   
  26.     @Column(name = "email")   
  27.     private String email;   
  28.   
  29.     /**  
  30.      * @return 返回电子邮件  
  31.      */  
  32.     public String getEmail() {   
  33.         return email;   
  34.     }   
  35.   
  36.     /**  
  37.      * @param email  
  38.      *            设置电子邮件  
  39.      */  
  40.     public void setEmail(String email) {   
  41.         this.email = email;   
  42.     }   
  43.   
  44.     /**  
  45.      * @return 返回用户密码  
  46.      */  
  47.     public String getPassword() {   
  48.         return password;   
  49.     }   
  50.   
  51.     /**  
  52.      * @param passowd  
  53.      *            设置用户密码  
  54.      */  
  55.     public void setPassword(String password) {   
  56.         this.password = password;   
  57.     }   
  58.   
  59. }   

 

 

2.     DAO与Service实现
正如大家所想,在Java世界里,DAO与Servcie的实现是大同小异的。这里我的例子足够小了,而且其实有了Hibernate就已经具备了DAO的能力,因些这里只有Service层的设计。
先定义一个父接口,把尽可能相同的事都在父类里面搞定:
 
IGenericService.java
java 代码
  1. /**  
  2.  * @author SuperLeo  
  3.  * @date 2006-6-15  
  4.  * @version 1.0  
  5.  * Service层最顶层接口  
  6.  */  
  7. package com.leo.service;   
  8.   
  9. import java.io.Serializable;   
  10. import java.util.List;   
  11.   
  12. import org.hibernate.Session;   
  13.   
  14. import com.leo.util.PageInfo;   
  15.   
  16. /**  
  17.  * @author superleo  
  18.  *   
  19.  */  
  20. public interface IGenericServiceextends Serializable> {   
  21.   
  22.     /**  
  23.      * 保存实体  
  24.      *   
  25.      * @param t  
  26.      */  
  27.     public PK store(T t);   
  28.   
  29.     /**  
  30.      * 加载单个实体  
  31.      *   
  32.      * @param className  
  33.      * @param id  
  34.      * @return  
  35.      */  
  36.     public T load(PK id);   
  37.   
  38.     /**  
  39.      * 更新实体  
  40.      *   
  41.      * @param t  
  42.      */  
  43.     public void update(T t);   
  44.   
  45.     /**  
  46.      * 删除实体  
  47.      *   
  48.      * @param t  
  49.      */  
  50.     public void delete(T t);   
  51.   
  52.     /**  
  53.      * 分页计算总数  
  54.      *   
  55.      * @param session  
  56.      * @param hql  
  57.      * @return  
  58.      * @throws Exception  
  59.      */  
  60.     public int getTotalCount(Session session, String hql) throws Exception;   
  61.   
  62.     /**  
  63.      * 根据名称精确查找  
  64.      *   
  65.      * @param className  
  66.      * @param name  
  67.      * @return  
  68.      */  
  69.     public T findByNameExact(String name);   
  70.   
  71.     /**  
  72.      * 根据名称模糊查找  
  73.      *   
  74.      * @param className  
  75.      * @param name  
  76.      * @return  
  77.      */  
  78.     List<t></t> findByName(String name, PageInfo pageInfo) throws Exception;   
  79.   
  80.     /**  
  81.      * 查找所有记录  
  82.      *   
  83.      * @param hql  
  84.      * @param pageInfo  
  85.      * @return  
  86.      * @throws Exception  
  87.      */  
  88.     List<t></t> findByAll(final String hql, PageInfo pageInfo) throws Exception;   
  89.   
  90.     /**  
  91.      * 查找所有记录  
  92.      *   
  93.      * @param hql  
  94.      * @param pageInfo  
  95.      * @return  
  96.      * @throws Exception  
  97.      */  
  98.     List<t></t> findByAll() throws Exception;   
  99.   
  100.     /**  
  101.      * 删除全部  
  102.      *   
  103.      * @param hql  
  104.      * @return  
  105.      * @throws Exception  
  106.      */  
  107.     public List<t></t> deleteByAll(final String hql) throws Exception;   
  108. }   
以及它的实现
  • lib.part2.rar (4.8 MB)
  • 描述: 源代码所需要的Jar.part2
  • 下载次数: 6929
  • lib.part1.rar (4.8 MB)
  • 描述: 源代码所需要的Jar.part1
  • 下载次数: 6172
  • 源代码.rar (1.6 MB)
  • 描述: 项目源代码+MYSQL 脚本 + 所需要的jar.part3
  • 下载次数: 8427
分享到:
评论
11 楼 kingcxw 2008-08-05  
学习~~~~~~~~~~~~~~~~~
10 楼 depravedangel 2008-08-04  
备注一下,以后慢慢看
9 楼 gongchangming 2008-07-05  
照片是本人吗~!好漂亮啊~!
8 楼 xtwcw 2008-05-19  
谢谢  学习中
7 楼 kingpeixin 2008-01-14  
灰熊不错的说,继续跟踪学习
6 楼 ken1984 2008-01-10  
正则,说实话,在几年前用PHP的时候曾经使用非常频繁,而且写正则感觉很有成就感,呵呵,实际上对使用的人来说就一些标记而已,如果只是记那些东西,对一个人的技术能力没有太大关系。
5 楼 andyjames 2008-01-09  
非常感谢。向你学习
4 楼 huhaitao 2007-11-19  
org.springframework.mail.MailSendException; nested exception details (1) are:
Failed message 1:
com.sun.mail.smtp.SMTPSendFailedException: 553 You are not authorized to send mail, authentication is required

at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1275)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:895)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:524)
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:391)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:300)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:286)
at com.leo.util.JavaMailSenderUtil.sendMail(JavaMailSenderUtil.java:45)
at com.leo.service.impl.ArticleServiceImpl.storeByURL(ArticleServiceImpl.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:199)
at $Proxy18.storeByURL(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)

帮忙看一下这是什么问题?谢谢!
3 楼 kyo100900 2007-11-01  
如果下载了原代码需要修改两个地方:
1.src下的leo.conf文件,里面改你数据用户,密码,以及你的邮件服务器,还有账号和密码
2.数据库表tbl_mail里的邮件改成你自己的邮件,这样项目运行后,你才知道你到底有没有收到信。
2 楼 kyo100900 2007-11-01  
其它的Service只需要继承它了,就可以很方便的使用了,要编码的地方不是特别的多了。Javaeye Blog总出问题,只能这样发给大家看了,详细的代码会提交上来的。下面在第二篇来讲讲Spring的配置。
1 楼 kyo100900 2007-11-01  
GenericServiceImpl.java

/**
* 顶层父类
*/
package com.leo.service.impl;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;

import com.leo.service.IGenericService;
import com.leo.util.PageInfo;

/**
* @author superleo
*
*/
public class GenericServiceImpl<T, PK extends Serializable> implements
IGenericService<T, PK> {

private Class<T> type;

private HibernateTemplate hibernateTemplate;

public GenericServiceImpl(Class<T> type) {
this.type = type;
}

@Transactional
public void delete(T t) {
hibernateTemplate.delete(t);
}

public T load(PK id) {
return (T) hibernateTemplate.get(type, id);
}

@Transactional
public PK store(T t) {
return (PK) hibernateTemplate.save(t);
}

@Transactional
public void update(T t) {
hibernateTemplate.update(t);
}

public T findByNameExact(String name) {
List<T> list = this.getHibernateTemplate().find(
"from " + type.getName() + " e where e.name = ? ", name);
return list != null && list.size() == 1 ? list.get(0) : null;
}

public List<T> findByName(String name, PageInfo pageInfo) throws Exception {
String hql = "from " + type.getName() + " e where e.name like '%"
+ name + "%' ";
return this.findByAll(hql, pageInfo);
}

public List<T> findByAll() throws Exception {
String hql = "from " + type.getName() + " e";
System.out.println(hql);
return this.getHibernateTemplate().find(hql);
}

public List<T> findByAll(final String hql, PageInfo pageInfo)
throws Exception {

List<T> pagelist = null;
Session session = this.getHibernateTemplate().getSessionFactory()
.openSession();

pageInfo.setRecordCount(this.getTotalCount(session, hql));
Query query = session.createQuery(hql);
int start = (pageInfo.getPage() - 1) * pageInfo.getPageSize();
int rowNum = pageInfo.getPageSize();
query.setFirstResult(start);
query.setMaxResults(rowNum);
pagelist = query.list();

return pagelist;

}

public List<T> deleteByAll(final String hql) throws Exception {

List<T> pagelist = null;
Session session = this.getHibernateTemplate().getSessionFactory()
.openSession();

Query query = session.createQuery(hql);
query.executeUpdate();

return pagelist;

}

// 取得总数
public int getTotalCount(Session session, String hql) throws Exception {
Integer amount = new Integer(0);
int sql_from = hql.indexOf("from");
int sql_orderby = hql.indexOf("order by");// 为了改进
String countStr = "";

if (sql_orderby > 0) {
countStr = "select count(*) "
+ hql.substring(sql_from, sql_orderby);
} else
countStr = "select count(*) " + hql.substring(sql_from);

Query query = session.createQuery(countStr);
if (!query.list().isEmpty()) {
amount = new Integer(query.list().get(0).toString());
} else
return 0;
return amount.intValue();
}

public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}

public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}

}

相关推荐

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    经典struts2+spring2+hibernate3

    经典的struts2+spring2+hibernate3编程。 实现为MySQL,带有技术说明文档,sql文档。 是学习struts2+spring2+hibernate3编程的经典案例。 核心为show.action

    Struts2+Spring+Hibernate In Action

    Java框架:Struts2+Spring+Hibernate

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。 4.在服务端分页查询功能,优点:实时性:跳页才查询。数据量小:只加载当前页的记录...

    struts2+spring3+hibernate4 + UI 组件(easyui)+代码生成器+共通封装+Spring_security权限

    架构技术: struts2+spring3+hibernate4 + UI 组件(easyui)+Spring_security权限 配置思想: Convention 零配置(不需要任何配置文件) 优点; [1].代码生成器(单表的增删改查完美生成) 注意:包括JSP页面的生成...

    struts2+spring+hibernate整合示例

    SSH整合示例(详情见我博客专栏)之前的博客我们总结了spring基础、spring分别整合struts2、hibernate、mybatis等,今天我们来同时整合下 struts、spring、hibernate,也就是所谓的 ssh 。 整合流程: 1 首先整合...

    struts1.2+spring2.0+hibernate3.1框架整合实例

    采用在web.xml中加载spring配置文件的方法降低struts和spring的耦合度,使用自定义的MyDelegatingRequestProcessor类来代替spring的DelegatingRequestProcessor类来解决spring中action的bean的重复配置问题。...

    Struts2+Hibernate+Spring整合实例

    Struts2+Hibernate+Spring整合实例,登陆注册实例,简单来说,Spring通过IoC容器上管(Struts2)Action的创建并依赖注入给控制器,下管(hibernate)SessionFactory的创建并依赖注入给DAO组件,是一个巨大的工厂

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...

    Spring 2.0 + Struts 1.2 + Hibernate 3.2 + DWR 2.0 的JavaEE应用示例

    总结,该例示注释非常详细,演示Spring托管Hibernate和Struts的Action, 以及Spring的事务声明(包括1.x与2.x的用法)与非事务声明的使用方式。 使用DWR可以方便的使用Spring托管的持久层功能。 目的:希望广大Java...

    struts2+hibernate+spring+ibatis 小实例

    struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+...

    struts2+spring+hibernate

    struts2+spring+hibernate这个小项目实现了对Equipment的增删改查操作 对初学者有很大的帮助。完整版。包括了dao,action,domain,service,util。

    Struts1.2+Spring2.5+Hibernate3.2+Jmesa2.4.3+Jmesatag实例2分页A

    一个Struts1.2+Spring2.5+Hibernate3.2+Jmesa2.4.3+JmesaTag实现的强大分页控件例子 里 面有action实现分页和标签实现分页2个例子 action实现的分页 包括了表头排序,导出为PDF,TXT, excel等格式 jar包和数据库...

    struts2.4+spring3.1+hibernate4.1的SSH框架

    SSH 为 struts2.4+spring3.1+hibernate4.1的一个集成框架,是目前较流行的一种Web应用程序开源框架。  集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建...

    Struts+Spring+Hibernate快速入门

    本文是开发基于spring的web应用的入门文章,前端采用Struts MVC框架,中间层采用spring,后台采用Hibernate。  本文包含以下内容:  •配置Hibernate和事务  •装载Spring的applicationContext.xml文件  •...

    struts2+spring+hibernate,简单的登陆页面

    struts2+spring+hibernate,eclipse10.0+tomcat8.0,简单的登陆页面

    maven3+struts2+spring+ibatis

    maven3+struts2+spring+ibatis,本来是用maven3+struts2+spring+hibernate但考虑到hibernate在多表级联查询的时候执行效率不高,所以改用性能更好不过sql比较麻烦的的ibatis,本项目只有登录和插入数据,仅供参考: ...

    Struts+Spring+Hibernate in Action中文版.rar

    Struts in Action中文版+Spring in Action中文版+Hibernate in Action中文版,不好意思,还是没找到Hibernate in Action的第三章,大家见谅了。。

    Struts2+hibernate+spring的常见面试题

    Apache Struts2的是一个在Java中构建Web应用程序开源框架。 Struts2是基于OpenSymphony的WebWork的框架。它是Struts1的提高,它更加灵活,易于使用和扩展。 Struts2的核心组成部分是Action,拦截器和结果页。 ...

    ssh2(struts2+spring2.5+hibernate3.3)自动生成模版

    4个xml文件(applicationContext-dao.xml(dao注入配置),applicationContext-service.xml(service注入配置),action-servlet.xml(action注入配置),struts-{自定义的存放包名}.xml(struts2的action配置文件)) ...

Global site tag (gtag.js) - Google Analytics