【基于SSH框架的个人博客系统01】Eclipse搭建SSH框架详细流程

Eclipse搭建SSH框架搭建教程

 注意:本项目为博主初学Web开发时所写,所使用的方法都比较笨,不符合主流开发方法。例如,包管理应该使用Maven进行管理而不是手动导入,对前端后端代码的架构也并不是很清晰。大家学习思想即可,可以不用浪费时间在将这个项目跑起来。目前主流的技术应当是Spring+SpringMVC+Mybatis的SSM框架,配合Shiro做权限控制,Redis做缓存,也可以学习SpringBoot开发微服务。由于本博主已经保研,较少接触开发,故此项目也不再进行维护。

前期环境准备:

①   Java环镜

②   Eclipse4.6.2

③   Tomcat8.5

④   Struts2.3.41

⑤   Spring4.2.4

⑥   Hibernate4.3.11

⑦   mysql-5.6.35-winx64

⑧   Mysql-connector-java-5.1.26

⑨   Navicat for MySQL

其中①②③可以参照http://www.cnblogs.com/oucbl/p/5928511.html。

对于SSH框架的搭建,本人主要是参照http://blog.csdn.net/eson_15/article/details/51277324这篇博客来搭建的框架,其中的④⑤⑥⑦可以在里面下载到。

 

 

SSH框架各自的作用:

在开始搭建框架之前,先整体讲一下SSH框架各自的用途。首先是Struts框架,众所周知,一个网页有着各种各样的请求,比如注册账号,登录账号等请求,通过配置Struts框架,这些请求都会被拦截,由我们分配的Action进行处理,然后再根据我们的配置文件来进行转发。其次是Hibernate框架,它实现了数据库表与javabean的一一对应,使我们能够通过操纵类来操纵数据库。最后是Spring框架,它实现了SSH框架之间的解耦,通过配置文件,我们可以实现依赖注入。比如我有一个类A,其中有一个成员是类B,那么使用之前我们都需要先得到这个类的一个实例,正常情况下我们是通过new来实现。但是,使用了Spring框架之后,我们就可以通过配置文件将B依赖注入进A,在使用时不用管这个类的创建,只负责使用,大大方便了开发。可以说Spring框架就是SSH框架中的粘合剂,掌管着里面各个类。

 

开始搭建

 

首先附上项目目录结构图

【基于SSH框架的个人博客系统01】Eclipse搭建SSH框架详细流程_第1张图片

 

 

第一步:新建项目

新建一个Dynamic Web Project项目。然后右键点击项目-Properties-Java Build Path,将默认输出路径调整到项目目录下的WEB-INF/classes。(之后会解释)

【基于SSH框架的个人博客系统01】Eclipse搭建SSH框架详细流程_第2张图片

 

 

第二步:搭建Struts框架

①   进入WEB-INF中的lib,把struts所需jar包复制进来,之后右键项目刷新。(之后每次在eclipse之外的操作都要刷新项目,不再重复)

②   修改WEB-INF目录下的web.xml如下:

 


   
   S2SH
 
   
           struts2
           org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
   
 
   
           struts2
           /*
   
   
           index.jsp
   
    
   org.springframework.web.context.ContextLoaderListener 
    

 

 

 

 

 

③   新建一个TestAction类进行Struts框架的测试

 

package com.blog.action;
importcom.opensymphony.xwork2.ActionSupport;
 
public class TestAction extendsActionSupport{
       publicString execute() throws Exception{
              System.out.println("Struts2测试成功!!");
              return"success";
       }
}

 

 

 

④   在src目录下,新建struts.xml,内容如下:

 


   
 
   
       
           //类的目录
                  /index.jsp
              
       
   
 

 

 

 

 

 

⑤   在WebContent下新建index.jsp,之后都利用这个页面来检测。

 

<%@ page language="java"contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>




Insert titlehere


       访问save

 

 

 

 

 

总结:

解释一下在这里struts框架的作用。在Web.xml配置了之后,所有符合/*的链接都会被Struts框架中的org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter拦截链接,根据struts.xml的配置来进行转发,这里我们是转发到com.blog.action.TestAction这个类的public String execute()来处理,根据返回的String来转发网页。在struts中的配置有一个/index.jsp,即如果返回了success,就跳到/index.jsp这个网页。这是struts的一个用途。

 

【基于SSH框架的个人博客系统01】Eclipse搭建SSH框架详细流程_第3张图片

 

 

第三步:搭建Spring框架并且组合Struts框架

①   将Spring所需jar包拉进lib中。

②   在web.xml添加如下内容:

 

 
   org.springframework.web.context.ContextLoaderListener 
     
   
    
   contextConfigLocation 
   classpath:applicationContext.xml 
 

 

③   在src目录下新建一个applicationContext.xml,内容如下:

 


   
       
        
       
       
 

 

 

 

④   将struts中对应的class交给spring来管理,class后面的内容改为applicationContext.xml对应bean的id。

 


        /index.jsp
 

⑤   将TestAction改为

 

package com.blog.action;
import java.util.Date;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
importorg.hibernate.boot.registry.StandardServiceRegistryBuilder;
importorg.hibernate.boot.registry.internal.StandardServiceRegistryImpl;
import org.hibernate.cfg.Configuration;
importorg.hibernate.service.ServiceRegistry;
importcom.opensymphony.xwork2.ActionSupport;
public class TestAction extendsActionSupport{
       privateDate date;
       publicvoid setDate(Date date){
              this.date=date;
       }
       publicDate getDate(){
              returndate;
       }
       publicString execute() throws Exception{
              System.out.println("Struts2测试成功!!");
              System.out.println("Spring测试:目前时间是:"+date);
              return"success";
       }
}

 

 

 

总结:

解释一下Spring框架在这里的作用。Spring框架利用IOC的思想,减少了框架之间的耦合程度。比如,在TestAction中,我并没有对date进行new操作就直接使用,而是利用配置文件,在“无形之中”完成了date的创建。首先我们在web.xml配置spring框架的监听器,并且让程序一开始就读取spirng框架的配置文件。

 

 
   contextConfigLocation 
   classpath:applicationContext.xml 
 

 

这一段中的classpath:指的就是WEB-INF-classes这个路径。它会到这个路径下寻找applicationContext.xml并读取。在配置文件中

 


 

其实就完成了对date的创建,这个仔细琢磨一下应该能看懂。

由于我们使用spring来管理类的创建,所以struts 中action的class也改为ApplicationContext.xml中对应bean的id。

 

第四步,搭建Hibernate环境

①   将hibernate框架及数据库连接所需要用的jar包拉进lib中。

②   这里我们先使用到Navicat来完成对数据库的创建。

【基于SSH框架的个人博客系统01】Eclipse搭建SSH框架详细流程_第4张图片

 

③   接下来创建Dao层,DaoImpl层,以及bean层。

 

package com.blog.dao;
import org.hibernate.HibernateException;
import org.hibernate.Session;
public interface BaseDao { 
   public void saveObject(Object obj) throws HibernateException; 
   public Session getSession(); 
   public void setSession(Session session); 
} 
 
package com.blog.daoImpl;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import com.blog.dao.BaseDao;
public class UserDao implements BaseDao{ 
   private Session session; 
   @Override 
   public Session getSession() { 
        return session; 
   } 
   @Override 
   public void setSession(Session session) { 
       this.session = session; 
   } 
   @Override 
   public void saveObject(Object obj) throws HibernateException { 
       session.save(obj); 
    } 
} 
public class User {
       privateString username;
       privateString password;
       privateInteger id;
       publicString getUsername() {
              returnusername;
       }
       publicvoid setUsername(String username) {
              this.username= username;
       }
 
       publicString getPassword() {
              returnpassword;
       }
 
       publicvoid setPassword(String password) {
              this.password= password;
       }
       publicvoid setId(Integer id){
              this.id=id;
       }
       publicInteger getId(){
              returnid;
       }
}

 

 

 

③   在src目录下新建hibernate.cfg.xml和User.hbm.xml。

Hibernate.cfg.xml内容如下:

 




   
        
       
       true
       
       org.hibernate.dialect.MySQLDialect
       
       
       50
       
       
       23
       
       
       com.mysql.jdbc.Driver
       
       
       jdbc:mysql://localhost/mankind
       
       
       root
       
       
       123456
          
       20 
         
       true  
         
       false  
         
       true 
       
       gbk 
         
       org.hibernate.dialect.MySQLDialect  
                
         
   

User.hbm.xml内容如下:

 

 
 
 
 
    
        
             
        
       
       
    
 
 

 

 

 

④   TestAction内容更改如下:

 

package com.blog.action;
import java.util.Date;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
importorg.hibernate.boot.registry.internal.StandardServiceRegistryImpl;
import org.hibernate.cfg.Configuration;
importorg.hibernate.service.ServiceRegistry;
import com.blog.beans.User;
import com.blog.dao.BaseDao;
import com.blog.daoImpl.UserDao;
importcom.opensymphony.xwork2.ActionSupport;
import sun.security.timestamp.TSRequest;
public class TestAction extendsActionSupport{
       privateDate date;
       privatestatic Configuration configuration = null;
       privatestatic SessionFactory sessionFactory = null;
       privatestatic ServiceRegistry serviceRegistry = null;
       publicvoid setDate(Date date){
              this.date=date;
       }
       publicDate getDate(){
              returndate;
       }
       publicString execute() throws Exception{
              System.out.println("Struts2测试成功!!");
              System.out.println("Spring测试:目前时间是:"+date);
               try {
                      Configuration configuration = newConfiguration().configure();
                     //以下这两句是4.3的新用法
                     StandardServiceRegistryBuilderbuilder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
                     StandardServiceRegistryImplregistry = (StandardServiceRegistryImpl) builder.build();
                     SessionFactorysessionFactory = configuration.buildSessionFactory(registry);
                     Sessionsession = sessionFactory.openSession();
                     Transactiontx = session.beginTransaction();
                     Useruser=new User();
                     //user.setId(1);
                     user.setUsername("MK");
                     user.setPassword("123456");
                     BaseDaodao=new UserDao();
                     dao.setSession(session);
                     dao.saveObject(user);
                     tx.commit();
                     session.close();
                      } catch (HibernateException e) {
                       e.printStackTrace();
                      }
              return"success";
       }
}

 

总结:

到这里已经完成了Hibernate框架的搭建。Hibernate的思路如下,使用一个bean类,将java的基本数据与数据库中表的数据一一对应起来,比如这里的User类,属性中有id,username,password,分别对应数据表中的id,username和password,他们是一一对应的关系。并且在这里所有的属性都要设置set和get方法。那么hibernate框架通过什么来完成这种转换呢?在这里便是通过user.hbm.xml来实现。

 

    
        
             
        
       
       
    

name对应java中的字段,column对应数据库中的字段,通过这样的配置。Hibernate配置文件hibernate.cfg.xml中配置了账号,密码,数据库方言之类的数据库基本信息,同时通过来指定映射文件,即我们前面说的user与数据库中user表之间的映射关系通过User.hbm.xml就可以找到。

 

【基于SSH框架的个人博客系统01】Eclipse搭建SSH框架详细流程_第5张图片

 

第五步:完成Hibernate与Spring框架的整合。

①   在applicationContext.xml中配置dataSource、sessionFactory、transactionManager。

 

 
            
            
            
            
               
               
                    
                     
               
         
                  
               
               
                   
                       
                       
                       
                       
                   
               
               
            
            
            
            
        

 

 

 

②   由于在applicationContext.xml中配置了DataSource,可以删除hibernate.cfg.xml中相对应的四项(driverClass,jdbcURL,user,password)。其余的不用删,因为我们在spring中引用了hibernate.cfg.xml。

③   修改BaseDao

 

public interface BaseDao { 
    publicvoid saveObject(Object obj) throws HibernateException; 
} 

④   修改UserDao

 

public class UserDao implements BaseDao {
       privateSessionFactory sessionFactory;
        //当需要使用sessoinFactory的时候,Spring会将sessionFactory注入进来 
    publicvoid setSessionFactory(SessionFactory sessionFactory) { 
       this.sessionFactory = sessionFactory; 
    }   
    protectedSession getSession() { 
       //从当前线程获取session,如果没有则创建一个新的session 
       return sessionFactory.getCurrentSession(); 
    } 
    publicvoid saveObject(Object obj) throws HibernateException { 
       getSession().save(obj);
    }
}

 

 

 

⑤   修改TestAction

 

public class TestAction extends ActionSupport{
       privateDate date;
       privateBaseDao userDao;
       publicvoid setDate(Date date){
              this.date=date;
       }
       publicDate getDate(){
              returndate;
       }
       publicvoid setUserDao(BaseDao userDao){
              this.userDao=userDao;
       }
       publicBaseDao getUserDao(){
              returnuserDao;
       }
       publicString execute() throws Exception{
              System.out.println("Struts2测试成功!!");
              System.out.println("Spring测试:目前时间是:"+date);
               try {
                     Useruser=new User();
                     user.setUsername("MK");
                     user.setPassword("123456");
                     userDao.saveObject(user);
                      } catch (HibernateException e) {
                       e.printStackTrace();
                      }
              return"success";
       }

 

⑥   修改applicationContext.xml,依赖注入TestAction和UserDao

 

 
            
 

 
         
         

 

 

 

总结:

很明显,在Hibernate和Spring整合之前,我们在TestAction中需要写很长很长的代码来获得Session,整合之后,代码量大大减少。需要注意的地方是,Spring是针对接口来编程的,在TestAactoin中,userDao不能声明为userDao类型,而是应该声明为它的接口BaseDao,否则会报错。这个坑了我几个小时的时间..

框架到这里就差不多都打通了,剩下的地方再根据需要改一改就可以开始开发了。

 

 

----------------------------------------------------------------------------

本项目下载地址:

github:https://github.com/SCAUMankind/SSHBlogSystem

你可能感兴趣的:(基于SSH框架的博客系统)