Chinaunix首页 | 论坛 | 博客
  • 博客访问: 924036
  • 博文数量: 264
  • 博客积分: 10107
  • 博客等级: 上将
  • 技术积分: 2455
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-09 16:34
文章分类

全部博文(264)

文章存档

2012年(1)

2011年(11)

2010年(128)

2009年(82)

2008年(42)

我的朋友

分类: 系统运维

2009-06-30 10:31:01

(本文参考自 oksonic 的“Struts+Spring+Hibernate练习(完整)”)

源码下载:

1. 准备

工具:、mysql-connector-java-5.0.4-bin.jarMySql GUI Tools 5.0(便于管理MySql数据库,不是必须)

环境:、MySql 5.0

1.1. 新建工程

操作:[Menu] File/New/Web Project

工程名:login

2. Struts 部分


2.1. 添加 Struts 功能支持

操作:[Menu] MyEclipse/Project Capabilities/Add Struts Capabilities

 

将 “yourcompany” 替换成 “login”。

2.2. 创建 ActionForm 类

操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Form

类名:LoginForm

在 “Use case” 里输入 “Login” 后,Name、Form type 等会自动填充。

在 “Form Properties” 选项卡为 loginForm 新增两个属性:username、password,”Type” 和 “JSP input type” 分别保持默认的 “java.lang.String” 和 “text”;

在 “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 的链接:Login

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 文件

修改 标签:

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 运行正常。

如果运行出错,请参考文章最后的“5. 问题集”。

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 插件(在 标签后面添加):


   

修改 LoginAction 的配置(只需修改 type 属性):


            attribute=”loginForm”
        input=”/login.jsp”
        name=”loginForm”
        path=”/login”
        scope=”request”
        type=”org.springframework.web.struts.DelegatingActionProxy” />



绿色字体部份为被修改过的内容,这里将使用 spring 的代理器 DelegatingActionProxy 来对 Action 进行控制。

3.3. 修改 Spring 配置文件 applicationContext.xml



   


绿色字体是关于接受和处理 Action 控制权的配置内容,”com.login.struts.action.LoginAction” 即为原 struts 里的配置。

3.4. 测试

同上一次测试。测试成功证明 Spring 运行正常。

如果运行出错,请参考文章最后的“5. 问题集”。

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” ,然后输入 MySql 的用户名(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 接口

操作:[Ctrl+N] Interface,点击 “下一步( Next )”

在出现的 “New Java Interface” 窗口中,将 “Source Folder” 设置为 “login/src”,将 “Package” 设置为 “com.login”, 将 “Name”  项设为 “UserDAO”,然后点击 “完成( Finish )” 按钮。

UserDAO.java 内容如下:

package com.login;

public interface UserDAO {
    public abstract boolean isValidUser( String username, String password );
}

4.6. 创建 UserDAOImpl.java 类

操作:[Ctrl+N] Class,点击 “下一步( Next )”

在出现的 “New Java Class” 窗口中,将 “Source Folder” 设置为 “login/src”,将 “Package” 设置为 “com.login”, 将 “Name”  项设为 “UserDAOImpl”,在 “Supperclass” 项输入 “org.springframework.orm.hibernate3.support.HibernateDaoSupport”,在 “Interface” 项中添加 “com.login.Hibernate.UserDAO” 接口,然后点击 “完成( Finish )” 按钮。

UserDAOImpl 通过 Hibernate 访问数据库,做用户验证。

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.7. 修改 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.8. Spring 的最终配制文件 applicationContext.xml


>

   
       
       
       
       
   

   
   
       
           
       

       
           
                com/login/User.hbm.xml
           

       

       
           
                org.hibernate.dialect.MySQLDialect
                true
           

       

   

   
       
           
       

   

   
       
           
       

   

   
       
           
       

       
           
       

       
           
                PROPAGATION_REQUIRED
                PROPAGATION_REQUIRED,readOnly
                PROPAGATION_REQUIRED,readOnly
           

       

   

   
       
           
       

   

4.9. 测试

同第一次测试。

如果运行出错,请参考文章最后的“5. 问题集”。

5. 问题集

    5.1. Console 错误信息: java.net.BindException: Address already in use: JVM_Bind:8080

  • 原因:有其它进程占用了 8080 端口,导致绑定失败。
  • 解决:如果是有 Tomcat 启动了,将其关闭,MyEclipse 会自己启动 Tomcat。

    5.2. HTTP 错误信息:message Servlet action is not available

  • 原因:找不到相关类。可能配置文件中的某些类或文件的路径填写错误,或是缺少 jar 包。
  • 解决:如果是在添加 Spring 特性后产生的,可能是 /WEB-INF/lib/ 中缺少 spring.jar 包。从 MyEclipse 目录搜索出 1.2 版的 spring.jar,并将其复制到项目的 /WEB-INF/lib/ 目录下。

    5.3. Console 错误信息:java.sql.SQLException: Access denied for user: ‘root@localhost’ (Using password: YES)

  • 原因:数据库访问被拒绝。可能由于 MySQL 密码被设置成空,而 MyEclipse 又不支持空密码。
  • 解决:将 MySQL 的 root 用户密码设置成非空,如 “root”,然后修改 MyEclipse 中刚才添加的 login-conn 数据源信息的密码项。
阅读(1282) | 评论(0) | 转发(0) |
0

上一篇:struts笔记(6)

下一篇:3DMax制作的整体衣橱

给主人留下些什么吧!~~