一、实验素材
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/beanshttp://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.ConsoleAppender log4j.appender.CONSOLE.Threshold=INFO log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=axis.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.Threshold=INFO log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n