一、實驗素材
1. 開發環境:MyEclipse 8.0 GA(Eclipse3.5.1,JRE1.6.0.10和MyEclipse Enterprise WorkBench8.0)
2. 運行環境:JDK 6 Update 20(JRE1.6.0.13)
3. 開發架構:Struts 2.1.8.1,Spring 2.5,Hibernate 3.2
4. 應用伺服器:tomcat 6.0.26
5. 資料庫伺服器:SQL Server 2005
二、準備工作
1. MyEclipse 8.0 GA Download and Install
官方網址:http://www.myeclipseide.com/
最新版本:MyEclipse 8.0 GA
該安裝包整合了 Eclipse3.5.1,JRE1.6.0.10和MyEclipse Enterprise WorkBench8.0的自動安裝包(僅Windows平台)。
安裝目錄為C:\J2EE\MyEclipse。
MyEclipse 8.0 GA破解方法:MyEclipse安裝完之後,解壓補丁到目前使用者目錄下(如當前登入使用者為qxr,就解壓到C:\Documents and Settings\qxr下,破解後有對啟動外掛程式刪除的提示。
2. J2SDK Download and Install
官方網址:http://java.sun.com/
最新版本:JDK 6 Update 20(JRE1.6.0.13)
① MyEclipse 8.0 GA預設內建了一個JRE1.6.0.10, 不過安裝獨立版本對學習更有協助。
② J2SDK(jdk-6u20-windows-i586.exe)安裝目錄為 J2SDK在C:\J2EE\J2SDK,JRE在C:\J2EE\JRE,設定系統變數(我的電腦->屬性->進階->環境變數):
(建立)JAVA_HOME = C:\J2EE\J2SDK
(建立)CLASSPATH = .;C:\J2EE\J2SDK\lib\dt.jar;C:\J2EE\J2SDK\lib\tools.jar(注意:點號不能省略,表示目前的目錄)
編輯PATH的變數值,在後面加上;%JAVA_HOME%\bin(注意:要有分號隔開)
至此,J2SDK安裝完畢,用命令簡單測試一下:java –version
③ 在Eclipse中配置JRE:點擊Window->Preferences->Java->Installed JREs,點擊Add按鈕,設定JRE Name為JRE6,設定JRE home directory為C:\J2EE\J2SDK,確認即可。
3. TOMCAT6 Download and Install
官方網址:http://tomcat.apache.org/
最新版本:tomcat 6.0.26
① TOMCAT(apache-tomcat-6.0.26.rar)安裝目錄為C:\J2EE\Tomcat。
② 在Eclipse中配置TOMCAT
點擊Window->Preferences->MyEclipse->Servers->Tomcat->Tomcat 6.x,設定Tomcat server為Enable,路徑分別為C:\J2EE\Tomcat、C:\J2EE\Tomcat、C:\J2EE\Tomcat\temp,應用即可。
點擊Window->Preferences->MyEclipse->Servers->Tomcat->Tomcat 6.x->JDK,在Tomcat JDK name下拉框中選擇J2SDK,應用即可。
4. Struts2 Download
官方網址:http://struts.apache.org/
最新版本:struts 2.1.8.1
5. SQL Server2005 JDBC Driver Download and Install
① 下載驅動程式
http://download.microsoft.com,搜尋Microsoft SQL Server JDBC Driver 3.0,並下載,下載的檔案名稱為sqljdbc_3.0.1301.101_chs.exe(版本號碼1.1之後都支援sql2005,2.0的支援 sql2008)。
下載檔案解壓後就可以使用,不需要要安裝,找到其中的sqljdbc4.jar放入$MYECLIPSEHOME/dropins/jdbc目錄中即可。
② 配置sql2005伺服器。
配置TCP連接埠:開始->程式->Microsoft SQL Server 2005->組態工具->SQL Server Configuration Manager->SQL Server 2005網路設定->MSSQLSERVER協議,啟用TCP/IP。
在SQL Server Configuration Manager->SQL Server 2005 網路設定->MSSQLSERVER協議中雙擊TCP/IP,在IP 位址標籤頁中將所有TCP 通訊埠項設定預設的1433連接埠。
SQL Server Configuration Manager->SQL Server 2005服務中重新啟動SQL Server伺服器,這樣式就完成了對sql2005伺服器的配置。
③ MyEclipse 8.0 GA中的配置
Windows->Open Perspective->MyEclipse DataBase Explorer,在DB Browser中選擇NEW,然後設定如下:
Driver template = Microsoft SQL Server 2005
Driver name = SQL Server 2005
Connection URL = jdbc:sqlserver://localhost:1433;databaseName=SSH
User name = sa
Password = PASSWORD
匯入$MYECLIPSEHOME/Common/JDBC中的sqljdbc4.jar,勾選複選框Save password,點擊按鈕Test Driver,測試連接成功。
三、搭建架構
1. Create Web Project
啟動MyEclipse,點擊File->New->Other->MyEclipse->Java Enterprise Projects->Web Project,然後點擊Next。
設定Project Name為S2SH,Location Dircetory為E:\J2EE\S2SH,J2EE Specification Level為Java EE 5.0,點擊Finish。
選擇File->New->Package建立如下幾個包:
com.shawnqiu.action
com.shawnqiu.bean
com.shawnqiu.dao
com.shawnqiu.dao.impl
com.shawnqiu.service
com.shawnqiu.service.impl
com.shawnqiu.util
dbConfig
2. Add Struts 2.1.8.1 Capabilities
匯入struts2的核心jar包(原始路徑為struts-2.1.8.1-all\struts-2.1.8.1\lib),匯入位置為S2SH\WebRoot\WEB-INF\lib,右鍵點擊工程名稱Refresh即可自動加入。
commons-fileupload-1.2.1.jar
commons-logging-1.0.4.jar
freemarker-2.3.15.jar
ognl-2.7.3.jar
struts2-core-2.1.8.1.jar
struts2-spring-plugin-2.1.8.1.jar
xwork-core-2.1.6.jar
3. Add Spring 2.5 Capabilities
右鍵點擊工程名稱,MyEclipse->Add Spring Capabilities。
選擇Spring version為Spring 2.5,選中Spring 2.5 AOP Libraries、Spring 2.5 Core Libraries、Spring 2.5 Persistence Core Libraries、Spring 2.5 Persistence JDBC Libraries、Spring 2.5 Web Libraries共5個包。選中Copy checked Library contents to project folder (TLDs always copied),點擊Next。
點擊Next,點擊Folder文字框後的Browse,在彈出對話方塊中選擇spring設定檔儲存位置為WebRoot/WEB-INF,點擊Finish。至此已經完成載入Spring,在WEB-INF檔案夾下已經產生了設定檔applicationContext.xml。
4. Create Database Connection
在SQL Server 2005中建立一個名為SSH的資料庫,在資料庫中建立資料表UserInfo,表中的資料項目如所示,其中UserID為PK、自增。
在MyEclipse中選擇Window->Open Perspective->MyEclipse Database Explorer,進入MyEclipse Database Explorer視圖。
在DB Browser視窗中按右鍵,選擇New。
Connection URL為jdbc:sqlserver://localhost:1433;databaseName=SSH,選中Save password,設定完成後一定要點擊Test 。Driver按鈕測試一下,最後點擊Next,再點擊Finish。
5. Add Hibernate 3.2 Capabilities
右鍵點擊工程名稱,MyEclipse->Add Hibernate Capabilities。
選擇Hibernate Specification為Hibernate 3.2,選中所有包,選中Copy checked Library Jars to project folder and add to build-path,點擊Next。
選擇Spring configuration file (applicationContext.xml),點擊Next。
選擇Existing Spring configuration file,點擊Next
只需在Bean Id文字框中輸入一個Id名,作為資料庫源的代用名,意義不大,採用預設設定即可。然後在DB Driver下拉式清單中,選擇上一步在MyEclipse中建立好的資料庫源SQL Server 2005,其他資訊將自動填寫,點擊Next。
在彈出對話方塊中去掉Create SessionFactory class?複選框,不建立該類,點擊Finish完成。
建立過程中,載入的jar包檔案可能有重複,所以這個時候如果提示有某些jar包重複,選擇Keep Existing即可。
6. Delete Conflictive Jars
右鍵點擊工程名稱,選擇Properties->Java Build Path,刪除三個重複的jar包:
asm-2.2.3.jar
cglib-2.1.3.jar
xerces-2.6.2.jar
7. Create struts.xml
在src包下建立一個struts.xml檔案,該檔案內容如下:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <constant name="struts.objectFactory" value="spring" /> <include file="struts-default.xml"></include> <package name="default" extends="struts-default"> <action name="userInfoLogin" class="userInfoAction" method="login"> <result name="FAILURE">/MainWeb/failure.jsp </result> <result name="SUCCESS">/MainWeb/success.jsp</result> </action> </package></struts>
8. Overwrite web.xml
配置web.xml檔案,其內容如下:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <filter> <filter-name>struts2</filter-name> <filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app>
9. Use Hibernate Reverse
UserInfo.java
UserInfoDaoImpl.java
UserInfo.hbm.xml
將前面資料來源dataSource所示資料庫SSH中的UserInfo表反向產生Hibernate實體類檔案。
如,不要產生abstract class,然後一路點擊Next即可。
在com.shawnqiu.bean下產生三個檔案UserInfo.java、UserInfoDAO.java、 UserInfo.hbm.xml。將UserInfoDAO.java 更名為UserInfoDaoImpl.java,置於com.shawnqiu.dao.impl,將UserInfo.hbm.xml置於 dbConfig下。
10. Create UserInfoServiceImpl.java
package com.shawnqiu.service.impl; import java.util.*;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.shawnqiu.bean.UserInfo; public class UserInfoServiceImpl extends HibernateDaoSupport { //普通使用者登入驗證 @SuppressWarnings("unchecked") public boolean checkUser(String userName,String userPassword){ boolean flag = false; String hql = "from UserInfo as userInfo where userInfo.userName = '"
+userName+"' and userInfo.userPassword = '"+userPassword+"'"; List<UserInfo> userInfoList = this.getHibernateTemplate().find(hql); if(userInfoList.size()>0){ flag = true; } return flag; }}
11. Create UserInfoService.java
右鍵點擊UserInfoServiceImpl.java,選擇Refactor->Extract Interface。
設定Interface name為UserInfoService,同時選擇Select All即可,點擊OK。
如所示,UserInfoService.java和UserInfoServiceImpl.java在同一package中。右鍵點擊UserInfoService.java,選擇Refactor->Move
選擇com.shawnqiu.service,點擊OK即可。
12. Create UserInfoAction.java
package com.shawnqiu.action; import com.opensymphony.xwork2.ActionSupport;import com.shawnqiu.service.UserInfoService; public class UserInfoAction extends ActionSupport{ private String userName; private String userPassword; public UserInfoService getUserInfoService() { return userInfoService; } public void setUserInfoService(UserInfoService userInfoService) { this.userInfoService = userInfoService; } private UserInfoService userInfoService; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public String execute(){// String page = "FAILURE"; // boolean flag = false; // flag = personManage.checkUser(userName, userPassword); // if(flag){ // page = "SUCCESS"; // } // return page; return ""; } public String login(){ String page = "FAILURE"; boolean flag = false; flag = userInfoService.checkUser(userName, userPassword); if(flag){ page = "SUCCESS"; } return page; } }
13. New Jsp Pages
首先在WebRoot下建立一個MainWeb檔案夾,並同時建立3個檔案,分別是login.jsp、success.jsp、failure.jsp,原始碼如下。
login.jsp
<%@ page language="java" pageEncoding="utf-8"%><%@taglib uri="/struts-tags" prefix="s"%> <html><head> <title>使用者登入</title></head><body><center> <div id="login"> <s:form action="userInfoLogin"> <s:textfield label="使用者名稱" name="userName"></s:textfield> <s:password label="密碼" name="userPassword"></s:password> <s:submit value="登入"></s:submit> </s:form> </div></center></body></html>
success.jsp
<%@ page language="java" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>Failure</title> </head> <body> 登入成功!<br> </body></html>
failure.jsp
<%@ page language="java" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>Failure</title> </head> <body> 登入失敗!<br> </body></html>
14. Overwrite 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-2.5.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"> </property> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=SSH"> </property> <property name="username" value="sa"></property> <property name="password" value="Wxzy!@%&"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </prop> </props> </property> <property name="mappingResources"> <list> <value>dbConfig/UserInfo.hbm.xml</value> </list> </property> </bean> <bean id="userInfoServiceImpl" class="com.shawnqiu.service.impl.UserInfoServiceImpl"
abstract="false" lazy-init="default" autowire="default"
dependency-check="default" scope="prototype"> <property name="sessionFactory" > <ref local="sessionFactory"/> </property> </bean> <bean id="userInfoAction" class="com.shawnqiu.action.UserInfoAction"
scope="prototype"> <property name="userInfoService"> <ref bean="userInfoServiceImpl" /> </property> </bean> </beans>
15. Create log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE.log4j.rootCategory=INFO, CONSOLE#log4j.rootCategory=INFO, CONSOLE, LOGFILE # Set the enterprise logger category to FATAL and its only appender to CONSOLE.log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE # CONSOLE is set to be a ConsoleAppender using a PatternLayout.log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.Threshold=INFOlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern=- %m%n # LOGFILE is set to be a File appender using a PatternLayout.log4j.appender.LOGFILE=org.apache.log4j.FileAppenderlog4j.appender.LOGFILE.File=axis.loglog4j.appender.LOGFILE.Append=truelog4j.appender.LOGFILE.Threshold=INFOlog4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n