1. 程式人生 > >SSH-經典的三大框架 我回來了, 重新學習 J2EE 之路

SSH-經典的三大框架 我回來了, 重新學習 J2EE 之路

已經一年多配置過 ssh框架,借空閒時間重新試試這個經典框架,因為我就是從這裡開始入門的。

本文摘自 部落格大神 http://blog.csdn.net/lishuangzhe7047 一個女程式設計師 佩服佩服 把她寫的分享給自己記錄下
1.Spring 框架
spring是J2EE應用程式框架,是輕量級的IoC和AOP的容器框架,主要是針對javaBean的生命週期進行管理的輕量級容器,可以單獨使用,也可以和Struts框架,ibatis框架等組合使用。
摘自他人部落格,說實話 IOC和AOP對初學者來說 一臉懵逼,這是什麼東西啊~那麼深奧!!其實不必要去深究什麼,一個框架的裡 會幫處理好後顧之憂
以前程式碼是這樣寫的

//dao層物件  
public class UserDao{  
   publicvoid insert(User user){}  
}  

//service層物件  
public classUserService{  
   publicvoid insert(User user){  
       UserDaouserdao = new UserDao();  
       userdao.insert(user);  
   }  
} 

現在加入spring 之後是這樣寫的

//dao層物件  
public class UserDao{  
    publicvoid insert(User user){}  
}  
//service層物件  
public classUserService{ private UserDao userdao; publicUserDao getUserdao() { returnuserdao; } publicvoid setUserdao(UserDao userdao) { this.userdao= userdao; } publicvoid insert(User user){ userdao.insert(user); } }

瞬間就一目瞭然了,至於物件是怎麼建立 關係是什麼組合都是有 spring來處理

spring中的註解 就免去寫 xml檔案的方便
spring框架使用的是分層的註解。
持久層:@Repository;
服務層:@Service
控制層:@Controller
@Repository 等同於配置檔案中的

<bean id="userDao" class="com.lsz.spring.UserDao" />  

@Service註解等同於

<bean id="testService" class="com.lsz.spring.UserService" />  

@Resource 物件間關係的組合,預設採用的是byName方式進行裝配,如果根據名稱查詢不到關聯的物件,那麼會再採用byType繼續查詢。

@Service(value="testService")  
public classTestService {  

@Resource//相當於自動裝配  
private UserDao userDao ;  
      public UserDao getUserDao() {  
              returnuserDao;  
      }  
      public void setUserDao(UserDao userDao) {  
             this.userDao= userDao;  
      }  

}  

@Controller(value=”ua”)

<bean id="ua" class="com.lsz.spring.UserAction " />  

從Spring環境中獲取Action物件,此處被坑了好久好久 備註下~

ServletContext application =request.getSession().getServletContext();  
ApplicationContextac = WebApplicationContextUtils.getWebApplicationContext(application);  

UserAction useraction = (UserAction)ac.getBean("ua");//獲取控制層物件  

response.setContentType("text/html;charset=GBK");//設定編碼  
PrintWriter out =response.getWriter();  

//分別將三個層的物件打印出來。  
out.println("Action:"+userAction);  
out.println("Service:"+userAction.getUserService());  
out.println("Dao:"+userAction.getUserService().getUserDao());  

AOP(Aspect-OrientedProgramming)面向方面程式設計
例項:設定字元編碼格式看作是一個Aspect方面,而攔截器就是一個Advice增強。

<span style="font-size:18px;"><!-- 字元編碼過濾器-->  
<filter>  
<filter-name>characterFilter</filter-name>  
<filter-class>com.bjpowernode.egov.filter.CharacterEncodingFilter</filter-class>  
</filter>  
<filter-mapping>  
<filter-name>characterFilter</filter-name>  
<url-pattern>/servlet/*</url-pattern>  
</filter-mapping>  
 </span>  
過濾器類
這樣就不用在每個servlet中設定編碼拉

public class CharacterEncodingFilter implements Filter {

@Override
public void destroy() {}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChainchain) throws IOException, ServletException {
request.setCharacterEncoding(“GB18030”);
chain.doFilter(request,response);
}

@Override
publicvoid init(FilterConfig filterConfig) throws ServletException {}
}
Spring框架中使用AOP的優點
Aop與spring的IOC容器整合,增強,切入點都是javabean,可以在同一檔案中配置
和spring的其他部分一樣,可以在不同應用伺服器之間任意移植
spring實現Aop的攔截介面,使得使用者不必繫結在特定的攔截器介面上
aop面向切面的程式設計思想,打破面向物件的思維方式,更要學習面向切面的這種思想。
2.Struts2框架介紹
Struts2框架是MVC流程框架,適合分層開發。框架應用實現不依賴於Servlet,使用大量的攔截器來處理使用者請求,屬於無侵入式的設計。

Struts2框架的流程原理
1)請求先到達Filter中央控制器
2)然後為Action建立代理類
3)將各個服務存放在攔截器中,執行完攔截器後再去執行action類行action類,action類呼叫service,再呼叫dao
4)得到結果字串,建立result物件
5)轉向相應的檢視。
這是整個流程圖
Struts2框架中的Action類是一個單獨的javabean物件。不像Struts1中還要去繼承HttpServlet,耦合度減小了。
1,流程
攔截器攔截請求,建立代理Action物件,執行方法,返回結果,介面跳轉。
攔截器解析請求路徑,獲取Action的名稱,到配置檔案中查詢action的完整類名,利用反射建立物件。
每請求一次,就建立一個物件,所以action是多例的,也是執行緒安全的。
url
2.資料傳遞
框架將Http物件和包裝後的Map集合物件都存放到ActionContext上下文物件集合中。所以可以根據ActionContext來獲取想要使用的物件。

ActionContext ac = ActionContext.getContext(); //上下文物件相當於request範圍  
HttpServletRequest request =(HttpServletRequest)ac.get(StrutsStatics.HTTP_REQUEST);  
HttpSession session = request.getSession(false);  
ServletContext application = session.getServletContext();  
ServletContext application = ac.get(StrutsStatics.SERVLET_CONTEXT);  
HttpServletRequest request = ServletActionContext.getRequest(); (推薦使用)  
HttpServletResponse response =ServletActionContext.getResponse();  

2,獲取Map集合

ActionContext ac = ActionContext.getContext();  
Mapsession = ac.getSession();  
Mapsession2 =(Map)ac.get("session");  
Mapsession3=(Map)ac.get(ActionContext.SESSION);          
Mapapplication = ac.getApplication()  
Mapapplication = ac.get(ActionContext.APPLICATION);  
Mapapplication = ac.get("application");  

3, 獲取值棧物件以及引數集合物件

ActionContext ac = ActionContext.getContext();  
ValueStack vs = ac.getValueStack();  
Map paramts = ac.getParameters();  

四:資料的顯示
El表示式的形式,取request物件中的值
${requestScope.username }

而這種表示式的方式可以表示成java程式碼的方式:
<%
Stringusername =(String)request.getAttribute(“username”);//被重寫的方法,底層是通過ognl查詢值棧中的資料
out.print(username);
%>
從request返回取資料,實質上底層是通過Ognl語言操作值棧中的資料。 ActionContext物件的集合和OgnlValueStack值棧的集合為同一個集合物件,所以從值棧的Map集合中取資料,就相當於從ActionContext上下文中取資料。

3.Hibernate框架學習
Hibernate框架主要是實現資料庫與實體類間的對映,使的操作實體類相當與操作hibernate框架。
只要實體類寫好配置檔案配好,就能實現和資料庫的對映,其中實體類對應表,類的屬性對應資料庫的表字段。 這樣就不用管資料庫的相關操作了。

多對一對映,如學生和班級之間的關係,多個學生對應一個班級。
1, 物件模型中是在多的一方物件中加入一的一方物件的引用。配置檔案參見上圖所示。
2,註解使用

@Entity  
public class Person {  
    private int id;  
    private String name;  
    private IDCard cid;  

    @ManyToOne  
    @JoinColumn(name="cardid")  
    public IDCard getcid() {  
        return cid;  
    }  

用@JoinColumn來指定外來鍵的欄位名
一對多的對映,如班級和學生的關係,一個班級中有多個學生。
1,物件模型中是在一的一端新增Set集合,包含多的一端。

public class Classes{  

    private int cid ;  
    private String cname ;  

    <strong>private Set<Student> studentSet = new HashSet<Student>(); /</strong>/一對多  

    public int getCid() {  
        return cid;  
    }  
    public void setCid(int cid) {  
        this.cid = cid;  
    }  
    public String getCname() {  
        return cname;  
    }  
    public void setCname(String cname) {  
        this.cname = cname;  
    }  
    public Set<Student> getStudentSet() {  
        return studentSet;  
    }  
    public void setStudentSet(Set<Student> studentSet) {  
        this.studentSet = studentSet;  
    }  
}  

2,配置檔案
1)在多的一端課程,使用set標籤並使用one-to-many標籤
2)在一的一端學生,使用many-to-one標籤

@OneToMany//進行註解為一對多的關係  
@JoinColumn(name="classesId")//在多的一端註解一個欄位(名為classessid)  
public Set<Student> getStudents() {  
    return students;  
       }  

三:多對多
多對多對映關係,還拿學生課程關係,多個學生對應多個課程,多個課程對應多個學生
1,在物件模型中是雙方都加入set集合
2,xml配置檔案中,雙方也都用set標籤和many-to-many標籤
3,註解

@ManyToMany  
    @JoinTable(name="t_s_c",//使用@JoinTable標籤的name屬性註解第三方表名稱  
        joinColumns={@JoinColumn(name="courseId")},  
    //使用joinColumns屬性來註解當前實體類在第三方表中的欄位名稱並指向該物件  
        inverseJoinColumns={@JoinColumn(name="studentId")}    
   //使用inverseJoinColumns屬性來註解當前實體類持有引用物件在第三方表中的欄位名稱並指向被引用物件表  
)  
public Set<Student> getStudents() {return Students;}  

相關推薦

SSH-經典三大框架 回來 重新學習 J2EE

已經一年多配置過 ssh框架,借空閒時間重新試試這個經典框架,因為我就是從這裡開始入門的。 本文摘自 部落格大神 http://blog.csdn.net/lishuangzhe7047 一個女程式設計師 佩服佩服 把她寫的分享給自己記錄下 1.Sp

體驗為王的年代從視訊優化到QoE機器學習實踐

內容來源:2018 年 09 月 07 日,上海交通大學教授宋利在“RTC 2018實時網際網路大會”上進行的《機器學習在QoE中的應用實踐》演講分享。IT 大咖說作為獨家視訊合作方,經主辦方和講者審閱授權釋出。 閱讀字數:3112 | 8分鐘閱讀 獲取嘉賓演講視訊及PPT,請點選:t.cn/EwQ9od6

12306火車票訂票失敗!您的身份信息未經核驗一般人是不能訂票的可是沒成功。。。

ext con efault jsb fill ast edit 技術 post 12306火車票訂票失敗!您的身份信息未經核驗。一般人是不能訂票的,我訂了,可是沒成功。。。 上圖哈,未經核驗能能夠訂票,只是出票失敗了。看來12306不是吃幹飯的

【洛谷八連測R7】nzhtl1477-回來

距離 head name names 數據 ont bool 告訴 點距 【洛谷八連測R7】nzhtl1477-我回來了 題目描述 68號島有n個商店,有的商店直接有小路連接,小路的長度都為1,格裏克告訴了你哪些地方可能有做黃油蛋糕的原料。 但是那個人是個坑貨,所以他

[Ynoi2015]回來

return bsp 時間 sta def ifd 太陽 size pan 題目大意: 給定一張無向無權圖,每次給定若幹個二元組\((x_i,y_i)\),定義點\(u\)滿足條件,當且僅當存在\(i\),並滿足\(dist(u,x_i)\leqslant y_i\)(\

P5068 [Ynoi2015]回來

傳送門 解鎖成就:ynoi的題目都做到過原題 因為\(n\)很小,我們可以用\(sss[u][i]\)表示到點\(u\)的距離不超過\(i\)的點的集合,這個可以用bitset存,然後先一遍bfs,再做一個字首和就可以處理好了 詢問的話,把所有的\(sss\)並起來,然後求一下里面\(1\)的個數就好了 順

日常用Python來監控女神的QQ空間!就算她把遮蔽也無法阻止

誰還沒暗戀過哪個妹子啊!當然那些暗戀的妹子應該稱做為女生,今天就教大家一個簡單的算是爬蟲的案例吧!主要實現的功能就是:監控女神的 QQ空間,一旦女神釋出新的說說,你的郵箱馬上就會收到說說內容,是不是想了解一下 先看看程式碼執行效果圖: Python學習群865597862

【題解】Luogu P5068 [Ynoi2015]回來

眾所周知lxl是個毒瘤,Ynoi道道都是神仙題,這道題極其良心,題面好評 原題傳送門 我們先珂以在\(O(n^2)\)的時間內bfs求出任意兩點距離 我們考慮如何計算從一個點到所有點的最短路長度小於等於k的點的數量 我們先求出來從一個點到所有點的最短路長度等於k的點的數量,這個珂以在bfs搜尋過程中完

這個迴圈讓混亂希望懂的人指點一下

#include”stdio.h” void  main( ) {  int  i , j ,x=0 ;   for(i=0 ; i<2 ; i++)    {  x++  ;   

程式設計師:面試過程被一頓diss最後卻給通過去還是不去?

技術面試是每一位程式設計師都會經歷的一件事情,面試的過程大都相似,技術面試官會通過自己的方式去考察程式設計師的技術功底與基礎理論知識,這個過程被有的程式設計師成為“造火箭式的技術轟炸”,認為面試的東西都是極為高大上的,這大概是所有面試的共性吧,考察的東西肯定是要

騰訊:新浪:你沒有!

作者 | 景歲 本文經授權轉自公眾號“西二旗生活指北” 西二旗救火哪家強?西北旺中路找新浪! 昨天,新浪又一次證明了自己在後廠村上,碾壓群雄的滅火實力。 眾所周知,雖然作為一個嚴肅的生活服務號,但是我平時都是做的精神指北的工作,一般不跟西二旗的熱點,但是

SSH三大框架總結)

JAVA三大框架ssh-Struts、Spring、Hibernate Struts 1. struts是一個按MVC模式設計的Web層框架,其實它就是一個大大的servlet,這個Servlet名為ActionServlet,或是 ActionServlet的子類。我

【[Ynoi2015]回來

push_back urn har stk 其中 end put cout noi2015 人生第一道ynoi題,感覺大家是不是被ynoi的標簽嚇到了啊= =,此題的難度個人覺得不到黑題。 正文部分 \(bitset\)+類似一個\(dp\)的東西亂搞。 定義\(f[u][

今天 Google 回來好像又走

可惜的是,目前已經無法訪問了。可能是由於 Google-CH 搜尋功能開放後,訪問量過大導致搜尋掛掉了。Google-CH 專案做起來需要太多的伺服器資源,不是 google fans 能承擔得起的。可見,我們大陸網友使用 Google 搜尋的迫切心情。這種開源的專案,其實需要大量的伺服器資源,而承載能力大的

如果還剩下什麽(雪輕裳)

nsh 加油! 地方 dex 一死 一個 公交 mda shang   如果我死了   如果我死了,那些愧對我的人會很開心:終於不用還錢了,哎呀,不然真不知道怎麽辦那,不敢見他,嚇得我朋友圈都不敢發了!不對,我這樣的人怕他幹嘛?反正也不能把我怎麽樣。我每天活的多瀟灑,燈紅

富士康14跳被趕上流水線車間真的沒有夢想 | 十年系列

一個不太安分的人。 1. 寫在前面 十年前,我還是象牙塔中數學系的一名普通的大三學生。 九年前,我是富士康流水線工廠的一名工人。 六年前,我包裡揣著3000元RMB來北漂。 三年前,我在一家網際網路金融公司做到了技術負責人。 兩年前,我在一家第三方支付公司擔任研發副總,最多管理超過100人。 現在,我是一名自

膨脹測試必要商城小程式3種方式!:)

堅持原創輸出,點選藍字關注我吧 作者:清菡 部落格:oschina、雲+社群、知乎等各大平臺都有。 目錄 一、Appium 結合 Python 做小程式自動化二、Python 第三方庫 Uiautomator2 做微信小程式、公眾號自動化三、FAuto Test 微信小程式、公眾號 H5 自動化神器四、

攤牌大廠面試Linux就這5個問題

說真的,這就是《我想進大廠》系列第八篇,但是Linux的問題確實很少,就這樣,強行編幾個沒有營養的問題也沒啥意義。 1.CPU負載和CPU利用率的區別是什麼? 首先,我們可以通過uptime,w或者top命令看到CPU的平均負載。 Load Average :負載的3個數字,比如上圖的4.86,5.2

如果告訴你程序員這條很難走你還要堅持走下去嗎

程序員 職場 可能很多人都覺得程序員是個高薪行業,動不動就聽見誰月薪幾萬幾萬,心裏羨慕不已。回頭看自己每個月手裏可憐的工資條,心裏更是煩躁不已,於是乎下定決心一定要像人家一樣,月薪幾萬。但是實際上,高薪程序員並不像人們想象中的那麽輕松。許多程序員自稱碼農,因為每天事情總也做不完,而這些工作也沒有給自

大資料就業前景分析的太到位學習大資料的可以看看

大資料廣泛應用於電網執行、經營管理及優質服務等各大領域,並正在改變著各行各業,也引領了大資料人才的變革。大資料專業就業前景怎麼樣?這對於在就業迷途中的我們是一個很重要的資訊。   隨著國家重視大資料,政府扶持大資料,大資料在企業中生根發芽,開花結果。未來三至五年,中國需要18