zoukankan      html  css  js  c++  java
  • 基于MyEclipse6.5的SSH整合

     

    1.编写目的

    最近在学习Struts1.2+Spring2.5+Hibernate3.2整合,这期间出现了很多问题,在网上找了若干的实例均有不同程度的问题,为了让想要学习这个整合的人少走弯路,特写下这篇文章,希望对大家有所帮助,如果有很么问题可以与我联系,Emailzhaohuawei@live.cn

    2.实验环境

    l  MyEclipse6.5

    l  Tomcat5.5.26

    l  MySQL5.0

    l  数据库脚本程序

    CREATE TABLE user (

           id int(11) NOT NULL auto_increment,

           username varchar(50) default NULL,

           password varchar(50) default NULL,

           PRIMARY KEY (id)

    );

    INSERT INTO user VALUES ('1', 'admin', 'admin');

    环境的搭建这里就不写了,估计大家应该很熟悉,不会的可以上网看一下,有很多这样的资料。

    3.Go!让我们开始创建工程

    打开MyEclipse,需要注意的是这里应该处于MyEclipse Java Enterprise视图;新建一个Web Project,输入适当的工程名字,这里我们输入sshFinish即可。

     

    确定之后MyEclipse会生成名为SSH的项目,其中生成的目录结构如下所示:

     

     

     

    4.添加Struts1.2框架支持

    ssh工程上面右击,在弹出的菜单中选择MyEclipse -> Add Struts Capabilities…,添加Struts的支持。

    在弹出的对话框中选择Struts 1.2,修改Base package for new classes成所需的包名,其余保持原状,Finish即可

    完成后的结构为:

    5.添加Spring2.0框架支持

    ssh工程上面右击,在弹出的菜单中选择MyEclipse -> Add Spring Capabilities…,添加Spring框架支持

     

    由于Spring采取最小化库发布的方式,使得Spring的库文件彼此都是分离的,因而我们需要自己选择需要的库,需要引用的如下图:

    选择好后Next,在窗口中选择Browse,选择ssh工程下面的WEB-INF文件夹,然后Finsh

     

    6.配置数据源

    MyEclipse右上角选择MyEclipse Database Explorer,打开数据库管理视图。

     

    在左侧的DB Browser点击右键,选择New…,打开Database Driver对话框。

     

     

    Database Driver对话框中按照如下配置选择数据库驱动。首先选择Driver Template,在这里我们选择MySQLDriver Name是以后配置时使用的驱动名字,用以区分驱动,这里使用MySQL即可。然后根据实际情况填写URLUser namePassword。点击Add JARs添加数据库驱动文件。为方便配置,可以选择Save password保存密码。配置完毕后Finish即可。

     

    7.SpringHibernate的整合

    当配置完数据源后,就可以添加Hibernate支持了。切换到MyEclipse Java Enterprise视图,在ssh工程上面右击,在弹出的菜单中选择MyEclipse -> Add Hibernate Capabilities…,添加Hibernate的支持。

    我们选择Hibernate3.2,全部按照默认设置即可,然后点击Next

     

    在对话框中选择Spring configuration file,表示我们希望将Hibernate托管给Spring进行管理,这是将HibernateSpring进行整合的基础。然后点击Next

     

    在出现的对话框中选择Existing Spring configuration file。因为我们已经添加了Spring的配置文件,所以这里选择的是已存在的配置文件。MyEclipse会自动找到存在的那个文件。然后在SessionFactory ID中输入HibernateSessionFactorySpring配置文件中的Bean ID的名字,这里我们输入sessionFactory即可。然后点击Next

     

    在出现的对话框中的Bean Id里面输入数据源在Spring中的Bean ID的名字,这里我们输入dataSource。然后在DB Driver里面选择我们刚刚配置好的sshMyEclipse会将其余的信息自动填写到表格里面。然后点击Next

     

    在出现的对话框中取消Create SessionFactory class。点击Finish即可。

     

    此时MyEclipse会自动打开Spring的配置文件,文件内容为:

    此时,切换到MyEclipse DataBase Explorer视图,右键打开数据库连接,在需要使用的数据表格上面点击右键,选择Hibernate Reverse Engineering...。这里我们使用刚刚建立在test数据库中添加的user表。

     

    在打开的对话框中修改Java src folder为我们建立的/ssh/src,这里需要选择到src文件夹,并且需要填写Java package,这是MyEclipse生成的类所在的包,我们将其取名为user。然后选择Java Data Object,建立POJO类。然后选择Java Data Access Object。其中,POJO类是数据库表格所对应的Java类,JDO类是MyEclipse自动生成的对数据库的一些操作。这里会封装一些常用的操作,简化我们的编写。填写完成后点击Next

     

    在出现的对话框中选择ID Generatornative,然后点击Finish即可。

     

    此时ssh项目的目录结构如下所示。其中的User.JavaMyEclipse生成的使用面向对象的Java语言对数据库表格进行的抽象,User.hbm.xml是将数据库表格中的字段和POJO类的属性进行映射的定义,UserDAO.java封装了一些MyEclipse自动生成的对数据库的操作。

     

    这时我们修改一下文件目录,使之更好的组织。我们建立一个dao包,将DAO类与POJO类分开。然后我们在struts包下面建立actionform包,用来管理StrutsActionForm。为了将实现与接口进行解耦,我们建议在dao包下面添加接口,然后建立dao.impl包,将实际的DAO类放在这里。DAO类是直接与数据库打交道的类,为了对业务逻辑进行封装,我们将业务全部写在service类里面,和dao一样,我们先建立service包,里面添加业务接口,具体的实现放在service.impl里面。

    UserDAO.java移动到daoimpl包下面,并在dao包下建立接口IUserDAO,内容为:

    package com.ssh.dao;

    import java.util.List;

    import com.ssh.user.User;

     

    public interface IUserDAO {

        public User findById(Integer id);

        public List findByUsername(Object username);

        public void save(User user);

    }

    service中建立接口IUserService.java,在serviceimpl中建立UserService.java

    IUserService.java

    package com.ssh.service;

    import com.ssh.user.User;

     

    public interface IUserService {

           public User getUserById(Integer id);

           public User getUserByUsername(String username);

           public void addUser(User user);

    }

     

     

     

    UserService.java

    package com.ssh.service.impl;

    import java.util.List;

    import com.ssh.dao.IUserDAO;

    import com.ssh.service.IUserService;

    import com.ssh.user.User;

     

    public class UserService implements IUserService {

        private IUserDAO userDAO;

     

        public void addUser(User user) {

           userDAO.save(user);

        }

     

        public User getUserById(Integer id) {

           return userDAO.findById(id);

        }

     

        public User getUserByUsername(String username) {

           List list = userDAO.findByUsername(username);

           if (list.size() == 0) {

               return null;

           } else {

               return (User) list.get(0);

           }

        }

     

        public IUserDAO getUserDAO() {

           return userDAO;

        }

     

        public void setUserDAO(IUserDAO userDAO) {

           this.userDAO = userDAO;

        }

    }

     

     

     

    此时的整体工程结构为:

     

    此时的applicationContext内容需要配置bean内容为:

     

     

     

    <bean id="UserDAO" class="com.ssh.dao.impl.UserDAO">

        <property name="sessionFactory">

           <ref bean="sessionFactory" />

        </property>

    </bean>

     

     

     

    8.整合StrutsSpring

    StrutsSpring整合方式其核心是让Struts能够访问到交给Spring进行托管的类,这个我在网上看到了一个方式,自我认为很好,因此只要我们可以让StrutsSpring获得需要的类就可以了。 为了达到这个目标,我们创建一个类BaseAction

    package com.ssh.struts.action;

    import org.springframework.web.context.WebApplicationContext;

    import org.springframework.web.context.support.WebApplicationContextUtils;

    import org.springframework.web.struts.ActionSupport;

     

    public class BaseAction extends ActionSupport {

             protected Object getBean(String id) {

                       WebApplicationContext ctx = WebApplicationContextUtils

                                         .getWebApplicationContext(this.servlet.getServletContext());

                       return ctx.getBean(id);

             }

    }

    为了让Web容器能够初始化Spring,我们需要修改web.xml文件,增加以下内容:

    <context-param>

                       <param-name>contextConfigLocation</param-name>

                       <param-value>/WEB-INF/applicationContext.xml</param-value>

             </context-param>

             <servlet>

                       <servlet-name>SpringContextServlet</servlet-name>

                       <servlet-class>

                                org.springframework.web.context.ContextLoaderServlet

                       </servlet-class>

                       <load-on-startup>1</load-on-startup>

             </servlet>

     

     

     

     

    9.啊,让看看我们工作是否有效

    通过上面的配置,我们已经能够让这三个框架来协同作战了,让我们现在来测试一下。

    首先创建基于StrutsJSP页面。打开WEB-INF下面的struts-config.xml,单击右键,选择New -> Form, Action and JSP

    在弹出的对话框中添加User case,然后点击Add生成Properties代码。这会由MyEclipse自动生成相应的Form代码。输入完成后选择JSP选项卡,选上Create JSP form,修改路径,然后点击Next

     

     

    在出现的对话框中修改Path,将Superclass更改为前面定义的BaseAction,然后将Input Source修改为自己需要的路径。完成后Finish即可。

     

    然后在struts-config.xml点击右键,选择New -> Forward,准备创建一个ActionForward

     

    在弹出的对话框中,选择Local Action Forward,通过Browser填写Action Path,然后填写NamePath,完成后点击Finish即可。

     

    LoginAction中添加如下代码

    public ActionForward execute(ActionMapping mapping, ActionForm form,

               HttpServletRequest request, HttpServletResponse response) {

           LoginForm loginForm = (LoginForm) form;

           String username = loginForm.getUsername();

           String password = loginForm.getPassword();

           ActionForward forward = mapping.getInputForward();

           IUserService service = (IUserService) getBean("userService");

           User userFromDB = service.getUserByUsername(username);

           if (userFromDB.getPassword().equals(password)) {

               forward = mapping.findForward("suc");

           }

           return forward;

        }

     

     

    login.jsp内容

    <%@ page language="java" pageEncoding="ISO-8859-1"%>

    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>

    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

     

    <html>

        <head>

           <title>JSP for LoginForm form</title>

        </head>

        <body>

           <html:form action="/login">

               password : <html:password property="password"/><html:errors property="password"/><br/>

               username : <html:text property="username"/><html:errors property="username"/><br/>

               <html:submit/><html:cancel/>

           </html:form>

        </body>

    </html>

    Ok,这时我们可以启动Tomcat进行查看页面了

    10.黎明前的黑暗

    上面的工作完成以后理论上应该可用,但是当你运行的事后却发现会有一个非常诡异的异常出现

     

    这个问题本来面目是这样,由于MyEclipse给我们做的事情太全面了,全面到springhibernate的包都是重复引用的。

    其解决办法就是干掉多余的包,在Tomcat 5.5/webapps/ssh/WEB-INF/lib下的asm-2.2.3.jar就可以了,在重启Tomcat我们看看我们干了这么长时间的成果吧,

    真令人失望又失败了,呵呵有如下异常:

     

    哎,谁叫俺的脑子不好使能,忘了加入bean的初始化,在applicationContext.xml中加入如下内容就可以了

     

     

     

     

    <bean name="userService" class="com.ssh.service.impl.UserService">

        <property name="userDAO">

           <ref bean="UserDAO" />

        </property>

    </bean>

     

     

    历经千难万阻,我们终于看到了一个想看的巨破巨简陋的界面,呵呵,就到这里吧,估计大家要疯了。

     

  • 相关阅读:
    JUC并发工具包之Semaphore
    Linux命令
    uWSGI
    数据库 MySQL 练习
    c++
    c++ 初阶
    Git
    MySQl 和 Redis
    MySQL 查询
    MySQL 命令
  • 原文地址:https://www.cnblogs.com/yefengmeander/p/2887891.html
Copyright © 2011-2022 走看看