首先咱們要明白什麼是框架爲何用?相信一開始學習編程的時候都會聽到什麼、什麼框架之類的;首先框架是一個軟件半成品,都會預先實現一些通用功能,使用框架直接應用這些通用功能而不用從新實現,因此大多數企業都用框架都是提升開發效率,節約開發成本。java
絕大多數框架都遵循着一種mvc設計模式思想,MVC是Model—View—Controler的簡稱。即模型—視圖—控制器。MVC是一種設計模式,它強制性的把應用程序的輸入、處理和輸出分開。MVC中的模型、視圖、控制器它們分別擔負着不一樣的任務。 mysql
視圖: 視圖是用戶看到並與之交互的界面。視圖向用戶顯示相關的數據,並接受用戶的輸入。視圖不進行任何業務邏輯處理。 web
模型: 模型表示業務數據和業務處理。至關於JavaBean。一個模型能爲多個視圖提供數據。這提升了應用程序的重用性 spring
控制器: 當用戶單擊Web頁面中的提交按鈕時,控制器接受請求並調用相應的模型去處理請求。sql
從上圖能夠看出mvc工做場景:MVC的處理過程:首先控制器接受用戶的請求,調用相應的模型來進行業務處理,並返回數據給控制器。控制器調用相應的視圖來顯示處理的結果。並經過視圖呈現給用戶。數據庫
而後再看看給予mvc模式的經典的框架SSH:分別是Struts、Spring、Hibernate 。apache
首先介紹struts2框架:編程
一、基於MVC模式的應用層框架技術!設計模式
二、Struts2主要是經過Action動做類,處理請求! (與傳統的servlet開發相比,只須要寫Action類便可!用Action取代以前的servlet開發!) (Struts是對servletApi進行的封裝!)tomcat
三、 Struts2的發展 :Struts2=Struts1 + xwork
四、Struts2功能的引入,是經過核心過濾器完成的! 若是想用struts的任何功能,必須通過核心過濾器!(被過濾器攔截!) (struts提供的標籤的訪問,要先通過核心過濾器:StrutsPrepareAndExecuteFilter!)
還有struts2提供了一些簡單的功能,方便開發;例如文件的上傳,請求數據封裝;代碼以下
封裝數據請求一:
<body> <form action="${pageContext.request.contextPath }/register.action" method="post"> 註冊用戶:<input type="text" name="userName"> <br/> 註冊密碼:<input type="text" name="pwd"> <br/> <input type="submit" value="註冊!"> </form> </body>
public class UserAction extends ActionSupport { // 封裝請求數據,方式1: private String userName; // request.getParameter(「userName」) // 把值做爲方法參數傳入! public void setUserName(String userName) { this.userName = userName; } private String pwd; public void setPwd(String pwd) { this.pwd = pwd; } @Override public String execute() { System.out.println(userName + "\t" + pwd); return "success"; } }
封裝數據請求二:
註冊用戶:<input type="text" name="user.userName"> <br/> 註冊密碼:<input type="text" name="user.pwd"> <br/>
public class UserAction extends ActionSupport { // 封裝請求數據, private User user; public void setUser(User user) { this.user = user; } // 注意:若是是基本類型只用給set方法便可; 若是是對象,必須給set和get! public User getUser() { return user; } }
從上面兩種請求能夠看出:一個是做爲基本類型也就是字符串,另外一個是對象。大多數用到的都是第二種。
struts2的配置文件簡單介紹一下struts2默認訪問後綴是.action最爲後綴 , 默認執行的方法是execute!
struts2的配置文件大概是這樣的
<?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> <!-- 1. package 包 做用: 管理action或管理路徑的做用! name 表示包名稱! 做用,被其餘包繼承! <package name="base" extends="struts-default"></package> <package name="config" extends="base"> 包名不能重複! extends 當前包表必須繼承struts-default包! (struts-default.xml 中定義了這個包!) abstract="true" 抽象包中不能有action配置!主要被其餘包繼承的! namespace 名稱空間,管理路徑!做爲路徑的一部分! 默認值:/ 訪問路徑 = namespace + actionName 舉例:http://localhost:8080/day27_struts01/user/update.action 路徑匹配原則: http://localhost:8080/day27_struts01/user/a/b/c/update.action OK http://localhost:8080/day27_struts01/user/a/b/update.action OK http://localhost:8080/day27_struts01/user/a/update.action OK http://localhost:8080/day27_struts01/user/update.action OK http://localhost:8080/day27_struts01/a/user/update.action NOK 總結: localhost 本機IP 8080 Tomcat /day27_struts01 一般是%tomcat%/webapps下部署項目名稱! struts獲取: /user/a/b/c/update.action 截取獲得: /user/a/b/c 名稱空間部分 去這個名稱空間找action name 是"update" 的路徑,沒有,就向上一級目錄查找 /user/a/b 去這個名稱找,沒有"update", 向上一層找 /user/a 沒有 /user 有則返回(不往下查找!) ; 若是沒有,去默認名稱空間找 / 沒有找到,則404! 2. action 節點 做用: 配置訪問路徑,與,處理action類的映射關係! name 與名稱空間共同組成訪問路徑! class 處理action類的全名! method 當前請求的處理方法! 若是不寫,默認是execute! result 子節點 做用: action類的業務處理方法的返回的跳轉標記,與跳轉頁面的映射關係! name action類中方法返回的String type 表示跳轉的類型! (可寫值的定義,在struts-default.xml中!) 默認是:dispatcher, 爲轉發! dispacher 默認值; 轉發 redirect 重定向 標籤體中能夠指定跳轉的頁面! --> <package name="config" namespace="/user" extends="struts-default"> <!-- 配置Action --> <action name="user" class="cn.itcast.b_config.UserAction" method="execute"> <result name="success" type="redirect">/index.jsp</result> </action> </package> </struts>
在介紹一下struts的工做原理吧
1.客戶端發出一個指向servlet容器的請求;
2.請求會通過StrutsPrepareAndExecuteFilter過濾器;
3.過濾器和請求將訪問struts2的底層框架結構。在web容器啓動時,struts2框架會自動加載配置文件裏相關參數,並轉換成相應的類。
如:ConfigurationManager、ActionMapper和ObjectFactory。ConfigurationManager 存有配置文件的一些基本信息,ActionMapper存有action的配置信息。在請求過程當中全部的對象(Action,Results,Interceptors,等)都是經過ObjectFactory來建立的。過濾器會經過詢問ActionMapper類來查找請求中須要用到的Action。
4.若是找到須要調用的Action,過濾器會把請求的處理交給ActionProxy。ActionProxy爲Action的代理對象。ActionProxy經過ConfigurationManager詢問框架的配置文件,找到須要調用的Action類。
5.ActionProxy建立一個ActionInvocation的實例。ActionInvocation在ActionProxy層之下,它表示了Action的執行狀態,或者說它控制的Action的執行步驟。它持有Action實例和全部的Interceptor。
6.ActionInvocation實例使用命名模式來調用,1. ActionInvocation初始化時,根據配置,加載Action相關的全部Interceptor。2. 經過ActionInvocation.invoke方法調用Action實現時,執行Interceptor。在調用Action的過程先後,涉及到相關攔截器(intercepetor)的調用。
7. 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。
這些類不要太在乎,大概知道幹什麼就能夠了,若是想學精通就要查看底層類是使怎麼寫的,大多數框架都有技術文檔
通俗的來說:
一、發送http請求
二、Web服務器(tomcat/weblogic...)
三、執行struts核心過濾器StrutsPrepareAndExecuteFilter
四、加載struts配置文件中配置信息,找到對應的Action類並實例化
五、執行各種攔截器和Action中對應方法
六、配置文件中找到返回結果
七、轉發到具體頁面或其它操做
大概是這樣
struts還有一個攔截器的概念:Interceptor 表示攔截器!struts2是經過一個個攔截器來完成通用的功能的。
struts2大概介紹到這裏,還有其餘知識本身學習吧!
Hibernate框架:
首先咱們要明白一個東西那就是ORM規則:Object Relation Mapping 對象關係映射!
全部簡單來講Hibernate就是一個操做數據庫的東西通常有兩個配置文件,一個是關係對象配置文件,一個是主配置文件。例如:User.java
// 封裝數據 public class User { private int id; private String name; private char sex; private Date birth; }
User.hbm.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="cn.itcast.a_hello.User" table="t_user"> <id name="id" column="uid"> <generator class="native"></generator> </id> <property name="name" column="uname"></property> <property name="sex" column="sex"></property> <property name="birth" column="birth"></property> </class> </hibernate-mapping>
還有一個主配置文件hibernate.cfg.xml(核心配置文件)
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 1. 數據庫鏈接信息 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///day31</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <!-- 3. 加載全部的映射 --> <mapping resource="User.hbm.xml"/> </session-factory> </hibernate-configuration>
寫一個類測試一些
public class App { // 用Hibernate,不寫sql,保存對象! @Test public void testSave() { // 對象 User user = new User(); user.setName("測試"); user.setSex('它'); user.setBirth(new Date()); // 建立配置管理器對象 Configuration config = new Configuration(); // 加載主配置文件: hibernate.cfg.xml config.configure(); // 根據加載的主配置文件,建立Sessionfactory對象! SessionFactory sf = config.buildSessionFactory(); // 建立session (維護了一個鏈接!) Session session = sf.openSession(); // 開啓事務 Transaction tx = session.beginTransaction(); // --- 保存 ---- session.save(user); // 提交事務、關閉session tx.commit(); session.close(); } // 用Hibernate,不寫sql,查詢對象! @Test public void testGet() throws Exception { Configuration config = new Configuration(); config.configure(); SessionFactory sf = config.buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); //--- 操做 -- User user = (User) session.get(User.class, 2); System.out.println(user); tx.commit(); session.close(); } }
hibernate執行流程圖以下:
原理: 1.讀取並解析配置文件 2.讀取並解析映射信息,建立SessionFactory 3.打開Session 4.建立事務Transation 5.持久化操做 6.提交事務 7.關閉Session 8.關閉SesstionFactory
Spring框架:
spring框架有6大功能模塊,須要用到那個模塊就引用哪一個模塊,但核心模塊必須引用
分別是:Spring Core 核心功能,SpringAop 面向切面編程,SpringWeb 對web開發的支持(spring對struts框架的支持!),SpringJdbc 對jdbc的支持,SpringORM 對ORM的支持(spring對hibenrate的支持),SpringJEE 對javaee其餘模塊的支持!(EJB)
能夠看出Spring 主要是建立建立,與其餘框架整合,表示能夠幫其餘框架建立對象!
舉個簡單例子如何建立對象
@Test public void testapp() throws Exception { // 獲取容器建立的對象 ApplicationContext ac = new ClassPathXmlApplicationContext("Spring的xml文件路徑"); //從容器獲取建立的對象 Date d = (Date) ac.getBean("date"); System.out.println(d); User user = (User) ac.getBean("user"); }
就簡單介紹一下
Spring核心, 就是指IOC容器!
IOC容器,
主要是建立對象!
Inversion of control 控制反轉! 因此,也叫控制反轉容器!
控制反轉,
對象的建立交給外部容器完成,程序須要對象,只須要從容器獲取便可!
IOC容器 = applicationContex.xml + ApplicationContext類
建立對象以後,給對象屬性賦值, 這個叫「依賴注入」!
spring的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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
裏面的一些配置就須要本身查看相應的文檔
這些框架都有本身的配置文件,都有相應的技術文檔,全部不要以爲框架很難。總的來講學習這些框架式很容易入手的,那就是多練習,而後在上網(大多數在論壇上都有項目)找幾個項目作。一我的的學習經驗來講,都是模仿別人的項目,本身敲多幾回就會了,好好學習吧