1. 程式人生 > >SSH2(Struts2.1+hibernate4.1+spring4.1)

SSH2(Struts2.1+hibernate4.1+spring4.1)

經過css佈局後這裡寫圖片描述
hibernate3中文文件http://download.csdn.net/detail/wsk1103/9657379
使用struts2.1+hibernate4.1+spring4.1,實現一個擁有簡單的註冊和登入的小程式
步驟
1. 使用myeclipce2016CI3建立一個名為ssh2的ssh2專案
2. 為myeclipce建立一個hibernate到MySQL的連線
3. 使用myeclipce自帶的嚮導功能建立struts2.1框架
4. 建立spring4.1框架
5. 建立hibernate4.1框架
6. 利用hibernate的反射生成User.java(POJO)和User.hbm.xml
7. 修改applicationContext.xml檔案
8. 編寫DAO層程式碼(用於與資料庫進行操作)
9. 編寫service層程式碼(用於連線DAO層)
10. 編寫action層(溝通jsp和service層)
11. 繼續新增程式碼到applicationContext.xml中(注入)
12. 修改struts2.xml(響應jsp操作)
13. 編寫jsp層
專案結構圖 這裡寫圖片描述


實現:
1. 使用myeclipce建立一個名為ssh2的專案
2. 為myeclipce建立一個hibernate連線MySQL的連線,
2.1 建立方法為 Windows->perspective->Open Perspective->MyEclipse Hibernate
2.2 在圖中空白處右鍵->new一個新的資料庫連線 這裡寫圖片描述
2.3 然後建立連線 這裡寫圖片描述
2.4 使用navicat forMySQL建立名為hibernate的資料庫並建立user的表 這裡寫圖片描述
3. 利用嚮導自動匯入struts2.1包這裡寫圖片描述
URL要改成如圖所示 這裡寫圖片描述
4. 利用嚮導直接建立spring4.1,使用預設設定
5. 利用嚮導直接建立hibernate4.1 這裡寫圖片描述

5.1使用剛才建立的hibernate-MySQL的連線,然後點選finish 這裡寫圖片描述
6. 在剛才建立的user表反射生成userPOJO和user.hbm.xml(自動生成後自動注入到applicationContext.xml中)
6.1 反射操作:在user表右鍵->hibernate reverse engineering ,資訊填寫後finish 這裡寫圖片描述
7. 修改applicationContext.xml檔案,文中紅字部分

<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/hibernate"> </property> <property name="username" value="root"></property> <property name="password" value="123456"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">true</prop>//顯示sql,便於除錯,也可以不寫 <prop key="hibernate.hbm2ddl.auto">update</prop>//更新資料庫資料,可以不寫 </props> </property> <property name="mappingResources"> <list> <value>com/wsk/bean/User.hbm.xml</value></list> </property></bean>

8.編寫DAO層,目的是通過hibernate操作資料庫
8.1 編寫介面

package com.wsk.dao;

public interface UserDAO{
    public <T> void register(T t);//註冊
    public boolean login(String user);//登入
}

8.2 實現介面

package com.wsk.dao;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

public class UserDAOImpl implements UserDAO {
    private SessionFactory sessionFactory;
    //登入,通過連線資料進行判斷該使用者是否存在或者密碼是否正確
    public boolean login(String user) {
        //連線資料庫進行判斷
        List list=this.getSession().createQuery(user).list();
        //如果存在
        if (!list.isEmpty()){
            //轉化形式
            Iterator iterator=list.iterator();
            String getString=(String) iterator.next();
            if (getString!=null||getString!="")
                return true;
        }
        return false;
    }
    //註冊功能
    public <T> void register(T t) {
        // 儲存到資料庫
        this.getSession().save(t);
    }
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    public Session getSession(){
        //hibernate4必須用openSession,不能用getCurrentSession
        return sessionFactory.openSession();
    }
}

9.編寫service層,用於連線DAO層

package com.wsk.service;

import com.wsk.dao.UserDAOImpl;
public class Service<T> {
    private UserDAOImpl userDAOImpl;

    public boolean doLogin(String name,String password){
        if (name==null||password==null)
            return false;
        String sqlString="select u.password from "
                + "com.wsk.bean.User u where u.name='"+name
                +"' and password='"+password+"'";
        if (userDAOImpl.login(sqlString)){
            return true;
        }
        return false;
    }

    public void register(T user){
        userDAOImpl.register(user);
    }
    public UserDAOImpl getUserDAOImpl() {
        return userDAOImpl;
    }
    public void setUserDAOImpl(UserDAOImpl userDAOImpl) {
        this.userDAOImpl = userDAOImpl;
    }
}

10.編寫action層,用於連線jsp和service層

package com.wsk.action;

import com.opensymphony.xwork2.ActionSupport;
import com.wsk.bean.User;
import com.wsk.service.Service;

public class UserAction extends ActionSupport{
    private String name;
    private String password;
    User user=new User();
    Service<User> service=new Service<User>();

    public String login(){
        if (service.doLogin(name, password)){
            return SUCCESS;
        }
        return ERROR;
    }

    public String register(){
        if (name.isEmpty()||name==""||password.isEmpty()||password=="")
            return ERROR;
        user.setName(name);
        user.setPassword(password);
        service.register(user);
        return SUCCESS;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Service<User> getService() {
        return service;
    }
    public void setService(Service<User> service) {
        this.service = service;
    }
}

11.修改applicationContext.xml檔案,實現注入,

    <bean id="dao" class="com.wsk.dao.UserDAOImpl">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <bean id="service" class="com.wsk.service.Service">
        <property name="userDAOImpl" ref="dao"></property>
    </bean>
    <bean id="useraction" class="com.wsk.action.UserAction">
        <property name="service" ref="service"></property>
    </bean>

總:applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" xmlns:tx="http://www.springframework.org/schema/tx">
    <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/hibernate">
        </property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
        <property name="mappingResources">
            <list>
                <value>com/wsk/bean/User.hbm.xml</value></list>
        </property></bean>
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager" />
    <bean id="dao" class="com.wsk.dao.UserDAOImpl">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <bean id="service" class="com.wsk.service.Service">
        <property name="userDAOImpl" ref="dao"></property>
    </bean>
    <bean id="useraction" class="com.wsk.action.UserAction">
        <property name="service" ref="service"></property>
    </bean>
</beans>

12.修改struts2.xml,文中紅色部分

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software 
Foundation//DTD Struts Configuration 2.1//EN" 
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="1" extends="struts-default">
        <action name="useraction" class="com.wsk.action.UserAction">
            <result>success.jsp</result>
            <result name="error">error.jsp</result>
        </action>
    </package>
</struts>  

13.編寫JSP
13.1 編寫登入介面login.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>login</title>
  </head>
  <body>
    <form action="useraction!login" method="post">
        使用者名稱:<input type="text" name="name"><br>
        密&nbsp;&nbsp;&nbsp;&nbsp;碼:<input type="password" name="password"><br>
        <input type="submit" value="登入"><br>
    </form>
    <a href="register.jsp">註冊</a>
  </bod1y>
</html>

13.2 編寫註冊介面 register.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>register</title>
  </head>
  <body>
     <form action="useraction!register" method="post">
        使用者名稱:<input type="text" name="name"><br>
        密&nbsp;&nbsp;&nbsp;&nbsp;碼:<input type="password" name="password"><br>
        <input type="submit" value="確定">
    </form>
    <a href="index.jsp">返回</a>
  </body>
</html>

13.3 編寫登入成功頁面 success.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>success</title>
  </head>
  <body>
    <s:property value="name"/> welcom.<br>
    <a href="index.jsp">返回</a>
  </body>
</html>

13.4 編寫登入失敗頁面error.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>error</title>
  </head>
  <body>
    登入錯誤<br>
    <a href="index.jsp">返回</a>
  </body>
</html>

總結:
1. 第一次配置好的時候,忘記在applicationContext.xml中新增

<property name="driverClassName"
            value="com.mysql.jdbc.Driver">
        </property>

使得連線資料庫的時候找不到驅動,報錯
org.hibernate.exception.GenericJDBCException: Could not open connection
2. spring整合hibernate4.1的時候,要獲取session的時候,使用getCurrentSession,別用openSession. (原因和如何使用getCurrentSession 見連線 http://blog.csdn.net/wsk1103/article/details/53222352

    public Session getSession(){
        return sessionFactory.getCurrentSession();
    }

相關推薦

SSH2(Struts2.1+hibernate4.1+spring4.1)

經過css佈局後 hibernate3中文文件http://download.csdn.net/detail/wsk1103/9657379 使用struts2.1+hibernate4.1+spring4.1,實現一個擁有簡單的註冊和登入的小程式 步驟

spring4.1+hibernate4.3整合學習 問題記錄1

1,hibernate的方言配置 <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 詞句影響hibernate轉換的sql語句,會把hql語句轉換成

最新eclipse整合Struts2.3.29+Hibernate5.2.1+Spring4.3.1(三)Struts+Hibernate+spring篇

繼續,我又新建一個專案sshTest,把shDemo的程式碼都移進去(shDemo拿去幹別的事了) 1.引入spring所需jar包 這裡不僅需要spring的jar包 還需要hibernate中兩個資料來源包 另外還有一個aspectjweaver.jar包,這個包

Sping cache 資料(一。Spring4.1新特性——Spring快取框架增強)

Spring 4.1提供了對jcache的支援,並對cache抽象部分進行了一些簡單的增強。在整合jcache時是非常費勁的,版本之間各種不相容,不建議用於正式環境,在正式環境中可以使用如Guava Cache或Ehcache。   jcache依賴:

spring4.1.8初始化原始碼學習三部曲之二:setConfigLocations方法

本章是學習spring4.1.8初始化原始碼的第二篇,前一章《spring4.1.8初始化原始碼學習三部曲之一:AbstractApplicationContext構造方法》對AbstractApplicationContext的初始化做了分析,本章我們聚焦

spring4.1.8初始化原始碼學習三部曲之一:AbstractApplicationContext構造方法

這個demo的原始碼可以在github下載,地址和連結資訊如下表所示: 名稱 連結 備註 專案主頁 https://github.com/zq2599/blog_demos 該專案在GitHub上的主頁 git倉庫地址(https)

spring4.1.8擴充套件實戰之一:自定義環境變數驗證

為了方便開發和測試,我們的擴充套件實戰是在SpringBoot框架下進行的,在SpringBoot自定義spring擴充套件的方式請參考《SpringBoot應用使用自定義的ApplicationContext實現類》 擴充套件功能介紹 今天實戰的內容,是通過

spring4.1.8擴充套件實戰之二:Aware介面揭祕

接下來通過分析spring原始碼,我們來看看典型的Aware子類有哪些,使用場景是什麼? 在spring容器初始化過程中,會執行AbstractApplicationContext類的prepareBeanFactory方法,這裡面會建立一個bean後置處理器

spring4.1.8擴充套件實戰之四:感知spring容器變化(SmartLifecycle介面)

本章由以下幾部分組成: SmartLifecycle介面概覽; spring容器啟動與SmartLifecycle的關係; spring容器關閉與SmartLifecycle的關係; 關於Lifecycle和SmartLifecycle; 實戰SmartLi

下載Spring4.1.x原始碼並用IntelliJ IDEA開啟

這兩天心血來潮,想去研究一下spring原始碼,一直聽說spring原始碼是開源世界裡最優秀的原始碼之一,出自很多大師的手筆。哈哈,話不多說,要閱讀原始碼第一步當然是搭建閱讀除錯環境啦。我 的環境是intellij idea13.1 spring的原始碼目前放在github上

SpringMVC3.1+Hibernate4.1.7完全基於註解配置(零配置檔案)

其實這篇文章應該是上篇《Servlet3.0下基於註解的SpringMVC3.1配置-完全零配置檔案》的續篇,因為上篇只介紹到web工程和Spring(包括MVC)的零配置,相對於傳統的SSH來說,相當於SS零配置了。那麼S和H的結合如果零配置檔

struts2引數獲得方式-(1)屬性驅動獲得引數

1.學習路線 今天咱們來學struts2引數獲得方式,let`go!                                                                                            圖1.學習路線

struts2配置檔案中method="{1}"詳解

struts2為了簡化配置檔案,來採用了萬用字元的方式 圖中的method="{1}"指向的是action後的第一個萬用字元,也就是如圖的 * , 假如name中含有多個萬用字元 , 則method

spring4.1.8初始化原始碼學習三部曲之三:AbstractApplicationContext.refresh方法

本章是《spring4.1.8初始化原始碼學習三部曲》系列的終篇,重點是學習AbstractApplicationContext類的refresh()方法; 我們先回顧ClassPathXmlApplicationContext類的初始化過程如下程式碼:

Spring4.1新特性——資料庫整合測試

在Spring 4.1之前我們在準備測試資料時可能通過繼承AbstractTransactionalJUnit4SpringContextTests,然後呼叫executeSqlScript()進行測試,其中存在一個主要問題:如果要同時執行多個數據源的初始化就靠不住了,而且

修改gradle指令碼,加速spring4.1原始碼編譯構建速度

本次優化的策略是跳過task來節省時間,例如文件包和原始碼包,因此,如果您的目標是拿到最新jar包,那麼這種手段適合您,如果您想拿到包括文件、原始碼等在內的所有構建資源,那麼這種方式就不適合了; 先列舉一下軟硬體環境資訊: 1. 硬體:i5-8400,1

springmvc+spring3.1+hibernate4配置事務不起作用

在學習SpringMVC的過程中,使用springmvc+spring3.1+hibernate4的時候,採用宣告式的事物,但是在修改和刪除的時候,事務不起作用,具體的2個配置檔案如下; applicationContext.xml如下; <?xml version=

Spring4.1新特性——Spring MVC增強

Spring 4.1對Spring MVC部分做的增強是最多的,提供了一些檢視解析器的mvc標籤實現簡化配置、提供了GroovyWebApplicationContext用於Groovy web整合、提供了Gson、protobuf的HttpMessageConverter

spring4.1.8擴充套件實戰之五:改變bean的定義(BeanFactoryPostProcessor介面)

本章我們繼續實戰spring的擴充套件能力,通過自定義BeanFactoryPostProcessor介面的實現類,來對bean例項做一些控制; BeanFactoryPostProcessor介面簡介 spring容器初始化時,從資源中讀取到bea

Spring4.1 mvc 返回json時,去掉null值

<!-- Spring mvc4 註解@responsebody返回json時,去掉null值 --><mvc:annotation-driven><mvc:message-converters><beanclass="org.sp