zoukankan      html  css  js  c++  java
  • MyEclipse开发SSH(Struts+Spring+Hibernate)入门

    1. 准备

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

    环境:Tomcat 5.5MySql 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 的链接:<a href = “login.jsp”>Login</a>

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

    修改 <html:form> 标签:<html:form action=”/login”>

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

    <plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”>
        <set-property property=”contextConfigLocation” value=”/WEB-INF/applicationContext.xml” />
    </plug-in>

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

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

    </action-mappings>

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

    3.3. 修改 Spring 配置文件 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>

    绿色字体是关于接受和处理 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

    <?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, 注意这里引入的包的不同 –>
        <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. 测试

    同第一次测试。

    如果运行出错,请参考文章最后的“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 数据源信息的密码项。
  • 相关阅读:
    gitlab使用
    小程序顶部导航栏标题不居中
    mpvue中使用vant-weapp
    原生js实现轮播图
    vue无法检测数组的变动
    vue报错TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function
    vue绑定style使用需要添加浏览器引擎前缀的 CSS 属性
    《孙子算经》之"物不知数"题:中国剩余定理
    Java大数处理类:BigInteger类和BigDecimal类
    【转】操作系统典型调度算法
  • 原文地址:https://www.cnblogs.com/wangs/p/1923685.html
Copyright © 2011-2022 走看看