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
下面講怎麼把下載的包引用到項目中:
第一步:直接在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 )