1. 準備
工具:MyEclipse 6.0.1 GA 、mysql-connector-java-5.0.4-bin.jar 、MySql GUI Tools 5.0 (便於管理MySql數據庫,不是必須)
環境:Tomcat 5.0 、MySql 5.0
1.1. 新建工程
操作:[Menu] File/New/Web Project
工程名:login
2. Struts 部分
2.1. 添加 Struts 功能支持
操作:[Menu] MyEclipse/Project Capabilities/Add Struts
Capabilities
2.2. 創建 ActionForm 類
操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Form
類名:LoginForm
在 “Form Properties” 選項卡爲 loginForm 新增兩個屬性:username、password;
在 “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 運行正常。
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 運行正常。
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” ,然後輸入正確的用戶名(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 接口和 UserDAOImpl.java 類
UserDAO 和 UserDAOImpl 通過 Hibernate 訪問數據庫。
UseDAO.java 內容如下:
package com.login;
public interface UserDAO {
public abstract boolean isValidUser(String username, String
password);
}
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.6. 修改 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.7. 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