Struts2.1.x+Spring2.5.x+Hibernate3.2.x实例教程(2)V0.1
作者: 王者之剑(http://www.albertsong.com/) 日期: 2008-08-31 21:42
二、最简单的SSH程序
概要
本文将完成最常见的login功能。
1.最简单的Struts程序
2.集成Spring和Hibernate
3.数据访问层采用JPA
1.最简单的Struts程序
说它是Struts程序是因为没有Struts运行不了,说它最简单是因为仅仅执行了一个转发。
1)配置Struts
1.1)在web.xml文件中加入以下配置:
添加后的完整web.xml如下:
1.2)在Bitrac\src下新建struts.xml文件(注:不带盘符的指在Eclipse中操作,以后不再说明),内容如下:
2)新建/admin/index.jsp文件(这样的形式指在Bitrac\WebRoot新建目录admin和文件index.jsp)内容如下:
修改/index.jsp,内容如下:
3) 运行
点击eclipse工具条上的按钮启动Tomcat,
浏览http://localhost:8080/bitrac/,正常的话应该会看到“Hello From Struts”。
2.集成Spring和Hibernate
1) Struts2和Spring2集成
1.1)将D:\JavaTools\struts-2.1.2\lib\下的
struts2-spring-plugin-2.1.2.jar复制到
D:\Project\Bitrac\WebRoot\WEB-INF\lib\
1.2)在web.xml文件中加入Spring配置:
<!--默认加载/WEB-INF 目录下的applicationContext.xml -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
加入后完整的文件内容如下:
1.3)新建Struts配置文件Bitrac\src\default.xml,内容如下:
这个配置文件将用来存放前台的action配置
1.4)新建Struts配置文件Bitrac\src\admin.xml,内容如下:
这个文件将用来存放后台管理界面的Action配置
1.5)修改Bitrac\src\struts.xml,内容如下:
这里配置了一些全局常量,struts.action.extentsion是访问action时的后缀,通常用的有action或者do,我的习惯是用jspx,例如/admin/login.jspx,将调用admin.xml里定义的login action。
1.6)新建Spring配置文件
注意这里的bean name是adminAction,再看Bitrac\src\admin.xml里的class="adminAction",Spring和Struts的结合点就在这里,后台处理这一结合的是struts2-spring-plugin-2.1.2.jar。如果不使用spring,在admin.xml中将是class="com.albertsong.bitrac.action.AdminAction"。
1.7)新建AdminAction类
新建文件Bitrac\src\com\albertsong\bitrac\action\AdminAction.java,(以后所有XXAction都放在相同的目录下,不再重复说明)内容如下:
要让log起作用需要将
D:\JavaTools\spring-framework-2.5.5\lib\log4j\log4j-1.2.15.jar
D:\JavaTools\spring-framework-2.5.5\lib\jakarta-commons\commons-logging.jar
复制到/WEB-INF/lib下
将commons-logging.jar改名为commons-logging-1.1.1.jar,并将commons-logging-api-1.1.jar删掉。(我们只需要同一个组件的最新版本,多余的将被删除,以后不再重复说明,如果大家发现加入到/WEB-INF/lib里的后来又没了,那就是删除了)。
然后在Eclipse里点选Bitrac,按F5刷新,这时工程的文件列表已经更新。Alt+Enter打开工程属性对话框。Java Build PathLibrariesAdd JARs…将commons-logging-1.1.1.jar添加到编译路径,log4j-1.2.15.jar不需要添加,这个是在运行时起作用,编译时不需要。添加好以后,编译的错误提示应该都消失了。
做好这些以后还需要对Log4j做一些配置。
在/WEB-INF/web.xml文件中添加
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>bitrac.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
bitrac.root定义了一个代表Web应用程序根目录的变量,这个变量会在log4j.properties中使用。
加好以后完整的web.xml如下:
新建Bitrac\src\log4j.properties文件,内容如下:
log4j.rootLogger=INFO, stdout, logfile
log4j.logger.com.albertsong=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${bitrac.root}/WEB-INF/log/bitrac.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
新建目录/WEB-INF/log
新建com.albertsong.bitrac.dao.Member.Java,内容如下:
这里将Member.java放在dao下面,文件如何组织,包括类如何设计,完全是人为的,所谓的惯例和标准只是大家都公认的一些比较好的做法而已。我认为,目前将Member.java放在这里就可以了。
1.8)修改/index.jsp,内容如下:
1.9)新建文件/admin/login.jsp,内容如下:
这里使用了struts的标签来将视图层(JSP)和控制层(Action)关联在一起。注意到<s:form action="login" namespace="/admin">中的action和namespace就是我们在admin.xml中定义的。通过name="member.username"这样的形式就可以将Action中的member成员和界面元素关联起来。
1.10)启动Tomcat,浏览http://localhost:8080/bitrac/
如果上面的操作步骤都正确,那么会看到一个登录页面,点登录按钮会转到另一个页面。现在Struts2和Spring2已经集成在一起了。不过login里面我们还什么都没写,这个程序还没有任何有用的功能。如果在用户名和密码框中填入内容,点登录以后在Eclipse的Console里会看到相应的调试信息。
这里有很多警告,原因不清楚,不想看到它们并不难,在log4j.properties文件中log4j.logger.com.albertsong=DEBUG的下面加一行
log4j.logger.com.opensymphony.xwork2=ERROR
好了,现在清静了。
2)Spring2和Hibernate集成
2.1)复制必要的jar
将
D:\JavaTools\spring-framework-2.5.5\lib\j2ee\jta.jar
D:\JavaTools\spring-framework-2.5.5\lib\c3p0\c3p0-0.9.1.2.jar
D:\JavaTools\hibernate-3.2\lib\antlr-2.7.6.jar
D:\JavaTools\hibernate-3.2\lib\asm.jar
D:\JavaTools\hibernate-3.2\lib\asm-attrs.jar
D:\JavaTools\hibernate-3.2\lib\cglib-2.1.3.jar
D:\JavaTools\hibernate-3.2\lib\commons-collections-2.1.1.jar
D:\JavaTools\hibernate-3.2\lib\dom4j-1.6.1.jar
D:\JavaTools\hibernate-3.2\lib\ehcache-1.2.3.jar
D:\JavaTools\hibernate-3.2\lib\jaxen-1.1-beta-7.jar
复制到/WEB-INF/lib下
2.2)修改配置文件
在/WEB-INF/applicationContext.xml中加入Hibernate相关配置。
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/bitrac" />
<property name="user" value="root" />
<property name="password" value="" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>com/albertsong/bitrac/dao/Member.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="show_sql">true</prop>
</props>
</property>
</bean>
加入数据访问类的配置
<bean id="memberDao" class="com.albertsong.bitrac.dao.MemberDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
给<bean name="adminAction" class="com.albertsong.bitrac.action.AdminAction" />
添加属性<property name="memberDao" ref="memberDao" />
完成以后完整的applicationContext.xml如下:
(要注意的是如果没有scope="prototype",则登录出错以后,不能再正确登录,原因显然是AdminAction缓存了member的数据,具体原理暂不研究)
新建Bitrac\src\com\albertsong\bitrac\dao\Member.hbm.xml,这是Hibernate的数据映射文件,内容如下
概要
本文将完成最常见的login功能。
1.最简单的Struts程序
2.集成Spring和Hibernate
3.数据访问层采用JPA
1.最简单的Struts程序
说它是Struts程序是因为没有Struts运行不了,说它最简单是因为仅仅执行了一个转发。
1)配置Struts
1.1)在web.xml文件中加入以下配置:
- <filter>
- <filter-name>Struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.FilterDispatcher
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>Struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
添加后的完整web.xml如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app id="bitrac" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <display-name>Bitrac Blog</display-name>
- <filter>
- <filter-name>Struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.FilterDispatcher
- </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>
- </web-app>
1.2)在Bitrac\src下新建struts.xml文件(注:不带盘符的指在Eclipse中操作,以后不再说明),内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!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.devMode" value="true" />
- <constant name="struts.configuration.xml.reload" value="true" />
- <constant name="struts.action.extension" value="jspx" />
- <package name="default" extends="struts-default">
- <action name="admin">
- <result>/admin/index.jsp</result>
- </action>
- </package>
- </struts>
2)新建/admin/index.jsp文件(这样的形式指在Bitrac\WebRoot新建目录admin和文件index.jsp)内容如下:
- <%@ page contentType="text/html; charset=UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title> Struts Test</title>
- </head>
- <body>
- <p>Hello From Struts</p>
- </body>
- </html>
修改/index.jsp,内容如下:
- <%@ page contentType="text/html; charset=UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="refresh" content="0;url=admin.jspx" />
- </head>
- <body>
- <p>Loading ...</p>
- </body>
- </html>
3) 运行
点击eclipse工具条上的按钮启动Tomcat,
浏览http://localhost:8080/bitrac/,正常的话应该会看到“Hello From Struts”。
2.集成Spring和Hibernate
1) Struts2和Spring2集成
1.1)将D:\JavaTools\struts-2.1.2\lib\下的
struts2-spring-plugin-2.1.2.jar复制到
D:\Project\Bitrac\WebRoot\WEB-INF\lib\
1.2)在web.xml文件中加入Spring配置:
<!--默认加载/WEB-INF 目录下的applicationContext.xml -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
加入后完整的文件内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app id="bitrac" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <display-name>Bitrac Blog</display-name>
- <filter>
- <filter-name>Struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.FilterDispatcher
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>Struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!--默认加载/WEB-INF 目录下的applicationContext.xml -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
1.3)新建Struts配置文件Bitrac\src\default.xml,内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="default" extends="struts-default">
- <action name="admincp">
- <result>/admin/login.jsp</result>
- </action>
- </package>
- </struts>
这个配置文件将用来存放前台的action配置
1.4)新建Struts配置文件Bitrac\src\admin.xml,内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="admin" extends="struts-default" namespace="/admin">
- <action name="login" class="adminAction" method="login">
- <result name="success">/admin/index.jsp</result>
- <result name="input">/admin/login.jsp</result>
- </action>
- </package>
- </struts>
这个文件将用来存放后台管理界面的Action配置
1.5)修改Bitrac\src\struts.xml,内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!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.devMode" value="true" />
- <constant name="struts.configuration.xml.reload" value="true" />
- <constant name="struts.action.extension" value="jspx" />
- <include file="default.xml" />
- <include file="admin.xml" />
- </struts>
这里配置了一些全局常量,struts.action.extentsion是访问action时的后缀,通常用的有action或者do,我的习惯是用jspx,例如/admin/login.jspx,将调用admin.xml里定义的login action。
1.6)新建Spring配置文件
- <?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:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
- <bean name="adminAction" class="com.albertsong.bitrac.action.AdminAction" />
- </beans>
注意这里的bean name是adminAction,再看Bitrac\src\admin.xml里的class="adminAction",Spring和Struts的结合点就在这里,后台处理这一结合的是struts2-spring-plugin-2.1.2.jar。如果不使用spring,在admin.xml中将是class="com.albertsong.bitrac.action.AdminAction"。
1.7)新建AdminAction类
新建文件Bitrac\src\com\albertsong\bitrac\action\AdminAction.java,(以后所有XXAction都放在相同的目录下,不再重复说明)内容如下:
- package com.albertsong.bitrac.action;
- import com.albertsong.bitrac.dao.Member;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- public class AdminAction {
- private Log log = LogFactory.getLog(AdminAction.class);
- private Member member;
- public Member getMember() {
- return member;
- }
- public void setMember(Member member) {
- this.member = member;
- }
- public String login(){
- log.debug("member.username="+member.getUsername());
- log.debug("member.password="+member.getPassword());
- return "success";
- }
- }
要让log起作用需要将
D:\JavaTools\spring-framework-2.5.5\lib\log4j\log4j-1.2.15.jar
D:\JavaTools\spring-framework-2.5.5\lib\jakarta-commons\commons-logging.jar
复制到/WEB-INF/lib下
将commons-logging.jar改名为commons-logging-1.1.1.jar,并将commons-logging-api-1.1.jar删掉。(我们只需要同一个组件的最新版本,多余的将被删除,以后不再重复说明,如果大家发现加入到/WEB-INF/lib里的后来又没了,那就是删除了)。
然后在Eclipse里点选Bitrac,按F5刷新,这时工程的文件列表已经更新。Alt+Enter打开工程属性对话框。Java Build PathLibrariesAdd JARs…将commons-logging-1.1.1.jar添加到编译路径,log4j-1.2.15.jar不需要添加,这个是在运行时起作用,编译时不需要。添加好以后,编译的错误提示应该都消失了。
做好这些以后还需要对Log4j做一些配置。
在/WEB-INF/web.xml文件中添加
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>bitrac.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
bitrac.root定义了一个代表Web应用程序根目录的变量,这个变量会在log4j.properties中使用。
加好以后完整的web.xml如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app id="bitrac" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <display-name>Bitrac Blog</display-name>
- <context-param>
- <param-name>webAppRootKey</param-name>
- <param-value>bitrac.root</param-value>
- </context-param>
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>/WEB-INF/classes/log4j.properties</param-value>
- </context-param>
- <filter>
- <filter-name>Struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.FilterDispatcher
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>Struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <listener>
- <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
- </listener>
- <!--默认加载/WEB-INF 目录下的applicationContext.xml -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
新建Bitrac\src\log4j.properties文件,内容如下:
log4j.rootLogger=INFO, stdout, logfile
log4j.logger.com.albertsong=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${bitrac.root}/WEB-INF/log/bitrac.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
新建目录/WEB-INF/log
新建com.albertsong.bitrac.dao.Member.Java,内容如下:
- package com.albertsong.bitrac.dao;
- import java.util.Date;
- /**
- * @author Albert
- *
- */
- public class Member {
- private int id;
- private short grade;
- private String username;
- private String password;
- private String validate;
- private boolean conserve;
- private String contact;
- private String picture;
- private String explain;
- private int numPost;
- private int numComm;
- private int numFile;
- private Date publish;
- private String address;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public short getGrade() {
- return grade;
- }
- public void setGrade(short grade) {
- this.grade = grade;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getValidate() {
- return validate;
- }
- public void setValidate(String validate) {
- this.validate = validate;
- }
- public boolean isConserve() {
- return conserve;
- }
- public void setConserve(boolean conserve) {
- this.conserve = conserve;
- }
- public String getContact() {
- return contact;
- }
- public void setContact(String contact) {
- this.contact = contact;
- }
- public String getPicture() {
- return picture;
- }
- public void setPicture(String picture) {
- this.picture = picture;
- }
- public String getExplain() {
- return explain;
- }
- public void setExplain(String explain) {
- this.explain = explain;
- }
- public int getNumPost() {
- return numPost;
- }
- public void setNumPost(int numPost) {
- this.numPost = numPost;
- }
- public int getNumComm() {
- return numComm;
- }
- public void setNumComm(int numComm) {
- this.numComm = numComm;
- }
- public int getNumFile() {
- return numFile;
- }
- public void setNumFile(int numFile) {
- this.numFile = numFile;
- }
- public Date getPublish() {
- return publish;
- }
- public void setPublish(Date publish) {
- this.publish = publish;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- }
这里将Member.java放在dao下面,文件如何组织,包括类如何设计,完全是人为的,所谓的惯例和标准只是大家都公认的一些比较好的做法而已。我认为,目前将Member.java放在这里就可以了。
1.8)修改/index.jsp,内容如下:
- <%@ page contentType="text/html; charset=UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="refresh" content="0;url=admincp.jspx" />
- </head>
- <body>
- <p>Loading ...</p>
- </body>
- </html>
1.9)新建文件/admin/login.jsp,内容如下:
- <%@ page contentType="text/html; charset=UTF-8"%>
- <%@ taglib uri="/struts-tags" prefix="s" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title> Bitrac Demo Site - 管理员控制面板</title>
- </head>
- <body>
- <div id="content">
- <div id="AdmEnter">
- <s:actionerror />
- <s:form action="login" namespace="/admin">
- <fieldset><legend>管理登录</legend>
- <s:textfield label="用户名" name="member.username" />
- <s:password label="密码" name="member.password" />
- <s:submit value="登录" />
- </fieldset>
- </s:form>
- </div>
- </div>
- <div id="footer">
- <p>Powered by <a href="http://www.albertsong.com" target="_blank">Bitrac(J) v0.1</a>. Designed by <a href="mailto:loveyuki@gmail.com">Loveyuki</a> &Programmed by <a href="mailto:albertsong.com@gmail.com">Albert Song</a></p>
- </div>
- </body>
- </html>
这里使用了struts的标签来将视图层(JSP)和控制层(Action)关联在一起。注意到<s:form action="login" namespace="/admin">中的action和namespace就是我们在admin.xml中定义的。通过name="member.username"这样的形式就可以将Action中的member成员和界面元素关联起来。
1.10)启动Tomcat,浏览http://localhost:8080/bitrac/
如果上面的操作步骤都正确,那么会看到一个登录页面,点登录按钮会转到另一个页面。现在Struts2和Spring2已经集成在一起了。不过login里面我们还什么都没写,这个程序还没有任何有用的功能。如果在用户名和密码框中填入内容,点登录以后在Eclipse的Console里会看到相应的调试信息。
这里有很多警告,原因不清楚,不想看到它们并不难,在log4j.properties文件中log4j.logger.com.albertsong=DEBUG的下面加一行
log4j.logger.com.opensymphony.xwork2=ERROR
好了,现在清静了。
2)Spring2和Hibernate集成
2.1)复制必要的jar
将
D:\JavaTools\spring-framework-2.5.5\lib\j2ee\jta.jar
D:\JavaTools\spring-framework-2.5.5\lib\c3p0\c3p0-0.9.1.2.jar
D:\JavaTools\hibernate-3.2\lib\antlr-2.7.6.jar
D:\JavaTools\hibernate-3.2\lib\asm.jar
D:\JavaTools\hibernate-3.2\lib\asm-attrs.jar
D:\JavaTools\hibernate-3.2\lib\cglib-2.1.3.jar
D:\JavaTools\hibernate-3.2\lib\commons-collections-2.1.1.jar
D:\JavaTools\hibernate-3.2\lib\dom4j-1.6.1.jar
D:\JavaTools\hibernate-3.2\lib\ehcache-1.2.3.jar
D:\JavaTools\hibernate-3.2\lib\jaxen-1.1-beta-7.jar
复制到/WEB-INF/lib下
2.2)修改配置文件
在/WEB-INF/applicationContext.xml中加入Hibernate相关配置。
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/bitrac" />
<property name="user" value="root" />
<property name="password" value="" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>com/albertsong/bitrac/dao/Member.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="show_sql">true</prop>
</props>
</property>
</bean>
加入数据访问类的配置
<bean id="memberDao" class="com.albertsong.bitrac.dao.MemberDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
给<bean name="adminAction" class="com.albertsong.bitrac.action.AdminAction" />
添加属性<property name="memberDao" ref="memberDao" />
完成以后完整的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:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
- <bean id="dataSource"
- class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
- <property name="driverClass" value="com.mysql.jdbc.Driver" />
- <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/bitrac" />
- <property name="user" value="root" />
- <property name="password" value="" />
- </bean>
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <property name="mappingResources">
- <list>
- <value>com/albertsong/bitrac/dao/Member.hbm.xml</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.MySQLDialect
- </prop>
- <prop key="show_sql">true</prop>
- </props>
- </property>
- </bean>
- <bean id="memberDao" class="com.albertsong.bitrac.dao.MemberDaoImpl">
- <property name="sessionFactory" ref="sessionFactory" />
- </bean>
- <bean name="adminAction" class="com.albertsong.bitrac.action.AdminAction" scope="prototype">
- <property name="memberDao" ref="memberDao" />
- </bean>
- </beans>
(要注意的是如果没有scope="prototype",则登录出错以后,不能再正确登录,原因显然是AdminAction缓存了member的数据,具体原理暂不研究)
新建Bitrac\src\com\albertsong\bitrac\dao\Member.hbm.xml,这是Hibernate的数据映射文件,内容如下
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="com.albertsong.bitrac.dao">
- <class name="Member" table="BT_Member">
- <id name="id" column="id">
- <generator class="native"/>
- </id>
- <property name="grade" />
- <property name="username" />
- <property name="password" />
- <property name="validate" />
- <property name="conserve" />
- <property name="contact" />
- <property name="picture" />
- <property
订阅
上一篇
返回
下一篇