a)struts1
jsp發(fā)起httprequest請(qǐng)求->servlet捕獲->struts.xml->namespace+ActionName-> Action->填充表單setXxx()->action.execute()->”success”->Result->設(shè)置request屬性->跳轉(zhuǎn)目標(biāo)頁(yè)
b) Action(jsp發(fā)起httprequest請(qǐng)求,被過(guò)濾器捕獲)->FilterDispatcher->struts.xml->namespace+ActionName->new Action->填充表單setXxx()->action.execute()->”success”->Result->設(shè)置request屬性->跳轉(zhuǎn)目標(biāo)頁(yè)
SQL代碼1:平均用時(shí)6.6秒 SELECT * FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 30
SQL代碼2:平均用時(shí)0.6秒 SELECT * FROM `cdb_posts` WHERE pid >= (SELECT pid FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 1) LIMIT 30
因?yàn)橐〕鏊凶侄蝺?nèi)容,第一種需要跨越大量數(shù)據(jù)塊并取出,而第二種基本通過(guò)直接根據(jù)索引字段定位后,才取出相應(yīng)內(nèi)容,效率自然大大提升。
可以看出,越往后分頁(yè),LIMIT語(yǔ)句的偏移量就會(huì)越大,兩者速度差距也會(huì)越明顯。
實(shí)際應(yīng)用中,可以利用類似策略模式的方式去處理分頁(yè),比如判斷如果是一百頁(yè)以內(nèi),就使用最基本的分頁(yè)方式,大于一百頁(yè),則使用子查詢的分頁(yè)方式。
Oracle查詢:SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40) WHERE RN >= 21
13.單例模式、工廠模式、代理模式
枚舉實(shí)現(xiàn)單例模式:
public enum Singleton {
/**
* 定義一個(gè)枚舉的元素,它就代表了Singleton的一個(gè)實(shí)例。
*/
uniqueInstance;
/**
* 單例可以有自己的操作
*/
public void singletonOperation(){
//功能處理
}
}
懶漢同步單例模式:
public class LazySingleton {
private static LazySingleton instance = null;
/**
* 私有默認(rèn)構(gòu)造子
*/
private LazySingleton(){}
/**
* 靜態(tài)工廠方法
*/
public static synchronized LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance;
}
}
工廠模式:http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html
代理模式:http://yangguangfu.iteye.com/blog/815787
未完待續(xù)...
Tomcat 與 Servlet 是如何工作的:
步驟:
Servlet工作原理:
1、首先簡(jiǎn)單解釋一下Servlet接收和響應(yīng)客戶請(qǐng)求的過(guò)程,首先客戶發(fā)送一個(gè)請(qǐng)求,Servlet是調(diào)用service()方法對(duì)請(qǐng)求進(jìn)行響應(yīng) 的,通過(guò)源代碼可見(jiàn),service()方法中對(duì)請(qǐng)求的方式進(jìn)行了匹配,選擇調(diào)用doGet,doPost等這些方法,然后再進(jìn)入對(duì)應(yīng)的方法中調(diào)用邏輯層 的方法,實(shí)現(xiàn)對(duì)客戶的響應(yīng)。在Servlet接口和GenericServlet中是沒(méi)有doGet()、doPost()等等這些方法 的,HttpServlet中定義了這些方法,但是都是返回error信息,所以,我們每次定義一個(gè)Servlet的時(shí)候,都必須實(shí)現(xiàn)doGet或 doPost等這些方法。
2、每一個(gè)自定義的Servlet都必須實(shí)現(xiàn)Servlet的接口,Servlet接口中定義了五個(gè)方法,其中比較重要的三個(gè)方法涉及到 Servlet的生命周期,分別是上文提到的init(),service(),destroy()方法。GenericServlet是一個(gè)通用的,不 特定于任何協(xié)議的Servlet,它實(shí)現(xiàn)了Servlet接口。而HttpServlet繼承于GenericServlet,因此 HttpServlet也實(shí)現(xiàn)了Servlet接口。所以我們定義Servlet的時(shí)候只需要繼承HttpServlet即可。
3、Servlet接口和GenericServlet是不特定于任何協(xié)議的,而HttpServlet是特定于HTTP協(xié)議的類,所以 HttpServlet中實(shí)現(xiàn)了service()方法,并將請(qǐng)求ServletRequest、ServletResponse 強(qiáng)轉(zhuǎn)為HttpRequest 和 HttpResponse。
創(chuàng)建Servlet對(duì)象的時(shí)機(jī):
<%
@taglib
prefix=
"dict"
uri=
"http://www.tljc.com/dict_tag"
%>
<dict:select defaultValue=
"true"
name=
"GJ"
id=
"GJ"
dictName=
"GJ"
cssClass=
"form-control"
/>
前提是要在字典表里加上“GJ”這條數(shù)據(jù)。
OK了!