MyEclipse開發SSH(Struts1+Spring+Hibernate)入門

來源:互聯網
上載者:User
文章目錄
  • 1. 準備
  • 2. Struts 部分
  • 3. Spring 部分
  • 4. Hibernate 部分

(本文參考自 oksonic 的“Struts+Spring+Hibernate練習(完整)”)

源碼下載:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2857703

1. 準備

工具:MyEclipse 6.0.1 GAmysql-connector-java-5.0.4-bin.jarMySql
GUI Tools 5.0
(便於管理MySql資料庫,不是必須)

環境:Tomcat 5.5MySql
5.0

1.1. 建立工程

操作:[Menu] File/New/Web Project

工程名:login

2. Struts 部分


2.1. 添加 Struts 功能支援

操作:[Menu] MyEclipse/Project Capabilities/Add Struts Capabilities

將 “yourcompany” 替換成 “login”。

2.2. 建立 ActionForm 類

操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Form

類名:LoginForm

在 “Use case” 裡輸入 “Login” 後,Name、Form type 等會自動填滿。

在 “Form Properties” 選項卡為 loginForm 新增兩個屬性:username、password,”Type” 和 “JSP input type” 分別保持預設的 “java.lang.String” 和 “text”;

在 “JSP” 選項卡鉤選 “Create JSP form” 選項,將建立路徑改為 “/login.jsp”(login.jsp檔案將被自動建立)。

2.3. 建立 Action 類

操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Action

類名:LoginAction

在 “Form” 選項卡的 “Name” 項選擇 “loginForm”,”Input Source” 項輸入 “/login.jsp”。

2.4. 建立 index.jsp 檔案

如果沒有,建立 index.jsp 檔案,並添加一個指向 login.jsp 的連結:<a href = “login.jsp”>Login</a>。

2.5. 建立Forword類

操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Forword

類名:indexForword

“Name” 項輸入 “indexForword” ,”Path” 項選擇 “/index.jsp” 。

2.6. 修改 LoginAction.java 檔案

修改 LoginAction 類的 execute 方法:

public class LoginAction extends Action {

public ActionForward execute ( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response ) {
LoginForm loginForm = ( LoginForm ) form;

String username = loginForm.getUsername();
String password = loginForm.getPassword();

if ( username.equals ( “test” ) && password.equals ( “test” ) ) {
return mapping.findForward ( “indexForword” );
} else {
return mapping.getInputForward();
}
}
}

2.7. 修改 login.jsp 檔案

修改 <html:form> 標籤:<html:form action=”/login”>。

2.8. 測試

操作:[Menu] Run/Run,選擇 MyEclipse Server Application 方式運行

(要正常執行Run操作,需先安裝 Tomcat5.5 。)

點擊 index.jsp 頁面的 “Login” 連結,跳轉到 login.jsp 頁面。在 login.jsp 頁面輸入 “test/test”,應該會登入成功,然後跳轉到 index.jsp 頁面;輸入 “test/123″ ,應該保持在 login.jsp 頁面。

如果測試成功,證明 Structs 運行正常。

如果運行出錯,請參考文章最後的“5. 問題集”。

3. Spring 部分


3.1. 添加 Spring 功能支援

操作:[Menu] MyEclipse/Project Capabilities/Add Spring Capabilities

Spring 版本( Spring version )選擇 “Spring 1″;

開發包(libraries)選擇 “Spring 1.2 AOP Libraries、Spring 1.2 Core Libraries、Spring 1.2 Persistence Core Libraries、Spring 1.2 Persistence JDBC Libraries” 四項;

JAR Library Installation 選擇 “copy checked…” ,”Library Folder” 項選擇 “/WebRoot/WEB-INF/lib”(這樣的話所需的類庫都將拷貝到項目目錄,方便以後的布署)。

點擊 “下一步(Next)” 建立設定檔,修改檔案路徑(Folder)到 “WebRoot/WEB-INF” 目錄(以便和Struts設定檔一起管理),檔案名稱為預設的”applicationContext.xml”。

點擊 “完成(Finish)” 。

3.2. 配置 struts-config.xml 檔案

添加 Spring 外掛程式(在 <message-resources> 標籤後面添加):

<plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”>
<set-property property=”contextConfigLocation” value=”/WEB-INF/applicationContext.xml” />
</plug-in>

修改 LoginAction 的配置(只需修改 type 屬性):

<action-mappings >
<action
attribute=”loginForm”
input=”/login.jsp”
name=”loginForm”
path=”/login”
scope=”request”
type=”org.springframework.web.struts.DelegatingActionProxy” />

</action-mappings>

綠色字型部份為被修改過的內容,這裡將使用 spring 的代理器 DelegatingActionProxy 來對 Action 進行控制。

3.3. 修改 Spring 設定檔 applicationContext.xml

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”>

<beans>
<bean name=”/login” class=”com.login.struts.action.LoginAction” singleton=”false”></bean>
</beans>

綠色字型是關於接受和處理 Action 控制權的配置內容,”com.login.struts.action.LoginAction” 即為原 struts 裡的配置。

3.4. 測試

同上一次測試。測試成功證明 Spring 運行正常。

如果運行出錯,請參考文章最後的“5. 問題集”。

4. Hibernate 部分

下面開始 Hibernate 部分,將原例修改為使用資料庫進行使用者名稱/密碼驗證。

4.1. 建立 mysql 資料庫和表

添加表的代碼如下:

CREATE TABLE user_table(
ID int NOT NULL auto_increment,
USERNAME varchar(45) NOT NULL default ”,
PASSWORD varchar(45) NOT NULL default ”,
PRIMARY KEY (ID)
)

再添加一條記錄:

insert into user_table (USERNAME,PASSWORD) values (‘test’,'test’)

4.2. 建立 MyEclipse 資料庫驅動(DB Driver)

操作:[Menu] MyEclipse/Prefrences/MyEclipse/Database Explorer/Database Driver/DB Brower

在 DB Brower 的菜單中選擇 “New” ,”Driver Name” 項輸入 “login-conn” ,”Connection URL” 項輸入 “jdbc:mysql://localhost:3306/test” ,然後輸入 MySql 的使用者名稱(User Name)和密碼(Password),按實際情況輸入;

在 “Driver JARs” 項添加 “mysql-connector-java-5.0.4-bin.jar” (可從網上下載),在 “Driver classname” 裡選擇 “com.mysql.jdbc.Driver” ,其它自選。

點擊 “完成(Finish)”。

4.3. 添加 Hibernate 功能支援

操作:[Menu] MyEclipse/Project Capabilities/Add Hibernate Capabilities

Hibernate 版本(Hibernate Specification)選擇 “Hibernate 3.1″ ,開發包(libraries)選擇 Hibernate 3.1 Core Libraries 一項;

JAR Library Installation 選擇 “copy checked…” ,”Library Folder” 選擇 “/WebRoot/WEB-INF/lib” 。

點擊 “下一步(Next)” 設定設定檔:

選擇 “Spring configuration file (applicationContext.xml)” 。

“下一步(Next)” 設定 Spring-Hibernate:

選擇 “Existing Spring configuration file” ,”SessionFactory ID” 項輸入 “sessionFactory” 。

“下一步(Next)” 建立資料來源對象:

在 Bean Id 中輸入 dataSource,”DataSource” 項選擇 “Use JDBC Dirver” ,DB Driver 項選擇 “login-conn” ,其餘項會自動填滿。

記得選中 “Copy DB driver jar(s) to project and add to buidpath” 項,以便將資料連線的庫檔案複製到項目,方便以後的布署。

“下一步(Next)” 建立 SessionFactory 類:

“Java package” 項設定為 “com.login.Hibernate” (如果沒有,點擊 “New” 按鈕添加),”Class name” 項修改為 “SessionFactory” ,Java Compliance Level 選擇和建立項目時選擇的 Java 版本。(本例中並沒有用到 SessionFactory 類,留作今後擴充)

點擊 “完成(Finish)”。

4.4. 建立對象關係映射(ORM)的相關檔案

操作:[Menu] Window/Open Perspective/MyEclipse Database Explorer

選中 user_table 表,點擊右鍵,在出現的菜單中選擇 “Hibernate Reverse Engnieering” 。

在彈出的視窗中保持 “Java package” 項為 “com.login” ;

選中 “Hibernate mapping file (*.hbm.xml) for each databases table” ,並保持 “Update hibernate…” 項選中;

選中 “Java Data Object” 項,並保持 “Create abstract class” 選中;

“Base persistent class” 項留空;

取消 “Java Data Access Object…” 項和 “Use custom templates” 項。

點擊 “下一步(Next)” ,再點擊 “下一步(Next)” ,在 “Configure reverse engineering details” 頁選中 “user_table” 表,在右邊出現的 “Class Name” 項中輸入 “com.login.User”,其它不變。

點擊 “完成(Finish)”。

完成此操作,會在 “com.login” 包下建立三個檔案:AbstractUser.java、User.java、User.hbm.xml。

4.5. 建立 UserDAO.java 介面

操作:[Ctrl+N] Interface,點擊 “下一步( Next )”

在出現的 “New Java Interface” 視窗中,將 “Source Folder” 設定為 “login/src”,將 “Package” 設定為 “com.login”, 將 “Name” 項設為 “UserDAO”,然後點擊 “完成( Finish )” 按鈕。

UserDAO.java 內容如下:

package com.login;

public interface UserDAO {
public abstract boolean isValidUser( String username, String password );
}

4.6. 建立 UserDAOImpl.java 類

操作:[Ctrl+N] Class,點擊 “下一步( Next )”

在出現的 “New Java Class” 視窗中,將 “Source Folder” 設定為 “login/src”,將 “Package” 設定為 “com.login”, 將 “Name” 項設為 “UserDAOImpl”,在 “Supperclass” 項輸入 “org.springframework.orm.hibernate3.support.HibernateDaoSupport”,在 “Interface” 項中添加 “com.login.UserDAO” 介面,然後點擊 “完成( Finish
)” 按鈕。

UserDAOImpl 通過 Hibernate 訪問資料庫,做使用者驗證。

UserDAOImpl.java 內容如下:

package com.login;

import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
private static String hql = “from User u where u.username=? “;

public boolean isValidUser( String username, String password ) {
// 驗證使用者
List userList = this.getHibernateTemplate().find( hql, username );
if ( userList.size() > 0 ) {
return true;
}
return false;
}
}

4.7. 修改 LoginAction.java 檔案

使用 UseDAO 對象來驗證:

package com.login.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.login.struts.form.LoginForm;
import com.login.UserDAO;

public class LoginAction extends Action {
private UserDAO userDAO;

public UserDAO getUserDAO() {
return userDAO;
}

public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

LoginForm loginForm = (LoginForm) form;
String username=loginForm.getUsername();
String password=loginForm.getPassword();

if( userDAO.isValidUser( username, password )
){
return mapping.findForward( “indexForword” );
}else{
return mapping.getInputForward();
}
}
}

綠色字型為修改部分。

4.8. Spring 的最終配製檔案 applicationContext.xml

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”>

<beans>

<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/test”></property>
<property name=”username” value=”root”></property>
<property name=”password” value=”root”></property>
</bean>

<!– 配置sessionFactory, 注意這裡引入的包的不同 –>
<bean id=”sessionFactory” class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>
<property name=”dataSource”>
<ref local=”dataSource” />
</property>
<property name=”mappingResources”>
<list>
<value>com/login/User.hbm.xml</value>
</list>
</property>
<property name=”hibernateProperties”>
<props>
<prop key=”hibernate.dialect”>org.hibernate.dialect.MySQLDialect</prop>
<prop key=”hibernate.show_sql”>true</prop>
</props>
</property>
</bean>

<bean id=”transactionManager” class=”org.springframework.orm.hibernate3.HibernateTransactionManager”>
<property name=”sessionFactory”>
<ref local=”sessionFactory” />
</property>
</bean>

<bean id=”userDAO” class=”com.login.UserDAOImpl”>
<property name=”sessionFactory”>
<ref local=”sessionFactory” />
</property>
</bean>

<bean id=”userDAOProxy” class=”org.springframework.transaction.interceptor.TransactionProxyFactoryBean”>
<property name=”transactionManager”>
<ref bean=”transactionManager” />
</property>
<property name=”target”>
<ref local=”userDAO” />
</property>
<property name=”transactionAttributes”>
<props>
<prop key=”insert*”>PROPAGATION_REQUIRED</prop>
<prop key=”get*”>PROPAGATION_REQUIRED,readOnly</prop>
<prop key=”is*”>PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

<bean name=”/login” class=”com.login.struts.action.LoginAction” singleton=”false”>
<property name=”userDAO”>
<ref bean=”userDAOProxy” />
</property>
</bean>

</beans>

4.9. 測試

同第一次測試。

如果運行出錯,請參考文章最後的“5. 問題集”。

5. 問題集

5.1. Console 錯誤資訊: java.net.BindException: Address already in use: JVM_Bind:8080

  • 原因:有其它進程佔用了 8080 連接埠,導致綁定失敗。
  • 解決:如果是有 Tomcat 啟動了,將其關閉,MyEclipse 會自己啟動 Tomcat。

5.2. HTTP 錯誤資訊:message
Servlet action is not available

  • 原因:找不到相關類。可能設定檔中的某些類或檔案的路徑填寫錯誤,或是缺少 jar 包。
  • 解決:如果是在添加 Spring 特性後產生的,可能是 /WEB-INF/lib/ 中缺少 spring.jar 包。從 MyEclipse 目錄搜尋出 1.2 版的 spring.jar,並將其複製到項目的 /WEB-INF/lib/ 目錄下。

5.3. Console 錯誤資訊:java.sql.SQLException: Access denied for user: ‘root@localhost’ (Using password: YES)

  • 原因:資料庫訪問被拒絕。可能由於 MySQL 密碼被設定成空,而 MyEclipse 又不支援空密碼。
  • 解決:將 MySQL 的 root 使用者密碼設定成非空,如 “root”,然後修改 MyEclipse 中剛才添加的 login-conn 資料來源資訊的密碼項。

驗證碼:換一張

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.