SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录

SSH说的上是javaweb经典框架,不能说100%要会SSH框架,但是大部分公司都在用,说到框架,都会提到ssh吧,这次就以很简单的注册例子来整合SSH框架。整合框架要注意的是先每个框架单独测通后再整合,不然整合后出现问题比较难排查。 

准备工作:

在做一切之前先将可能使用到的SSHjar包进行导入,不一定为最简,但一定够用:

SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录_第1张图片

对于SSH整合,共使用到applicationContext.xml,web.xml,struts.xml,Person.bhm.xml四个配置文件,创建位置在下面详述。


applicationContext.xml文件配置参数: 

  1. ""  class="" >
  2. parent:子类实现父类
  3. scope:Spring中Bean的作用域一共有几个值?
  4. 默认单例,protoType为原型,可以创建多个Bean
  5. request session生命周期类型
  6. name:设置名称
  7. "teachingService" ref="theService">
  8. ref:引用
  9. value:相应的值

配置Hibernate框架内容:

applicationContext.xml:

位置  放在src下

1.BasicDataSource中连接数据库的各种参数property,其中有很多参数以供选择

SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录_第2张图片

2.SessionFacotry创建session对象的Bean

SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录_第3张图片

其中需要引用到DataSource,用设值注入,使用LoaclSessionFactory方法的父类AbstractSessionFactoryBean中的dataSource方法,将属性写入Bean,ref:引用数据库的dataSource。此时获得到sessionFactory。

SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录_第4张图片

还需要导入Hibernate配置文件中的show_sql的内容:Hibernate.Properties文件中的show_sql字段。和线程绑定模式的应用。

用法:

  
   
   
   
   
  
  
  
  
  
  
  true

  
  
  
  		
  			com/ssh/entity/Person.hbm.xml
  			      
  		
  	
  

3.创建实体类Person,添加属性构造和getter、setter方法

hbm映射文件:

位置hibernate jar包中

放在实体类的class下。

4.配置hbm文件,配置完成后将目录导入applicationContext.xml文件中value属性中。







    

       

           

               seq_newsId

           

       

       

       

    



5.创建Dao层接口,PersonDao为Person实体的dao。每一个实体使用时都需要dao,因为有特有的方法。不建议建立泛型Dao。

package com.ssh.Dao;

import java.util.List;

import com.ssh.entity.Person;

public interface PersonDao {

     public boolean login(Person person);

     public boolean add(Person person);

     public boolean update(Person person);

     public boolean delete(int pid);

     public Person queryById(int pid);

     public List queryAll();

}

 添加实现类Impl,在实现类中传入一个session对象,此时的sessionFactory需要从配置文件中注入才可以使用,注意此处不能注入接口,都需要注入实现类。

public class PersonDaoImpl implements PersonDao{

     private SessionFactory sessionFactory;

     boolean flag=false;

     public void setSessionFactory(SessionFactory sessionFactory) {

          this.sessionFactory = sessionFactory;

     }

     @Override

     public boolean login(Person person) {

          String hql = "from Person where pname=? and pwd=?";

          Session session = sessionFactory.openSession();

          Query q = session.createQuery(hql);

          q.setString(0, person.getPname());

          q.setString(1, person.getPwd());

          Object obj = q.uniqueResult();

          if (obj != null) {

              flag = true;

          }

          session.close();

          return flag;

     }

}

6.添加服务层。PersonService接口和PersonSercviceImpl实现类。

package com.ssh.Dao.Impl;

import java.util.List;

import com.ssh.Dao.PersonDao;

import com.ssh.Dao.PersonService;

import com.ssh.entity.Person;

public class PersonServiceImpl implements PersonService{

     private PersonDao ServiceDao;

     

     public void setServiceDao(PersonDao serviceDao) {

          ServiceDao = serviceDao;

     }

     @Override

     public boolean login(Person person) {

          

          return ServiceDao.login(person);

     }

     @Override

     public boolean add(Person person) {

          // TODO Auto-generated method stub

          return ServiceDao.add(person);

     }

     @Override

     public boolean update(Person person) {

          // TODO Auto-generated method stub

          return ServiceDao.update(person);

     }

     @Override

     public boolean delete(int pid) {

          // TODO Auto-generated method stub

          return ServiceDao.delete(pid);

     }

     @Override

     public Person queryById(int pid) {

          // TODO Auto-generated method stub

          return ServiceDao.queryById(pid);

     }

     @Override

     public List queryAll() {

          // TODO Auto-generated method stub

          return ServiceDao.queryAll();

     }

}

测试类Test:

Person person =new Person(0,"tom","123");

ApplicationContext ac=new ClasspathxmlContext("applicationContext.xml");

PersonService personService=(PersonService)ac.getBean("personSecivce");

boolean falg=personservice.login(person);

此时出现空指针,需要将两个实现类中的Bean注入到配置文件中,实现类引用sessionFactory。


 
  	
  
  
  	
  

添加Hibernate时遇到的问题:

SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录_第5张图片

1.注入Impl实现类时,使用到的setter注入,其中id必须和创建的sessionFactory以及setPersonDao的参数名称相同,id sessionFactory与

public void setSessionFactory(SessionFactory sessionFactory) {

          this.sessionFactory = sessionFactory;

     }

名称相同,id personDao和

public void setPersonDao(PersonDao personDao) {

          this.personDao = personDao;

     }

名称相同。

2.实体类中Person构造方法没写。

修改后编译成功,命令行成功显示flag登录的boolean值。

SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录_第6张图片


配置Struts2框架内容:

1.导入jar包

2.strut2和web配置文件:

web.xml:

加入file标签  

  

        struts2

        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    

    

        struts2

        /*

    



struts.xml:

修改常量

编写action标签获取result两种结果。









    

     

    

    

    

    

            /WEB-INF/jsp/error.jsp

        

        

            

        

 

    

    show.jsp

    login.jsp

    

   

    

3.编写jsp登录测试页面

login.jsp和show.jsp:

login.jsp

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

    pageEncoding="UTF-8"%>

    <%@ taglib  prefix="s" uri="/struts-tags" %>









Insert title here





    

    

    

    

    

    

       

           

           

       

    

    







show.jsp:

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

    pageEncoding="UTF-8"%>

    <%@ taglib prefix="s"  uri="/struts-tags" %>









Insert title here





    

       

           

           

           

       

           

               

                  

                  

                        

               

           

    
编号姓名密码
                                                                                                                 

4.创建Action类继承ActionSupport实现ModelDriven

使用MODEL第三种方式模型驱动创建实体类对象,编写login方法。

package com.ssh.Action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

import com.ssh.Dao.PersonService;

import com.ssh.entity.Person;

public class PersonAction extends ActionSupport implements ModelDriven {

    private Person person;

    private PersonService personService;

    private List list;

    public List getList() {

        return list;

    }

    public void setList(List list) {

        this.list = list;

    }

    public void setPersonService(PersonService personService) {

        this.personService = personService;

    }

    @Override

    public Person getModel() {

        // TODO Auto-generated method stub

        return person;

    }

    public String login() throws Exception {

        boolean flag = true;

        String path = INPUT;

        flag = personService.login(person);

        if (flag) {

            path = SUCCESS;

        }

        queryAll();

        return path;

    }

    public String queryAll() throws Exception {

        boolean flag = false;

        String path = INPUT;

        list = personService.queryAll();

        if (list != null) {

            path = SUCCESS;

        }

        return path;

    }

}

5.将PersonAction注入Spring配置文件中,,此处只能使用name属性,将从sessionFactory获取到的PersonDaoImpl的内容注入PersonAction。



  

  

web.xml:

在其中设置spring配置文件,将其在程序启动的同时就加载,使用Listener监听器。



    org.springframework.web.context.ContextLoaderListener







contextConfigLocation

WEB-INF/classes/applicationContext.xml

SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录_第7张图片

 

程序到这里实现了登录以及查询所有数据。

SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录_第8张图片

SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录_第9张图片


注意:在person模型驱动的时候,必须进行实例化Person。不可只定义对象。

模型驱动的用法没搞清楚。

SSH三大框架的搭建整合(Spring+Hibernate+Struts2)实现增删改查登录_第10张图片

你可能感兴趣的:(SSH)