java開發中經典的三大框架SSH

  首先咱們要明白什麼是框架爲何用?相信一開始學習編程的時候都會聽到什麼、什麼框架之類的;首先框架是一個軟件半成品,都會預先實現一些通用功能,使用框架直接應用這些通用功能而不用從新實現,因此大多數企業都用框架都是提升開發效率,節約開發成本。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> 

裏面的一些配置就須要本身查看相應的文檔

這些框架都有本身的配置文件,都有相應的技術文檔,全部不要以爲框架很難。總的來講學習這些框架式很容易入手的,那就是多練習,而後在上網(大多數在論壇上都有項目)找幾個項目作。一我的的學習經驗來講,都是模仿別人的項目,本身敲多幾回就會了,好好學習吧

相關文章
相關標籤/搜索