.net轉java 學習筆記 (六) 使用eclipse 搭建 ssh框架( struts spring hibernate )

ssh爲 struts+spring+hibernate的一個集成框架,是目前較流行的一種Web應用程序開源框架html

struts  :是一個基於MVC設計模式的Web應用框架,struts相似.net mvc中的控制器 (Controller)java

spring  :管理對象的生命週期,建立,裝配和配置等;它的特性就是 ,DI (依賴注入)和 AOP(面向切面設計),上一章已經講過,它也是ssh中最難的,說白了就是bean的注入;web

 hibernate :數據庫映射框架,對JDBC進行了很是輕量級的對象封裝spring

從職責上分爲  表示層 ,業務邏輯層,數據持久層  和 實體層sql


 準備工做:下載環境(下載 struts ,spring ,hibernate),eclipse默認不包含這些東西;數據庫

我整合了一個ssh的jar包,解壓後解決可用:整合的ssh架包.rar  apache

連接:https://pan.baidu.com/s/1bahlwgoM3w8ehXzMR78_yg       提取碼:hyat設計模式

mvc

固然你也能夠分別去官網下載(不推薦):app

1:下載struts     struts-2.3.35-apps.zip

官網地址:   http://struts.apache.org/download.cgi#struts252

 

2:下載spring       spring-framework-4.2.2.RELEASE-dist.zip 

官網地址:  https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring/4.2.2.RELEASE/spring-framework-4.2.2.RELEASE-dist.zip 

 
3:下載hibernate      hibernate-release-5.3.6.Final.zip
官網地址:http://hibernate.org/orm/
 
)
 
另外若是要操做數據庫,還須要一個 jdbc的架包 (第三章已經講過,可是沒有的話依舊能夠去下載)     sqljdbc42.jar
連接:https://pan.baidu.com/s/1wjGPQmT5DpkBGUf5IgXskA 密碼:bhng
 
 

 準備工做:導入包(下載 struts ,spring ,hibernate)
下載完包之後我把他丟在  E:\Program Files\Java\整合的ssh架包,這裏面已經包括了全部的   struts ,spring ,hibernate 以及它所須要的擴展的jar包 
 
 
 

 下面講怎麼把下載的包引用到項目中:

第一步:直接在eclipse中建立一個web應用程序 ,我給他取名叫ssh

file----new ----other ---web---Dynamic web project ----next----取名ssh,next ----勾上「Generate web.xml deployment descriptor」 ---finis

 

第二步:

最後我解壓的路徑是:E:\Program Files\Java\整合的ssh架包  

把裏面的jar包直接copy 到項目中  ssh---webContent----Web-InF----lib下面

 

第三步:若是要連j數據庫,就須要配置dbc,就是把 sqljdbc42.jar 也copy到項目中

個人路徑是:  E:\Program Files\Java\jdbc\sqljdbc_6.0\chs\jre8\sqljdbc42.jar   也copy到項目中就行了

 

 


 

配置XML文件 

1:新建4個包:new---package---輸入名稱就能夠創建;

(我在創建的過程當中發現包不在指定位置上,按F5刷新就能夠解決了)

2:新建2個xml文件   ,new----Other----XML----XML File--Next---輸入名稱----Finish

applicationContext.xml    (spring配置用)

struts.xml   (Struts配置用) 

 

 

這2個xml的內容先不用管他,後面會告訴你應該加些什麼:

 

3:修改 ssh---WebContent----Web-INF-- web.xml, 修改內容以下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ssh</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
   <!-- struts2的過濾器 -->
   <filter>
       <filter-name>struts2</filter-name>
       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
   </filter>
   
   <filter-mapping>
           <filter-name>struts2</filter-name>
           <url-pattern>/*</url-pattern>
   </filter-mapping>
   
   <!-- spring的監聽器配置開始 -->
   <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:applicationContext.xml</param-value>
   </context-param>
   <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
   
   
</web-app>

仔細看你會發現,主要加了幾個標籤 :

<filter> <filter-mapping>     主要是struts2 的過濾器設置 

<context-param> <listener>   Spring的監聽器

看不懂不要緊,直接複製粘貼就行了,你只須要知道這些配置文件就是告訴了eclipse,須要使用 Struts 和 Spring,並把這些包的位置或配置文件的位置告訴了eclipse;

 


 

開始寫代碼


在以前新建的4個包下面,分別新建4個java文件,new----Class---輸入名稱---Finish

咱們以產品Product爲例子,因此新建4個java文件爲:

ProductAction.java  (界面層)

ProductService.java(業務邏輯服務層)  

ProductDao.java(數據層)

Product.java(model實體層)

 

Product.java的代碼以下:

package ssh.domain;

public class Product {
    private Integer pid;
    private String pname;
    private Double price;
    public Integer getPid() {
        return pid;
    }
    public void setPid(Integer pid) {
        this.pid = pid;
    }
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }
    public Double getPrice() {
        return price;
    }
    public void setPrice(Double price) {
        this.price = price;
    }
}

 

productDao.java

package ssh.dao;

import ssh.domain.Product;

public class ProductDao {
    public void save(Product product) {
        System.out.println("DAO中的Save方法執行了");
        
    }
}

 

productService.java

package ssh.service;

import ssh.dao.ProductDao;
import ssh.domain.Product;

public class ProductService {
    private ProductDao productDao;

    public void setProductDao(ProductDao productDao) {
        this.productDao = productDao;
    }

    public void save(Product product) {
        System.out.println("Service 中的 Save 方法執行了...");
        productDao.save(product);
    }
}

 

productAction.java的代碼以下:

package ssh.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import ssh.service.ProductService;
import ssh.domain.Product;

public class ProductAction extends ActionSupport implements ModelDriven<Product> {

    private Product product  = new Product();
    
    @Override
    public Product getModel() {
        return product;
    }
    
    private ProductService productService;

    public void setProductService(ProductService productService) {
        this.productService = productService;
    }

    public String Save()
    {
        System.out.println("Action 中的 Save 方法執行了...");
        productService.save(product);
        return NONE;
    }
}

 

總之呢,你應該知道 product 就是一個model實體層,這很容易理解把。

而後是dao,他就相似數據庫操做層,這裏咱們沒連數據庫,因此用  System.out.println 來測試,後面會把鏈接數據庫的代碼補齊;一口氣吃太多,怕會暈掉。

service 業務邏輯層,他調用了數據層,

action是界面層,他調用了服務層,action直接跟jsp打交道,相似.net的mvc~~ Save方法就比如一個action.

至於各個方法的set賦值是什麼意思呢?爲何沒看到調用? ssh把它封裝在配置文件中了,這也是spring的依賴注入的一個特色;

下面咱們接着來配置

applicationContext.xml    (spring配置用)

struts.xml   (Struts配置用) 

 

applicationContext.xml 代碼以下:

 

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

    <bean id="productAction" class="ssh.action.ProductAction" scope="prototype">
        <!-- 手動注入Service -->
        <property name="productService" ref="productService" ></property>
    </bean>

    <bean id="productService"  class="ssh.service.ProductService">
            <property name="productDao" ref="productDao"></property>
     </bean>
     
     <bean id="productDao" class="ssh.dao.ProductDao">
     
     </bean>

    
</beans>

這段xml,前面的你不用管,他是spring的一些裝配信息,直接copy就行了;你要注意的是下面的三個<bean>標籤:

關於bean標籤的 id,請你隨便取,class 就是咱們新建的那3個類 的路徑,這個很是好理解吧?

至於property:

<property name="productService" ref="productService" ></property>  

property就是屬性成員的意思

name就是這個屬性的名稱,讓咱們回到ProductAction.java,看到下面的圖了嗎?這個就是name

ref是什麼?讓咱們回到applicationContext.xml ,看下面的圖就知道了吧?是其它bean的id,說白了就是把下面的那個bean做爲參數傳給了set方法,set方法在上圖能夠看到;

在eclipse中 set和get是能夠自動生成的,請不要和.net同樣本身寫,本身寫ssh是不認識的哦;

 

 

 

 怎樣自動生成屬性的get和set? 右鍵屬性名----Source----Generate Getters and Setters....

 

 

struts.xml   代碼以下:

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

   <package name="ssh" extends="struts-default" namespace="/">
           <action name="product_*" class="productAction"  method="{1}"></action>
   </package>

</struts>

package標籤,裏面配置了信息, 直接copy就行了

由於咱們的項目是product,因此name用 product_* 就行了;至於爲何要用_ ?這是在jsp的from表單中的action屬性中寫死的規定!死記硬背就好!一會到jsp頁面你就知道了!

class的值是 productAction ,對應的是什麼?它對應的是 applicationContext.xml 中的action類的id;以下圖,讓咱們回顧下applicationContext.xml 

method="{1}"寫死就好,初學者不作過多的計較;

 你只要這樣理解就行了,struts.xml 實際上是對Action動做作了規定,而且它關聯了spring的配置文件applicationContext.xm,

(   ref 直接指向了spring配置文件的bean的id值, 主要是根據這個id獲取到它的class,也就是ssh.action.ProductAction,固然ref直接等於ssh.action.ProductAction也是能夠的,可是這種寫法不支持spring的aop面向切面設計   )

 


 

運行測試 

 好了,上面搞了那麼多,咱們新建了2個xml,和4個java文件,這些都是爲jsp頁面服務的,下面咱們新建jsp頁面:

ssh---WebContent----右鍵----new---JSP File---命名:AddProduct.jsp----Finish

 

addProduct.jsp 代碼以下:

 

<?xml version="1.0" encoding="utf-8" ?>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    
<%@ taglib uri="/struts-tags"  prefix="s" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
</head>
<body>
<h1>保存商品的頁面</h1>
<s:form action="product_Save" method="post" namespace="/" theme="simple">
    <table border="1" width="400">
        <tr>
            <td>商品名稱</td>
            <td><s:textfield name="pname"></s:textfield></td>
        </tr>
        <tr>
            <td>商品名稱</td>
            <td><s:textfield name="price"></s:textfield></td>
        </tr>
        <tr>
            <td colspan="2"><input type ="submit" value="添加"></input></td>
        </tr>
    </table>
</s:form>
</body>
</html>

 

 <%@ taglib uri="/struts-tags"  prefix="s" %>  是什麼意思呢? 

s是你隨便取的,其它的你寫死就好,你只需知道這句代碼是引用了struts的一個模板,這是模板引用的寫法;

<s:form action="product_Save" method="post" namespace="/" theme="simple"> 是什麼意思呢?
s:form就是from標籤,只不過用了模板的寫法,s是你以前本身隨便取的名字;
action是動做的意思,也就是告訴你提交的時候會提交到哪裏去? product_Save 怎麼理解呢? 你還記得Struts的配置文件嗎?<action name="product_*" class="productAction"  method="{1}"></action>
由於你是product_Save,因此你符合了product_*,因此你會走class="productAction",也就是ssh.action.ProductAction這個文件裏面了,_Save會執行他的Save方法,爲何?這是寫死的!反正_後面的就是方法;
method="post"  post提交
namespace="/" theme="simple"  不須要理解,死記硬背就好

而後終於接完了,咱們打開jsp頁面,run as ----run on server ---finish 看效果

點擊添加按鈕

 

 終於完成了;

 

下一章咱們將繼續學習:

使用eclipse 搭建 ssh框架二( struts spring hibernate )

相關文章
相關標籤/搜索