2008年4月12日
class loader 加載 class file 到內(nèi)存
jvm內(nèi)存包括: method area(存放class name, class path , 類修飾符等信息), java stack(每一個(gè)線程單獨(dú)有個(gè)stack),java heap(存放對(duì)象的數(shù)據(jù),數(shù)組數(shù)據(jù)等,被所有線程共享的), pc寄存器(每一個(gè)線程單獨(dú)有個(gè)pc寄存器,用于存放下一步指令),本地方法棧。
java 堆 可 分為三部分:Perm,Tenured,Yong區(qū)。可以通過(guò)參數(shù)來(lái)配置空間大小:
-Xms :指定了JVM初始啟動(dòng)以后初始化內(nèi)存
-Xmx:指定JVM堆得最大內(nèi)存,在JVM啟動(dòng)以后,會(huì)分配-Xmx參數(shù)指定大小的內(nèi)存給JVM,但是不一定全部使用,JVM會(huì)根據(jù)-Xms參數(shù)來(lái)調(diào)節(jié)真正用于JVM的內(nèi)存
Perm Generation
-XX:PermSize=16M -XX:MaxPermSize=64M
jQuery.post( url, [data], [callback], [type] ) :使用POST方式來(lái)進(jìn)行異步請(qǐng)求
參數(shù):
url (String) : 發(fā)送請(qǐng)求的URL地址.
data (Map) : (可選) 要發(fā)送給服務(wù)器的數(shù)據(jù),以 Key/value 的鍵值對(duì)形式表示。
callback (Function) : (可選) 載入成功時(shí)回調(diào)函數(shù)(只有當(dāng)Response的返回狀態(tài)是success才是調(diào)用該方法)。
type (String) : (可選)官方的說(shuō)明是:Type of data to be sent。其實(shí)應(yīng)該為客戶端請(qǐng)求的類型(JSON,XML,等等)
這是一個(gè)簡(jiǎn)單的 POST 請(qǐng)求功能以取代復(fù)雜 $.ajax 。請(qǐng)求成功時(shí)可調(diào)用回調(diào)函數(shù)。如果需要在出錯(cuò)時(shí)執(zhí)行函數(shù),請(qǐng)
使用 $.ajax。示例代碼:
var con = $('#content').val();//待提交的數(shù)據(jù)
$.post("checkContent.action",{"mess.content":con},
function (data){
if(data != "")//有非法敏感字
{
alert(data);
$('#content').focus();
}
},"html");
點(diǎn)擊提交:
以下轉(zhuǎn)載自:
http://hi.baidu.com/tianhesj/blog/item/0dd9718d32be4011b21bbacc.html
Namespaces翻譯為命名空間。命名空間有什么作用呢?當(dāng)我們?cè)谝粋€(gè)XML文檔中使用他人的或者多個(gè)DTD文件,就會(huì)出現(xiàn)這樣的矛盾:因?yàn)閄ML中標(biāo)識(shí)都是自己創(chuàng)建的,在不同的DTD文件中,標(biāo)識(shí)名可能相同但表示的含義不同,這就可能引起數(shù)據(jù)混亂。
比如在一個(gè)文檔<table>wood table</table>中<table>表示桌子,
而在另一個(gè)文檔<table>namelist</table>中<table>表示表格。如果我需要同時(shí)處理這兩個(gè)文檔,就會(huì)發(fā)生名字沖突。
了解決這個(gè)問(wèn)題,我們引進(jìn)了namespaces這個(gè)概念。namespaces通過(guò)給標(biāo)識(shí)名稱加一個(gè)網(wǎng)址(URL)定位的方法來(lái)區(qū)別這些名稱相同的標(biāo)識(shí)。
Namespaces同樣需要在XML文檔的開頭部分聲明,聲明的語(yǔ)法如下:
<document xmlns:yourname='URL'>
其中yourname是由你定義的namespaces的名稱,URL就是名字空間的網(wǎng)址。
假設(shè)上面的"桌子<table>"文檔來(lái)自http://www.zhuozi.com,我們就可以聲明為
<document xmlns:zhuozi='http://www.zhuozi.com'>;
然后在后面的標(biāo)識(shí)中使用定義好的名字空間:
<zhuozi:table>wood table</table>
這樣就將這兩個(gè)<table>區(qū)分開來(lái)。注意的是:設(shè)置URL并不是說(shuō)這個(gè)標(biāo)識(shí)真的要到那個(gè)網(wǎng)址去讀取,僅僅作為一種區(qū)別的標(biāo)志而已。
命名沖突
因?yàn)閄ML文檔中使用的元素不是固定的,那么兩個(gè)不同的XML文檔使用同一個(gè)名字來(lái)描述不同類型的元素的情況就可能發(fā)生。而這種情況又往往會(huì)導(dǎo)致命名沖突。請(qǐng)看下面兩個(gè)例子
這個(gè) XML 文檔在table元素中攜帶了水果的信息:
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
這個(gè) XML 文檔在table元素中攜帶了桌子的信息(家具,不能吃的哦):
<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
如果上面兩個(gè)XML文檔片斷碰巧在一起使用的話,那么將會(huì)出現(xiàn)命名沖突的情況。因?yàn)檫@兩個(gè)片斷都包含了<table>元素,而這兩個(gè)table元素的定義與所包含的內(nèi)容又各不相同。
--------------------------------------------------------------------------------
使用前綴解決命名沖突問(wèn)題
下面的XML文檔在table元素中攜帶了信息:
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
下面的XML文檔攜帶了家具table的信息:
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
現(xiàn)在已經(jīng)沒(méi)有元素命名沖突的問(wèn)題了,因?yàn)檫@兩個(gè)文檔對(duì)各自的table元素使用了不同的前綴,table元素在兩個(gè)文檔中分別是(<h:table> 和<f:table>)。
通過(guò)使用前綴,我們創(chuàng)建了兩個(gè)不同的table元素。
--------------------------------------------------------------------------------
使用命名空間
下面的XML文檔在table元素中攜帶了信息:
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
下面的XML文檔攜帶了家具table的信息:
<f:table xmlns:f="http://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
在上面兩個(gè)例子中除了使用前綴外,兩個(gè)table元素都使用了xmlns屬性,使元素和不同的命名空間關(guān)聯(lián)到一起。
--------------------------------------------------------------------------------
命名空間屬性
命名空間屬性一般放置在元素的開始標(biāo)記處,其使用語(yǔ)法如下所示:
xmlns:namespace-prefix="namespace"
在上面的例子中,命名空間定義了一個(gè)Internet 地址:
xmlns:f="http://www.w3schools.com/furniture"
W3C 命名規(guī)范聲明命名空間本身就是一個(gè)統(tǒng)一資源標(biāo)示符,Uniform Resource Identifier (URI)。
當(dāng)我們?cè)谠氐拈_始標(biāo)記處使用命名空間時(shí),該元素所有的子元素都將通過(guò)一個(gè)前綴與同一個(gè)命名空間相互關(guān)聯(lián)。
注意:用來(lái)標(biāo)識(shí)命名空間的網(wǎng)絡(luò)地址并不被XML解析器調(diào)用,XML解析器不需要從這個(gè)網(wǎng)絡(luò)地址中查找信息,該網(wǎng)絡(luò)地址的作用僅僅是給命名空間一個(gè)唯一的名字,因此這個(gè)網(wǎng)絡(luò)地址也可以是虛擬的,然而又很多公司經(jīng)常把這個(gè)網(wǎng)絡(luò)地址值象一個(gè)真實(shí)的Web頁(yè)面,這個(gè)地址包含了關(guān)于當(dāng)前命名空間更詳細(xì)的信息。
可以訪問(wèn)http://www.w3.org/TR/html4/.
--------------------------------------------------------------------------------
統(tǒng)一資源標(biāo)識(shí)符
通用資源標(biāo)識(shí)符(A Uniform Resource Identifier (URI))是一個(gè)標(biāo)識(shí)網(wǎng)絡(luò)資源的字符串。最普通的URI應(yīng)該是統(tǒng)一資源定位符Uniform Resource Locator (URL)。URL用于標(biāo)識(shí)網(wǎng)絡(luò)主機(jī)的地址。另一方面,另一個(gè)不常用的URI是通用資源名字Universal Resource Name (URN)。在我們的例子中,一般使用的是URLs。
既然前面的例子使用的URL地址來(lái)標(biāo)識(shí)命名空間,我們可以確信這個(gè)命名空間是唯一的。
--------------------------------------------------------------------------------
默認(rèn)的命名空間
定義一個(gè)默認(rèn)的XML命名空間使得我們?cè)谧釉氐拈_始標(biāo)記中不需要使用前綴。他的語(yǔ)法如下所示:
<element xmlns="namespace">
下面的XML文檔在table元素中包含了水果的信息:
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
下面的XML文檔包含了家具table的信息:
<table xmlns="http://www.w3schools.com/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
--------------------------------------------------------------------------------
使用命名空間
檔開始使用XSL的時(shí)候,就會(huì)發(fā)現(xiàn)命名空間使用的是如此頻繁。XSL樣式單主要用于將XML文檔轉(zhuǎn)換成類似于HTML文件的格式。
如果看一下下面的XSL文檔,就會(huì)發(fā)現(xiàn)有很多標(biāo)記都是HTML標(biāo)記。那些標(biāo)記并不是HTML標(biāo)記,是加了前綴的XSL,這個(gè)XSL前綴由命名空間"http://www.w3.org/TR/xsl"所標(biāo)識(shí):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/xsl">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="ARTIST"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/yc_8301/archive/2008/11/19/3335738.aspx
表單中有一個(gè)type=reset的button,可以將表單中的數(shù)據(jù)重置為初始表單的數(shù)據(jù),但如果表單中有一些“單選”或“多選”框,其默認(rèn)值是通過(guò)javascript腳本控制的;這種情況通過(guò)reset按鈕不會(huì)重置為初始狀態(tài),所以不能簡(jiǎn)單的調(diào)用reset自帶按鈕,解決方法:將重置按鈕設(shè)為普通按鈕,在onclick方法中,選調(diào)用form.reset()方法,然后再調(diào)用javascript腳本
我用的myeclipse 6.0版本,oracle是10g版本,在連接的時(shí)候出現(xiàn)了以下問(wèn)題
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified
一開始以為是驅(qū)動(dòng)程序的問(wèn)題,其實(shí)不是,只需在eclipse目錄下找到eclipse.ini文件,把
Duser.language=en 改成 Duser.language=zh就行了。
有可能大家出現(xiàn)的問(wèn)題不一樣,按我的方法有可能不好使,我寫出來(lái)僅供大家參考,因?yàn)楫?dāng)時(shí)為解決這問(wèn)題,花了不少時(shí)間,希望大家少走彎路
我有一把白色塑膠雨傘。買的時(shí)候喜歡它雪白可愛,瘦瘦長(zhǎng)長(zhǎng),簡(jiǎn)直像個(gè)鶴立雞群的美女。可惜這種美麗偏偏不耐看,風(fēng)吹雨打久了,顏色變黃,還多了雀斑一樣的污跡。而且瘦長(zhǎng)是沒(méi)用的,哪里像折傘這么善解人意。于是,我開始制造各種機(jī)會(huì)。 趁著下雨帶它出門,左擱一會(huì)兒,右放一下,希望一下子大意忘了拿,讓它自動(dòng)消失,大家無(wú)痛分手。我就可以理直氣壯買一把新的,多好!
失寵的人通常最敏感。 有一天,它突如其來(lái)消失了,完全不用花我任何心思。傘也有它的自尊。問(wèn)題是,等一等,我還沒(méi)有準(zhǔn)備好。不行,它不可以沒(méi)經(jīng)我的同意就玩失蹤。我便一心一意要找它回來(lái),花盡心思去想,到底在哪里弄丟的呢?書店,餐廳還是公共汽車地鐵呢?
真是峰回路轉(zhuǎn),沒(méi)想到在戲院把它找回來(lái),小別重逢,它苦著副臉在等我來(lái)新發(fā)現(xiàn)。重拾舊歡,大團(tuán)圓結(jié)局。 換一個(gè)角度來(lái)看,如果我失敗了,找不到它,它永遠(yuǎn)消失了,淡淡的遺憾感覺(jué),會(huì)不會(huì)更合我心意?
人世間的破鏡重圓,大概都是一言難盡。
select t2.*,t3.ncount from
(select groupid, count(id) as ncount from t_txlEmploy group by groupid) t3, t_txlgroup t2
where t2.id=t3.groupid(+)
group by t2.id,t3.groupid
構(gòu)架一張t3
表,字段為“集團(tuán)編號(hào)”,“集團(tuán)用戶數(shù)”
然后用“集團(tuán)表”和t3表再關(guān)聯(lián)
前兩天聯(lián)華對(duì)單系統(tǒng)頻頻出現(xiàn)out of memory的問(wèn)題,經(jīng)過(guò)層層分析,終于弄明白原來(lái)瓶頸出現(xiàn)在Spring獲取Bean那一步上。以前的做法是在delegate層ApplicationContext context = new ClassPathXmlApplicationContext("Compare.xml"); 這樣我把log4j的debug打開后發(fā)現(xiàn),每做1步操作的時(shí)候系統(tǒng)都會(huì)重新加載這個(gè)xml,重新創(chuàng)建Bean的實(shí)例,重新獲取url-mapping,這無(wú)疑是個(gè)及其錯(cuò)誤的方式。 研究后發(fā)現(xiàn)正確的使用方式是: 首先在web.xml里配置ApplicationContext <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> 然后在Action中編寫如下代碼得到Context,(我是覆蓋了Struts Action的setServlet方法,也許還有更好的方法)。 public void setServlet(ActionServlet servlet){
super.setServlet(servlet);
ServletContext servletContext = servlet.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
// get yours beans } 這樣在啟動(dòng)服務(wù)時(shí)已經(jīng)加載了xml中的配置,而不用每次都重新加載,大大提高了系統(tǒng)的效率
事先,把你的硬盤劃出 10G左右的空閑空間!
1.下載suse安裝光盤,準(zhǔn)備好8G左右的空間,最好是ntfs格式的。現(xiàn)在有 10.1正式版和10.2的beta 2版,2006年12月7號(hào),10.2就除正式版了!然后將五張光盤全部解壓,加壓到根目錄的一個(gè)文件夾下,比如X:\suse\
2.找到解壓出的第一張光盤linux和initrd文件,放在根目錄下.
32位的路徑應(yīng)該是 x:\suse\SUSE-Linux-10.1-Remastered-x86_64-CD1\boot\i386\loader\
64位的路徑是:X:\suse\SUSE-Linux-10.1-Remastered-x86_64-CD1\boot\x96_64\loader\
3.下載Grub for dos。下載網(wǎng)址:http://download.it168.com/14/1411/33307/33307_4.shtml
http://grub4dos.sourceforge.net
4.將下載的grub for dos 解壓到C盤可能會(huì)提示覆蓋什么profile.sys文件,直接替換就行。
5.改boot.ini文件,先把boot.ini文件的隱藏屬性給去掉!
把boot.ini文件用記事本打開在最下添加這么一行
C:\GRLDR="GRUB"
然后保存,
6.下一步就是重啟系統(tǒng)了,當(dāng)要選擇要啟動(dòng)的系統(tǒng)時(shí),選擇grub,找到類似 commanderline ,按下enter,進(jìn)入dos 提示符狀態(tài)下,
輸入 find /linux 回車,此時(shí)會(huì)顯示
hd(0,6)——(肯定會(huì)有不同,請(qǐng)看下面注釋)
kernel hd(0,6)/linux回車
initrd hd(0,6)/initrd回車
boot回車
(注釋:hd(0,6) 6是你的分區(qū),根據(jù)你的分區(qū)不同,這個(gè)數(shù)字會(huì)不同,0表示是第一塊硬盤。)
進(jìn)入圖形界面,
會(huì)提示類似 no cd in your cd drive的語(yǔ)句,不用管他,選擇back
7.按照提示選擇,都是簡(jiǎn)單的英語(yǔ),完全可以搞定的(抄襲linuxsir.org幾位大俠的話。。呵呵)
8.等到要你指定安裝文件的位置的時(shí)候,你把你剛才解壓的suse的幾張光盤的位置填進(jìn)去就行了,然后回車,會(huì)提示選擇安裝語(yǔ)言,鍵盤鼠標(biāo)什么的,按照提示選就ok了。大家安裝時(shí)候注意分區(qū),不要采用它默認(rèn)的分區(qū)方式,那樣的你的windows操作系統(tǒng)就會(huì)被它給刪掉了。
再羅嗦一點(diǎn),Suse的分區(qū)方式?jīng)]有fedora和ubuntu做的好,后面的兩個(gè)全部可以手動(dòng)分區(qū),而suse只有切換到專家模式下才能更改分區(qū),剛開始,搞的我又點(diǎn)郁悶。
等待安裝完成。。。。大約40 ~ 1個(gè)小時(shí)。不要著急!中間還要填root密碼和給機(jī)器命名,添加user等操作!
9.安裝完成后,重啟,進(jìn)入系統(tǒng),user不用填密碼自動(dòng)登錄系統(tǒng)(現(xiàn)在我還不知道怎么才能不讓它自動(dòng)登錄)
祝大家好運(yùn)。。。。
——部分內(nèi)容來(lái)自linuxsir.org,感謝Thruth大俠!
摘要: 關(guān)于ORACLE中的DECODE- -
 ...
閱讀全文
如果你手上有一本《Spring in Action》, 那么你最好從第三部分"Spring 在 Web 層的應(yīng)用--建立 Web 層"開始看, 否則那將是一場(chǎng)惡夢(mèng)!
首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 應(yīng)用程序接收到 http://localhost:8088/hello.do(請(qǐng)求路徑為/hello.do) 的請(qǐng)求后, Spring 將這個(gè)請(qǐng)求交給一個(gè)名為 helloController 的程序進(jìn)行處理, helloController 再調(diào)用 一個(gè)名為 hello.jsp 的 jsp 文件生成 HTML 代碼發(fā)給用戶的瀏覽器顯示. 上面的名稱(/hello.do, helloController, hello.jsp) 都是變量, 你可以更改.
在 Spring MVC 中, jsp 文件中盡量不要有 Java 代碼, 只有 HTML 代碼和"迭代(forEach)"與"判斷(if)"兩個(gè)jstl標(biāo)簽. jsp 文件只作為渲染(或稱為視圖 View)模板使用.
好了, 我們開始吧. 首先我們需要一個(gè)放在 WEB-INF 目錄下的 web.xml 文件:
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/database.xml
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
它配置了以下功能:
-
配置 DispatcherServlet (servlet 標(biāo)簽), 它是一個(gè) Java Servlet 程序. 我們將它命名為 test. 然后我們?cè)倥渲?Servlet 映射(test-mapping 標(biāo)簽), 也就是你希望哪些請(qǐng)求被DispatcherServlet處理. 這里, 我們?cè)O(shè)置后綴名為 do(*.do) 的所有URL請(qǐng)求都被名為 test 的 DispatcherServlet 的程序處理. 選擇 .do 只是一個(gè)習(xí)慣,但是你不要選擇 .html! 雖然《Spring in Action》選擇了 .html, 但是那是一種非常糟糕的作法, 特別是你整合 Apache 和 Tomcat 的時(shí)候.
-
配置 CharacterEncodingFilter (filter 標(biāo)簽), 否則你會(huì)發(fā)現(xiàn)中文亂碼. 因?yàn)槲业?jsp 和 html 文件都是 UTF-8 編碼的, 所以我在 param-value 標(biāo)簽中設(shè)置了 UTF-8. 估計(jì)你使用的是 GB2312 或者 GBK, 立即轉(zhuǎn)到 UTF-8 上來(lái)吧.
-
分解配置文件. context-param 標(biāo)簽指明我們的配置文件還有 /WEB-INF/database.xml 和 /WEB-INF/applicationContext.xml. ContextLoaderListener(listener 標(biāo)簽) 由此得知配置文件是哪些, 它會(huì)將它們載入.
因?yàn)槲覀儗?DispatcherServlet 命名為test, 所以我們?cè)?WEB-INF 目錄下建立一個(gè)名為 test-servlet.xml 的文件:
test-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.do">helloController</prop>
</props>
</property>
</bean>
<bean id="helloController" class="com.ecnulxq.test.HelloController">
</bean>
</beans>
它配置了以下功能:
-
配置 InternalResourceViewResolver, 它是 jsp 渲染模板的處理器. 如果你告訴 InternalResourceViewResolver 處理一個(gè)名為 hello 的模板時(shí), 它會(huì)渲染 /WEB-INF/jsp/hello.jsp 文件. 把 jsp 文件放到 /WEB-INF/jsp/ 目錄下是被鼓勵(lì)的, 這樣可以防止用戶不經(jīng)過(guò) Controller 直接訪問(wèn) jsp 文件從而出錯(cuò)(有些頑皮的人很喜歡這樣做).
-
配置 SimpleUrlHandlerMapping, 在上面的配置文件中, /hello.do 的請(qǐng)求將被 helloController 處理. "/hello.do"和"helloController" 是變量, 你可以更改. 但是你注意到了嗎, hello.do 以 .do 作為后綴名. 如果這里(本文的條件下)你不使用.do 作為后綴名, 就沒(méi)有程序來(lái)處理這個(gè)請(qǐng)求了. 因?yàn)?DispatcherServlet 將收到的請(qǐng)求轉(zhuǎn)交給 SimpleUrlHandlerMapping, DispatcherServlet 收不到的請(qǐng)求, SimpleUrlHandlerMapping 當(dāng)然也收不到了. 你可以在 props 標(biāo)簽內(nèi)配置多個(gè) prop 標(biāo)簽.
-
我們將在后面編寫com.ecnulxq.test.HelloController類.
上面, 我們?cè)?web.xml 文件中告訴 ContextLoaderListener, 我們還有另外兩個(gè)配置文件 /WEB-INF/database.xml 和 /WEB-INF/applicationContext.xml.
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="propertyConfigure" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/jdbc.properties</value>
</list>
</property>
</bean>
</beans>
它配置了以下功能:
database.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ">
<beans>
<!-- Remove this if your database setting is fine.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
-->
<!-- Transaction manager for a single JDBC DataSource
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
-->
<!--
<bean id="attributeManager" class="com.ideawu.core.AttributeManager">
<property name="dataSource" ref="dataSource"/>
</bean>
-->
</beans>
它配置了以下功能(不過(guò),已經(jīng)注釋掉了):
jdbc.properties:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
現(xiàn)在, 我們來(lái)編寫 Java 代碼吧.
package com.ecnulxq.test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
/**
* @author lxq ecnulxq@163.com
* @version 創(chuàng)建時(shí)間:Oct 12, 2007 類說(shuō)明
*
*/
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("hello_1", "你好!Spring!");
request.setAttribute("hello_2", "Hello!Spring!");
return new ModelAndView("hello");
}
}
return new ModelAndView("hello"); 告訴 InternalResourceViewResolver jsp 模板的名字叫作 hello. request.setAttribute() 設(shè)置的對(duì)象我們可以在 jsp 文件中使用.
hello.jsp:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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=utf-8" />
<title>Hello World!</title>
</head>
<body>
<h2>
${hello_1}
</h2>
<h2>
${hello_2}
</h2>
</body>
</html>
7 Functions 標(biāo)簽庫(kù)
稱呼 Functions 標(biāo)簽庫(kù)為標(biāo)簽庫(kù),倒不如稱呼其為函數(shù)庫(kù)來(lái)得更容易理解些。因?yàn)?Functions 標(biāo)簽庫(kù)并沒(méi)有提供傳統(tǒng)的標(biāo)簽來(lái)為 JSP 頁(yè)面的工作服務(wù),而是被用于 EL 表達(dá)式語(yǔ)句中。在 JSP2.0 規(guī)范下出現(xiàn)的 Functions 標(biāo)簽庫(kù)為 EL 表達(dá)式語(yǔ)句提供了許多更為有用的功能。 Functions 標(biāo)簽庫(kù)分為兩大類,共 16 個(gè)函數(shù)。
長(zhǎng)度函數(shù): fn:length
字符串處理函數(shù): fn:contains 、 fn:containsIgnoreCase 、 fn:endsWith 、 fn:escapeXml 、 fn:indexOf 、 fn:join 、 fn:replace 、 fn:split 、 fn:startsWith 、 fn:substring 、 fn:substringAfter 、 fn:substringBefore 、 fn:toLowerCase 、 fn:toUpperCase 、 fn:trim
以下是各個(gè)函數(shù)的用途和屬性以及簡(jiǎn)單示例。
9.7.1 長(zhǎng)度函數(shù) fn:length 函數(shù)
長(zhǎng)度函數(shù) fn:length 的出現(xiàn)有重要的意義。在 JSTL1.0 中,有一個(gè)功能被忽略了,那就是對(duì)集合的長(zhǎng)度取值。雖然 java.util.Collection 接口定義了 size 方法,但是該方法不是一個(gè)標(biāo)準(zhǔn)的 JavaBean 屬性方法(沒(méi)有 get,set 方法),因此,無(wú)法通過(guò) EL 表達(dá)式“ ${collection.size} ”來(lái)輕松取得。
fn:length 函數(shù)正是為了解決這個(gè)問(wèn)題而被設(shè)計(jì)出來(lái)的。它的參數(shù)為 input ,將計(jì)算通過(guò)該屬性傳入的對(duì)象長(zhǎng)度。該對(duì)象應(yīng)該為集合類型或 String 類型。其返回結(jié)果是一個(gè) int 類型的值。下面看一個(gè)示例。
<%ArrayList arrayList1 = new ArrayList();
arrayList1.add("aa");
arrayList1.add("bb");
arrayList1.add("cc");
%>
<%request.getSession().setAttribute("arrayList1", arrayList1);%>
${fn:length(sessionScope.arrayList1)}
假設(shè)一個(gè) ArrayList 類型的實(shí)例“ arrayList1 ”,并為其添加三個(gè)字符串對(duì)象,使用 fn:length 函數(shù)后就可以取得返回結(jié)果為“ 3 ”。
9.7.2 判斷函數(shù) fn:contains 函數(shù)
fn:contains 函數(shù)用來(lái)判斷源字符串是否包含子字符串。它包括 string 和 substring 兩個(gè)參數(shù),它們都是 String 類型,分布表示源字符串和子字符串。其返回結(jié)果為一個(gè) boolean 類型的值。下面看一個(gè)示例。
${fn:contains("ABC", "a")}<br>
${fn:contains("ABC", "A")}<br>
前者返回“ false ”,后者返回“ true ”。
9.7.3 fn:containsIgnoreCase 函數(shù)
fn:containsIgnoreCase 函數(shù)與 fn:contains 函數(shù)的功能差不多,唯一的區(qū)別是 fn:containsIgnoreCase 函數(shù)對(duì)于子字符串的包含比較將忽略大小寫。它與 fn:contains 函數(shù)相同,包括 string 和 substring 兩個(gè)參數(shù),并返回一個(gè) boolean 類型的值。下面看一個(gè)示例。
${fn:containsIgnoreCase("ABC", "a")}<br>
${fn:containsIgnoreCase("ABC", "A")}<br>
前者和后者都會(huì)返回“ true ”。
9.7.4 詞頭判斷函數(shù) fn:startsWith 函數(shù)
fn:startsWith 函數(shù)用來(lái)判斷源字符串是否符合一連串的特定詞頭。它除了包含一個(gè) string 參數(shù)外,還包含一個(gè) subffx 參數(shù),表示詞頭字符串,同樣是 String 類型。該函數(shù)返回一個(gè) boolean 類型的值。下面看一個(gè)示例。
${fn:startsWith ("ABC", "ab")}<br>
${fn:startsWith ("ABC", "AB")}<br>
前者返回“ false ”,后者返回“ true ”。
9.7.5 詞尾判斷函數(shù) fn:endsWith 函數(shù)
fn:endsWith 函數(shù)用來(lái)判斷源字符串是否符合一連串的特定詞尾。它與 fn:startsWith 函數(shù)相同,包括 string 和 subffx 兩個(gè)參數(shù),并返回一個(gè) boolean 類型的值。下面看一個(gè)示例。
${fn:endsWith("ABC", "bc")}<br>
${fn:endsWith("ABC", "BC")}<br>
前者返回“ false ”,后者返回“ true ”。
9.7.6 字符實(shí)體轉(zhuǎn)換函數(shù) fn:escapeXml 函數(shù)
fn:escapeXml 函數(shù)用于將所有特殊字符轉(zhuǎn)化為字符實(shí)體碼。它只包含一個(gè) string 參數(shù),返回一個(gè) String 類型的值。
9.7.8 字符匹配函數(shù) fn:indexOf 函數(shù)
fn:indexOf 函數(shù)用于取得子字符串與源字符串匹配的開始位置,若子字符串與源字符串中的內(nèi)容沒(méi)有匹配成功將返回“ -1 ”。它包括 string 和 substring 兩個(gè)參數(shù),返回結(jié)果為 int 類型。下面看一個(gè)示例。
${fn:indexOf("ABCD","aBC")}<br>
${fn:indexOf("ABCD","BC")}<br>
前者由于沒(méi)有匹配成功,所以返回 -1 ,后者匹配成功將返回位置的下標(biāo),為 1 。
摘要: 對(duì)于Hibernate這類ORM而言,緩存顯的尤為重要,它是持久層性能提升的關(guān)鍵.簡(jiǎn)單來(lái)講Hibernate就是對(duì)JDBC進(jìn)行封裝,以實(shí)現(xiàn)內(nèi)部狀態(tài)的管理,OR關(guān)系的映射等,但隨之帶來(lái)的就是數(shù)據(jù)訪問(wèn)效率的降低,和性能的下降,而緩存就是彌補(bǔ)這一缺點(diǎn)的重要方法.
緩存就是數(shù)據(jù)庫(kù)數(shù)據(jù)在內(nèi)存中的臨時(shí)容器,包括數(shù)據(jù)庫(kù)數(shù)據(jù)在內(nèi)存中的臨時(shí)拷貝,它位于數(shù)據(jù)庫(kù)與數(shù)...
閱讀全文
在介紹GROUP BY 和 HAVING 子句前,我們必需先講講sql語(yǔ)言中一種特殊的函數(shù):聚合函數(shù),例如SUM, COUNT, MAX, AVG等。這些函數(shù)和其它函數(shù)的根本區(qū)別就是它們一般作用在多條記錄上。
SELECT SUM(population) FROM bbc
這里的SUM作用在所有返回記錄的population字段上,結(jié)果就是該查詢只返回一個(gè)結(jié)果,即所有國(guó)家的總?cè)丝跀?shù)。
通過(guò)使用GROUP BY 子句,可以讓SUM 和 COUNT 這些函數(shù)對(duì)屬于一組的數(shù)據(jù)起作用。當(dāng)你指定 GROUP BY region 時(shí), 屬于同一個(gè)region(地區(qū))的一組數(shù)據(jù)將只能返回一行值,也就是說(shuō),表中所有除region(地區(qū))外的字段,只能通過(guò) SUM, COUNT等聚合函數(shù)運(yùn)算后返回一個(gè)值。 HAVING子句可以讓我們篩選成組后的各組數(shù)據(jù),WHERE子句在聚合前先篩選記錄.也就是說(shuō)作用在GROUP BY 子句和HAVING子句前,而 HAVING子句在聚合后對(duì)組記錄進(jìn)行篩選。
讓我們還是通過(guò)具體的實(shí)例來(lái)理解GROUP BY 和 HAVING 子句,還采用第三節(jié)介紹的bbc表。
SQL實(shí)例:
一、顯示每個(gè)地區(qū)的總?cè)丝跀?shù)和總面積:
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
先以region把返回記錄分成多個(gè)組,這就是GROUP BY的字面含義。分完組后,然后用聚合函數(shù)對(duì)每組中的不同字段(一或多條記錄)作運(yùn)算。
二、 顯示每個(gè)地區(qū)的總?cè)丝跀?shù)和總面積.僅顯示那些面積超過(guò)1000000的地區(qū)。
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000
在這里,我們不能用where來(lái)篩選超過(guò)1000000的地區(qū),因?yàn)楸碇胁淮嬖谶@樣一條記錄。
相反,HAVING子句可以讓我們篩選成組后的各組數(shù)據(jù)。
group by分組統(tǒng)計(jì)SQL語(yǔ)句(實(shí)例)
用一條查詢語(yǔ)句,查出各姓名的數(shù)值余額.
用戶表:
姓名
a
b
c
....
扣費(fèi)表:
姓名 數(shù)值
a 3.5
b 5.2
a 2
...
充值表:
姓名 數(shù)值
b 10
a 10
a 10.5
...
返回:
姓名 差額(充值和-扣費(fèi)和)
測(cè)試通過(guò)
select table1.TNAME,table1.TelName, (table3.充值-table2.扣費(fèi)) as 差額
from 用戶表 table1,(select TelName,sum(TelQryh)as 扣費(fèi) from 扣費(fèi)表 group by TelName)table2,
(select TelName,sum(TelQryc)as 充值 from 充值表 group by TelName)table3 where
table1.TelName=table2.TelName and table1.TelName=table3.TelName