MyEclipse 配置SSH框架

環境說明


本文章是根據個人的搭建經驗完成的輕量級SSH框架,也是實際應用中比較全面的基礎框架。其中SSH指:Struts,Spring, Hibernate,是一個將MVC思想發揮的很好的web框架。
開發平臺: Windows 7 + MyEclipse 2014 + Tomcat 8.0.3+ JDK 1.7 + Mysql
不同的版本大同小異。
其中SSH所需的包均直接使用MyEclipse2014內集成的jar包,這樣無需手動添加,比較方便。

建立工程目錄


新建工程

打開MyEclipse, 新建一個web project:
file -> new -> Web Project 如下圖所示:

newproject

然後next兩步,到下面時,修改一點:

web

之後直接next到finish即可, 建立後目錄如下:
finishcreate

建立src目錄

爲了使得目錄結構清晰,將不同層次的源程序放到不同包內,分別建立
如下4個目錄:

 - com.ssh.action  :存放Action代碼
 - com.ssh.service :存放Service代碼
 - com.ssh.dao     :存放Dao代碼
 - com.ssh.entity  :存放數據庫實體類

直接右擊src, 然後new -> package 如下圖:

com.ssh.action

然後直接finishi即可。同樣的步驟建立剩下三個目錄。
這一步完成後的目錄如下:

這裏寫圖片描述

導入Struts,Spring,Hibernate環境


就是導入SSH環境了,這裏使用的是MyEclipse集成的jar包

導入Struts

過程:右擊項目名SSH 然後 MyEclipse ->Project Facets[capabilities]->Install Apache Struts 2.x Facet
初始圖如下:

struts1

next到這步修改爲第三項:

struts2

之後一直到finish即可。
安裝完了之後,會發現在目錄下多了關於struts的jar包目錄。

導入Spring

導入Spring與Struts 過程幾乎相同
右擊項目名稱:MyEclipse ->Project Facets[capabilities]->Install Apache Spring Facet 之後一路next到finish即可。

導入hibernate

這個比較複雜一些,需要先配置數據庫連接。

建立數據庫

這裏建立一個數據庫表來測試搭建是否成功。

create database sshtest;

use sshtest;
create table t_user
(
   id              int  not null auto_increment,
   name            varchar(20) not null,
   password        varchar(10) not null,
   primary key (id)
);

insert into t_user values(1,'shomy','123')

建立連接

建立數據庫之後,在MyEclipse裏面通過中間鍵來連接。過程如下:
首先切換到數據庫視圖:
菜單欄 Window -> open perspective -> show MyEclipse database explorer
如下圖:

db pers

開始只有一個MyEclipse Derby, 我們新建一個, 右擊它, 然後new ,如下圖:修改如下,這裏需要一個連接數據庫的jar

db

完成之後,點擊 Test Driver 如果出現建立成功即可。
然後在程序的右上角,切換到MyEclipse視圖。

導入Hibernate

建立了數據庫連接之後, 就可按照導入struts,與spring 的樣子,導入
Hibernate。
右擊工程MyEclipse ->Project Facets[capabilities]->Install Apache Spring Facet 如下圖:

Hib

然後next到此處: 修改目錄:

這裏寫圖片描述

在next 到此處加入 上一步新建的數據庫連接。

這裏寫圖片描述

建立完成之後,直接yes即可。

映射數據庫表

然後在切換到Database視圖。如圖:

這裏寫圖片描述

選擇: Hibernate Reverse Engneering.
next 到此處時: 注意修改

這裏寫圖片描述

然後finish即可。之後切換到MyEclipse視圖,此時目錄結果如下:

這裏寫圖片描述

此時SSH的jar包以及數據庫的映射完成。

建立Java與Jsp文件


上一步結束之後,開始在四個目錄裏面寫東西了。
其中 dao與service 都是建立一個接口,一個實現。
首先是 com.ssh.dao ,:
在dao目錄右擊,new ->interface: 名字處填寫:UserDAO,代碼如下

package com.ssh.dao;
import com.ssh.entity.TUser;

public interface UserDAO {
    public TUser queryUserByName(String name);//查詢函數
}

然後創建dao的實現: new -> class 名字爲 : UserDAOImpl
代碼如下:

package com.ssh.dao;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import com.ssh.entity.TUser;

public class UserDAOImpl implements UserDAO {
    private SessionFactory sessionFactory;

    public TUser queryUserByName(String name) {
        Query query = sessionFactory.getCurrentSession().createQuery(
                "from TUser as u where u.name = ?");
        query.setString(0, name);
        TUser u = (TUser) query.uniqueResult();
        return u;
    }
    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
}

然後創建service代碼:
先建立一個interface:在com.ssh.service 目錄裏面,new -> interface 名字: UserService 代碼如下:

package com.ssh.service;
public interface UserService {
    public boolean login(String name,String password);
}

new -> class: UserServiceImpl` 代碼如下:

package com.ssh.service;

import com.ssh.dao.UserDAO;
import com.ssh.entity.TUser;

public class UserServiceImpl implements UserService {
    private UserDAO userDAO;

    public boolean login(String name, String password) {
        TUser u = userDAO.queryUserByName(name);
        if (u == null) {
            return false;
        } else {
            if (u.getPassword().equals(password)) {
                return true;
            } else {
                return false;
            }
        }
    }
    public UserDAO getUserDAO() {
        return userDAO;
    }
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }
}

最後建立action 文件 ,在 com.ssh.action 目錄下: new -> class 名字爲: LoginAction
代碼爲:

package com.ssh.action;
import com.ssh.service.UserService;

public class LoginAction  {
    private String name;
    private String password;
    private UserService userService;

    public String login() {
        /* NAME和PASSWORD爲空則返回登錄頁面,否則驗證登錄 */
        if (null == name && null == password) {
            return "login";
        } else {
            Boolean u = userService.login(name, password);
            if (u) {
                return "ok";
            } else {
                return "error";
            }
        }
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public UserService getUserService() {
        return userService;
    }
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
}

到此java 文件建立完成。
下面建立三個測試的jsp文件:
WebRoot 下建立三個jsp 步驟: 右擊webroot, new -> jSP(..), 分別命名爲: login.jsploginOk.jsp, loginError.jsp ; 代碼分別如下:
login.jsp

<html><body>
<center><form method="post" action="login" >
  UserName<input type="text" name="name" id="name"/><br/>
  Password<input type="password" name="password" id="password"/><br/>
          <input type="submit" value="login" /></form></center>
</body></html>

loginOk.jsp: 代碼

<html> 
  <body>
      <center><h1>Login Is Ok</h1></center>
  </body>
</html>

loginError.jsp: 代碼

<html> 
  <body>
      <center><h1>Login Is Error</h1></center>
  </body>
</html>

至此,jsp,java文件均已完成,下面也是最關鍵的,修改配置文件。

修改配置文件


首先修改struts.xml 在src 下, 將struts.xml 修改爲:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="default" extends="struts-default">
        <action name="login" class="com.ssh.web.LoginAction" method="login">
           <result name="login">login.jsp</result>
           <result name="ok">loginOk.jsp</result>
           <result name="error">loginError.jsp</result>
        </action>
    </package>

</struts>    

然後修改同一個目錄下的:ApplicationContent.xml 可以看出,原來的文件裏面已經有了不少內容,且都是由bean塊組成。我們需要修改並添加一些內容,完整的代碼如下:數據庫名字,數據庫密碼等因人而異。

<?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" xmlns:tx="http://www.springframework.org/schema/tx">


 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
        </property>
    </bean> 




    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName"  value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/shopping"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123"></property>
    </bean>
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>
            </props>
        </property>
        <property name="mappingResources">
            <list>

                <value>com/ssh/entity/TUser.hbm.xml</value></list>
        </property>
        </bean>
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
        <property name="transactionManager" ref="transactionManager" /> 
        <property name="transactionAttributes">
            <props>
                <!-- 指明進行事務管理業務方法名[*是通配符] -->
                <prop key="add*">PROPAGATION_REQUIRED</prop>
                 <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="edit*">PROPAGATION_REQUIRED</prop>
                <prop key="del*">PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

     <!-- 登錄Action -->
    <bean id="loginAction" class="com.ssh.action.LoginAction" scope="singleton">
    <property name="userService" ref="userService" />
    </bean>

    <!-- userDAO  -->
    <bean id="userDAO" class="com.ssh.dao.UserDAOImpl" parent="daoTemplate" />
    <bean id="userService" parent="baseTransactionProxy">
        <property name="target">
            <bean class="com.ssh.service.UserServiceImpl">
                <property name="userDAO" ref="userDAO"/>
            </bean>
        </property>
    </bean> 

        <bean id="daoTemplate" abstract="true">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager" /></beans>

其中新加的關鍵部分就是 ,每次添加新的功能時,都需要照貓畫虎的,加上兩個相應的bean。

 <!-- 登錄Action -->
    <bean id="loginAction" class="com.ssh.action.LoginAction" scope="singleton">
    <property name="userService" ref="userService" />
    </bean>

    <!-- userDAO  -->
    <bean id="userDAO" class="com.ssh.dao.UserDAOImpl" parent="daoTemplate" />
    <bean id="userService" parent="baseTransactionProxy">
        <property name="target">
            <bean class="com.ssh.service.UserServiceImpl">
                <property name="userDAO" ref="userDAO"/>
            </bean>
        </property>
    </bean> 

最後添加 jdbc.properties 在src目錄下,new ->file 名字直接填:
jdbc.properties
修改內容如下: 數據庫名字,數據庫密碼等因人而異。

proxool.maxConnCount=5
proxool.minConnCount=2
proxool.statistics=1m,15m,1h,1d
proxool.simultaneousBuildThrottle=5
proxool.trace=false
proxool.verbose=false

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/sshtest?useUnicode=true&amp;characterEncoding=gbk
jdbc.username=root
jdbc.password=123

具體的原理,看代碼也大概看的差不多。多加幾個慢慢就熟悉了。我這就不細講每一行的作用了。

測試


至此,環境搭好了,不過還有一點點瑕疵,就是struts包與Hibernate包裏面有重複的antlr.jar 不過版本不同,可能會引起錯誤。因此我們移除掉struts的antlt2.7.2.jar:
右擊項目 -> build path ->configure build path 如下:
這裏寫圖片描述

點擊Edit 彈出:

這裏寫圖片描述

之後點擊ok即可。
最後可以修改一下 web.xml文件
WebRoot/WEB-INFO 下, 修改一下默認頁面如下:

這裏寫圖片描述

最後開始運行: 右擊項目->run as -> MyEclipse Server Application 在彈出的的窗口中,選擇自己相應的服務器,我這裏是tomcat 8.0.3. 然後點擊OK, 服務器開始啓動,
可以通過console 查看進度,等完全啓動,會顯示:

這裏寫圖片描述

然後在瀏覽器地址欄裏輸入:localhost:8080/SSH
彈出輸入框,輸入正確的用戶名 密碼, 顯示Login is Ok ,並且,輸入錯誤的用戶名密碼,顯示login is Error 表示搭建成功。

這裏寫圖片描述

至此,整個SSH 框架藉助MyEclipse 搭建成功,一開始也各種問題,各種404,500. 但是搭建成功之後,不得不說,SSH很完善,封裝擴展性很好,層次分明。多寫幾個ACTION, 就會熟悉框架的用法了。

附代碼

附件是 搭建成功的SSH 框架,可以,修改一點數據庫的東西,就可以使用,可以作參考。其中 muysql-java.jar 在工程裏面。

SSH樣例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章