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>
密 碼:<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>
密 碼:<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