工具Q?a id="z7iy" title="MyEclipse 6.0.1 GA" target="_blank">MyEclipse 6.0.1 GA?a id="s2.:" title="mysql-connector-java-5.0.4-bin.jar" target="_blank">mysql-connector-java-5.0.4-bin.jar?a id="teuw" title="mysql-gui-tools" target="_blank">MySql GUI Tools 5.0Q便于管理MySql数据库,不是必须Q?/p>
环境Q?a id="i:oc" title="Tomcat5.5" target="_blank">Tomcat 5.5?a id="vh5u" title="MySql 5.0" target="_blank">MySql 5.0
1.1. 新徏工程
操作Q[Menu] File/New/Web Project
工程名:(x)login

2. Struts 部分
2.1. d Struts 功能支持
操作Q[Menu] MyEclipse/Project Capabilities/Add Struts Capabilities

?“yourcompany” 替换?“login”?/p>
2.2. 创徏 ActionForm c?/strong>
操作Q[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Form
cdQLoginForm

?“Use case” 里输?“Login” 后,Name、Form type {会(x)自动填充?/p>
?“Form Properties” 选项卡ؓ(f) loginForm 新增两个属性:(x)username、passwordQ?#8221;Type” ?“JSP input type” 分别保持默认?“java.lang.String” ?“text”Q?/p>
?“JSP” 选项卡钩?“Create JSP form” 选项Q将新徏路径改ؓ(f) “/login.jsp”Qlogin.jsp文g被自动创徏Q?/p>
2.3. 创徏 Action c?/strong>
操作Q[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Action
cdQLoginAction

?“Form” 选项卡的 “Name” w择 “loginForm”Q?#8221;Input Source” 输?“/login.jsp”?/p>
2.4. 创徏 index.jsp 文g
如果没有Q创?index.jsp 文gQƈd一个指?login.jsp 的链接:(x)<a href = “login.jsp”>Login</a>?/p>
2.5. 创徏Forwordc?/strong>
操作Q[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Forword
cdQindexForword

“Name” 输?“indexForword” Q?#8221;Path” w择 “/index.jsp” ?/p>
2.6. 修改 LoginAction.java 文g
修改 LoginAction cȝ execute Ҏ(gu)Q?/p>
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 文g
修改 <html:form> 标签Q?span style="color: #3333ff;"><html:form action=”/login”>?/p>
2.8. 试
操作Q[Menu] Run/RunQ选择 MyEclipse Server Application 方式q行
Q?span style="color: #ff0000;">要正常执行Run操作Q需先安?Tomcat5.5 ?/span>Q?/p>

点击 index.jsp 面?“Login” 链接Q蟩转到 login.jsp 面。在 login.jsp 面输入
“test/test”Q应该会(x)d成功Q然后蟩转到 index.jsp 面Q输?“test/123″ Q应该保持在 login.jsp
面?/p>
如果试成功Q证?Structs q行正常?/p>
如果q行出错Q请参考文章最后的“5. 问题?#8221;?/p>
3. Spring 部分
3.1. d Spring 功能支持
操作Q[Menu] MyEclipse/Project Capabilities/Add Spring Capabilities

Spring 版本Q?Spring version Q选择 “Spring 1″Q?/p>
开发包QlibrariesQ选择 “Spring 1.2 AOP Libraries、Spring 1.2 Core
Libraries、Spring 1.2 Persistence Core Libraries、Spring 1.2 Persistence
JDBC Libraries” 四项Q?/p>
JAR Library Installation 选择 “copy checked…” Q?#8221;Library Folder” w择 “/WebRoot/WEB-INF/lib”Q这L(fng)话所需的类库都拷贝到目目录Q方便以后的布vQ?/p>
点击 “下一?Next)” 创徏配置文gQ修Ҏ(gu)件\径(F(tun)olderQ到 “WebRoot/WEB-INF” 目录Q以便和Struts配置文g一L(fng)理)(j)Q文件名UCؓ(f)默认?#8221;applicationContext.xml”?/p>

点击 “完成(Finish)” ?/p>
3.2. 配置 struts-config.xml 文g
d Spring 插gQ在 <message-resources> 标签后面dQ:(x)
<plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”>
<set-property property=”contextConfigLocation” value=”/WEB-INF/applicationContext.xml” />
</plug-in>
修改 LoginAction 的配|(只需修改 type 属性)(j)Q?/p>
<action-mappings >
<action
attribute=”loginForm”
input=”/login.jsp”
name=”loginForm”
path=”/login”
scope=”request”
type=”org.springframework.web.struts.DelegatingActionProxy” />
</action-mappings>
l色字体部䆾修改q的内容Q这里将使用 spring 的代理器 DelegatingActionProxy 来对 Action q行控制?/p>
3.3. 修改 Spring 配置文g 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>
l色字体是关于接受和处理 Action 控制权的配置内容Q?#8221;com.login.struts.action.LoginAction” 即ؓ(f)?struts 里的配置?/p>
3.4. 试
同上一ơ测试。测试成功证?Spring q行正常?/p>
如果q行出错Q请参考文章最后的“5. 问题?#8221;?/p>
4. Hibernate 部分
下面开?Hibernate 部分Q将原例修改Z用数据库q行用户?密码验证?/p>
4.1. 创徏 mysql 数据库和?/strong>
d表的代码如下Q?/p>
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)
)
再添加一条记录:(x)
insert into user_table (USERNAME,PASSWORD) values (‘test’,'test’)
4.2. 创徏 MyEclipse 数据库驱动(DB DriverQ?/strong>
操作Q[Menu] MyEclipse/Prefrences/MyEclipse/Database Explorer/Database Driver/DB Brower

?DB Brower 的菜单中选择 “New” Q?#8221;Driver Name” 输?“login-conn” Q?#8221;Connection
URL” 输?“jdbc:mysql://localhost:3306/test” Q然后输?MySql 的用户名QUser
NameQ和密码QPasswordQ,按实际情况输入;
?“Driver JARs” Ҏ(gu)?“mysql-connector-java-5.0.4-bin.jar” (可从|上下蝲)Q在 “Driver classname” 里选择 “com.mysql.jdbc.Driver” Q其它自选?/p>
点击 “完成(Finish)”?/p>
4.3. d Hibernate 功能支持
操作Q[Menu] MyEclipse/Project Capabilities/Add Hibernate Capabilities

Hibernate 版本QHibernate SpecificationQ选择 “Hibernate 3.1″ Q开发包QlibrariesQ选择 Hibernate 3.1 Core Libraries 一;
JAR Library Installation 选择 “copy checked…” Q?#8221;Library Folder” 选择 “/WebRoot/WEB-INF/lib” ?/p>
点击 “下一?Next)” 讄配置文gQ?/strong>

选择 “Spring configuration file (applicationContext.xml)” ?/p>
“下一?Next)” 讄 Spring-HibernateQ?/strong>

选择 “Existing Spring configuration file” Q?#8221;SessionFactory ID” 输?“sessionFactory” ?/p>
“下一?Next)” 创徏数据源对象:(x)

?Bean Id 中输?dataSourceQ?#8221;DataSource” w择 “Use JDBC Dirver” QDB Driver w择 “login-conn” Q其余项?x)自动填充?/p>
记得选中 “Copy DB driver jar(s) to project and add to buidpath” ,以便数据连接的库文件复制到目Q方便以后的布v?/p>
“下一?Next)” 创徏 SessionFactory c:(x)

“Java package” 设|ؓ(f) “com.login.Hibernate” Q如果没有,点击 “New” 按钮dQ,”Class
name” 修改ؓ(f) “SessionFactory” QJava Compliance Level 选择和创建项目时选择?Java
版本。(本例中ƈ没有用到 SessionFactory c,留作今后扩展Q?/p>
点击 “完成(Finish)”?/p>
4.4. 创徏对象关系映射(ORM)的相x?/strong>
操作Q[Menu] Window/Open Perspective/MyEclipse Database Explorer

选中 user_table 表,点击右键Q在出现的菜单中选择 “Hibernate Reverse Engnieering” ?/p>

在弹出的H口中保?“Java package” ؓ(f) “com.login” Q?/p>
选中 “Hibernate mapping file (*.hbm.xml) for each databases table” Qƈ保持 “Update hibernate…” w中Q?/p>
选中 “Java Data Object” ,q保?“Create abstract class” 选中Q?/p>
“Base persistent class” 留I;
取消 “Java Data Access Object…” 和 “Use custom templates” V?/p>
点击 “下一?Next)” Q再点击 “下一?Next)” Q在 “Configure reverse engineering
details” 选中 “user_table” 表,在右边出现的 “Class Name” 中输入
“com.login.User”Q其它不变?/p>
点击 “完成(Finish)”?/p>
完成此操作,?x)?“com.login” 包下创徏三个文gQAbstractUser.java、User.java、User.hbm.xml?/p>
4.5. 创徏 UserDAO.java 接口
操作Q[Ctrl+N] InterfaceQ点?“下一? Next )”
在出现的 “New Java Interface” H口中,?“Source Folder” 讄?“login/src”Q将
“Package” 讄?“com.login”Q??“Name” 设?“UserDAO”Q然后点?“完成( Finish )”
按钮?/p>
UserDAO.java 内容如下Q?/p>
package com.login;
public interface UserDAO {
public abstract boolean isValidUser( String username, String password );
}
4.6. 创徏 UserDAOImpl.java c?/strong>
操作Q[Ctrl+N] ClassQ点?“下一? Next )”
在出现的 “New Java Class” H口中,?“Source Folder” 讄?“login/src”Q将
“Package” 讄?“com.login”Q??“Name” 设?“UserDAOImpl”Q在 “Supperclass”
输?“org.springframework.orm.hibernate3.support.HibernateDaoSupport”Q在
“Interface” 中d “com.login.UserDAO” 接口Q然后点?“完成( Finish )” 按钮?/p>
UserDAOImpl 通过 Hibernate 讉K数据库,做用户验证?/p>
UserDAOImpl.java 内容如下Q?/p>
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 文g
使用 UseDAO 对象来验证:(x)
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();
}
}
}
l色字体Z攚w分?/p>
4.8. Spring ?/strong>最l?/strong>配制文g 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, 注意q里引入的包的不?–>
<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. 试
同第一ơ测试?/p>
如果q行出错Q请参考文章最后的“5. 问题?#8221;?/p>
5. 问题?/strong>
5.1. Console 错误信息Q?java.net.BindException: Address already in use: JVM_Bind:8080
- 原因Q有其它q程占用?8080 端口Q导致绑定失败?/li>
- 解决Q如果是?Tomcat 启动?jin),其关闭QMyEclipse ?x)自己启?Tomcat?/li>
5.2. HTTP 错误信息Q?span style="color: #ff0000;">message Servlet action is not available
- 原因Q找不到相关cR可能配|文件中的某些类或文件的路径填写错误Q或是缺?jar 包?/li>
- 解决Q如果是在添?Spring Ҏ(gu)后产生的,可能?/WEB-INF/lib/ 中缺?spring.jar 包。从 MyEclipse 目录搜烦(ch)?1.2 版的 spring.jarQƈ其复制到项目的 /WEB-INF/lib/ 目录下?/li>
5.3. Console 错误信息Q?span style="color: #ff0000;">java.sql.SQLException: Access denied for user: ‘root@localhost’ (Using password: YES)
- 原因Q数据库讉K被拒l。可能由?MySQL 密码被设|成I,?MyEclipse 又不支持I密码?/li>
- 解决Q将 MySQL ?root 用户密码讄成非I,?“root”Q然后修?MyEclipse 中刚才添加的 login-conn 数据源信息的密码V?/li>
[ 标签Q?
hibernate,
j2ee,
myeclipse,
spring,
struts ]
[ 固定链接Q?a >http://blog.tanggaowei.com/2007/12/myeclipsesshstrutsspringhibernate.html ]
16 个评?/a>
| 分类 » 软g开?/a> |