#
網(wǎng)頁緩存
2009-07-09 10:42
網(wǎng)頁的緩存是由HTTP消息頭中的“Cache-control”來控制的,常見的取值有private、no-cache、max-age、must-revalidate等,默認(rèn)為private。其作用根據(jù)不同的重新瀏覽方式分為以下幾種情況: (1) 打開新窗口 如果指定cache-control的值為private、no-cache、must-revalidate,那么打開新窗口訪問時(shí)都會(huì)重新訪問服務(wù)器。而如果指定了max-age值,那么在此值內(nèi)的時(shí)間里就不會(huì)重新訪問服務(wù)器,例如: Cache-control: max-age=5 表示當(dāng)訪問此網(wǎng)頁后的5秒內(nèi)再次訪問不會(huì)去服務(wù)器 (2) 在地址欄回車 如果值為private或must-revalidate(和網(wǎng)上說的不一樣),則只有第一次訪問時(shí)會(huì)訪問服務(wù)器,以后就不再訪問。如果值為no-cache,那么每次都會(huì)訪問。如果值為max-age,則在過期之前不會(huì)重復(fù)訪問。 (3) 按后退按扭 如果值為private、must-revalidate、max-age,則不會(huì)重訪問,而如果為no-cache,則每次都重復(fù)訪問 (4) 按刷新按扭 無論為何值,都會(huì)重復(fù)訪問 項(xiàng)目中使用過濾器來設(shè)置網(wǎng)頁的緩存 FilterConfig fc;
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; // set the provided HTTP response parameters for (Enumeration e = fc.getInitParameterNames(); e.hasMoreElements();) { String headerName = (String) e.nextElement(); response.addHeader(headerName, fc.getInitParameter(headerName)); } // pass the request/response on chain.doFilter(req, response); } 配置文件的配置: <filter> <filter-name>NoCache</filter-name> <filter-class>filter.CacheFilter</filter-class> <init-param> <param-name>Cache-Control</param-name> <param-value>no-cache, must-revalidate</param-value> </init-param> </filter> <filter> <filter-name>CacheForWeek</filter-name> <filter-class>filter.CacheFilter</filter-class> <init-param> <param-name>Cache-Control</param-name> <param-value>max-age=604800</param-value> </init-param> </filter> <filter-mapping> <filter-name>CacheForWeek</filter-name> <url-pattern>*.js</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheForWeek</filter-name> <url-pattern>*.css</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheForWeek</filter-name> <url-pattern>*.gif</url-pattern> </filter-mapping> |
JQuery AJAX中遇到這樣一個(gè)問題,參數(shù)中包含特殊字符,比如&'#@等
這是執(zhí)行AJAX的時(shí)候就會(huì)出問題,因?yàn)樗鶄鞯膮?shù)變了.
看個(gè)示例就明白:
$.ajax({
url: '/ashx/ajax.ashx',
type: 'post',
data: 'option=delete&name=11&adb,
success: function (data) {
if (data != 'error') {
}
}
});
上面執(zhí)行的ajax就是異步刪除一個(gè)name為 11&abd 的數(shù)據(jù)
當(dāng)請(qǐng)求到ajax.ashx頁面時(shí),我們獲取到的name參數(shù)為11
執(zhí)行操作后會(huì)發(fā)現(xiàn)其實(shí)刪除了 name 為 11的數(shù)據(jù),而沒有刪除 name 為 11&abc 的數(shù)據(jù)
這是由于有&特殊字符,把以前的倆個(gè)參數(shù)變成了三個(gè)參數(shù) option,name,abc
這時(shí)就需要用另外一種方法傳遞參數(shù):
$.ajax({
url: '/ashx/ajax.ashx',
type: 'post',
data:{ 'option':'delete','name':'11&adb'},
success: function (data) {
if (data != 'error') {
}
}
});
采用上面的json格式傳遞參數(shù)就可以避免特殊字符引起的參數(shù)錯(cuò)誤問題.
1、安裝ant,下載ant包,并解壓到d盤根目錄d:\ant
2、配置環(huán)境變量,包括ANT和JAVA_HOME
ANT_HOME:D:\ant
JAVA_HOME:E:\workserver\jdk1.5.0_06
path:D:\ant\bin;E:\workserver\jdk1.5.0_06\bin
3、ant需要jsch-0.1.37.jar包和js-1.6R2.jar包放在ant\lib目錄下
4、啟動(dòng)命令行cmd,到該目錄:E:\workspace\ebizcenter\metadata\build\scripts
5、執(zhí)行a、"ant checkout"從svn服務(wù)器下載,b、"ant build"編譯java類成class文件,c、"ant deploy"部署到服務(wù)器(上傳)
6、如果是64位系統(tǒng),參考這篇文章http://www.linuxso.com/linuxbiancheng/13326.html
a、去
http://www.sliksvn.com/en/download下載并安裝
b、安裝完成后,把安裝目錄(如:D:\Program Files\SlikSvn\bin) 加入到系統(tǒng)環(huán)境變量PATH中 c、
在安裝目錄下(如:D:\Program Files\SlikSvn\bin)找到“libsvnjavahl-1.dll”這個(gè)文件,復(fù)制一份后重命名為“svnjavahl-1.dll”,即去掉文件名中前三個(gè)字母
1、url轉(zhuǎn)發(fā)需要修改響應(yīng)的字符類型response.setContentType("text/html;charset=UTF-8");2、@import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
ajax 是無法實(shí)現(xiàn)上傳文件的 , ajax與后臺(tái)通信都是通過傳遞字符串
-- index.html
- <form action="upload.jsp" id="form1" name="form1" encType="multipart/form-data" method="post" target="hidden_frame" >
- <input type="file" id="file" name="file" style="width:450">
- <input type="submit" value="上傳文件"><span id="msg"></span>
- <br>
- <font color="red">支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上傳</font>
-
- <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
- </form>
-
- <!-- javascript s -->
- <script type="text/javascript">
- function callback(msg) {
- document.getElementById("file").outerHTML = document.getElementById("file").outerHTML;
- document.getElementById("msg").innerHTML = "<font color=red>"+msg+"</font>";
- }
- </script>
index.html 中主要要做的就是寫一個(gè) form 和 iframe ,并把 form 的 target 設(shè)為 iframe 的名字,注意要把iframe 設(shè)為不可見,其他的都是正常的文件上傳的寫法,這樣刷新的頁面就是這個(gè)隱藏的 Iframe ,而在 index.html 中是不會(huì)有頁面刷新的,js的 callback 方法是回調(diào)方法。用于清空文件上傳框和顯示后臺(tái)信息,注意清空文件上傳框的方法,和普通方法有點(diǎn)不一樣。
上傳的注意事項(xiàng):
1、<form method="POST" id="matchItemForm" name="formEntity" action="${CoreCtxPath}/gather/gatherAjax.html" enctype="multipart/form-data" target="hidden_frame">
這里的method很重要不能少,enctype也不能少,target代表form和iframe綁定也不能少。
1.Java代碼
打開Eclipse的Window菜單,然后Preferences->Java->Code Style->Formatter->Edit/Show(根據(jù)不同版本可用的按鈕會(huì)不一樣) ->Line Wrapping->Maximum line width:由默認(rèn)的80改成自己想要設(shè)定的長(zhǎng)度
2.Html代碼
Window->Preferences->MyEclipse->Files and Editors->Html->Html Source->Line width->加個(gè)0以后保存。
3.xml代碼
Window->Preferences->MyEclipse->Files and Editors->xml->xml Source->->Line width->999
@import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
為了能夠讓終端通過網(wǎng)絡(luò)訪問,需要開啟MYSQL遠(yuǎn)程訪問服務(wù)。即在MYSQL的user表中進(jìn)行設(shè)置,使任何ip的主機(jī)都能夠使用用戶名為root,密碼為“1”訪問數(shù)據(jù)庫。在Linux的終端中輸入如下命令:
#mysql –uroot -p
Enter password:
#mysql>use mysql;
#mysql>update user set host='%' where user='root';
#mysql>FLUSH PRIVILEGES;
#mysql>select host,user from user ;
當(dāng)看到Host 這一項(xiàng)中有一個(gè)%記錄且用戶名為root。說明設(shè)置已成功。
一般MySQL安裝的時(shí)候默認(rèn)是綁定了本機(jī)。因此需要在配置文件中取消本機(jī)綁定。方能夠被遠(yuǎn)程的主機(jī)訪問。MySQL配置文件為my.cnf ,位于/etc/mysql/文件夾下。編輯my.cnf,找到bind-address =127.0.0.1。這一句就是將MySQL與本機(jī)綁定。所以將此句注釋掉。取消與本機(jī)的綁定。然后執(zhí)行 #sudo /etc/init.d/mysql restart 。即重啟MySQL服務(wù),重啟之后就可進(jìn)行遠(yuǎn)程訪問。這樣就完全搭建好可以在網(wǎng)絡(luò)中被終端訪問的服務(wù)器端數(shù)據(jù)庫了。
1、struts2提供的有struts-2.0.9\j4目錄,這個(gè)下面有工具可以把1.5下編譯的包,給編譯成兼容1.4的包。
2、spring2是直接支持jre1.4的,其實(shí)大部分開源jar包都直接支持。
3、如果你用的是eclipse,你需要在項(xiàng)目--->屬性--->構(gòu)建路徑---->庫,中進(jìn)行設(shè)置“JRE 系統(tǒng)庫[jdk 1.4.2_07]”,當(dāng)然你也要引入其它編譯好了的兼容1.4的包。
4、在項(xiàng)目--->屬性--->java編譯器,中需要勾選“啟用特定與項(xiàng)目的設(shè)置”,將“編譯器一致性級(jí)別”設(shè)置為1.4,并且應(yīng)用。
5、有些jar包不能在1.4環(huán)境下跑的,不過這個(gè)不好統(tǒng)計(jì),我遇到的有commons-beanutils-1.6.jar不要用1.7以及以后版本的,貌似commons-logging-1.0.4.jar也不要用高版本。
這個(gè)是沒有設(shè)置好的時(shí)候報(bào)出的錯(cuò)誤信息(這里是c3p0,也可能不是這個(gè)類報(bào)出來):
(C3P0Registry.java:139) jdk1.5 management interfaces unavailable... JMX support disabled.
緩存實(shí)現(xiàn)的層面有很多:
1、對(duì)象緩存
由ORM框架提供,透明性訪問,細(xì)顆粒度緩存數(shù)據(jù)庫查詢結(jié)果,無需業(yè)務(wù)代碼顯式編程。當(dāng)軟件結(jié)構(gòu)按照ORM框架的要求進(jìn)行針對(duì)性設(shè)計(jì),使用對(duì)象緩存將會(huì)極大降低web系統(tǒng)對(duì)于數(shù)據(jù)庫的訪問請(qǐng)求。因?yàn)轭愃艸ibernate這樣的ORM,良好的設(shè)計(jì)數(shù)據(jù)庫結(jié)構(gòu)和利用對(duì)象緩存,在大負(fù)載網(wǎng)站,能夠提供極高的性能。因?yàn)槭褂脤?duì)象緩存也無需顯式編程,所以適用范圍也最廣泛。
2、查詢緩存
對(duì)數(shù)據(jù)庫查詢結(jié)果行集進(jìn)行緩存,適用于一些耗時(shí),但是時(shí)效性要求比較低的場(chǎng)景。iBATIS就只能使用查詢緩存,而無對(duì)象緩存。查詢緩存和對(duì)象緩存適用的場(chǎng)景不一樣,是互為補(bǔ)充的。
3、片斷緩存
針對(duì)動(dòng)態(tài)頁面的局部片斷內(nèi)容進(jìn)行緩存,適用于一些個(gè)性化但不經(jīng)常更新的頁面(例如博客)。OSCache提供了相當(dāng)簡(jiǎn)陋的片斷緩存,而RoR則提供了相當(dāng)好的片斷緩存機(jī)制。
4、Action緩存
針對(duì)URL訪問返回的頁面結(jié)果進(jìn)行緩存,適用于粗粒度的頁面緩存,例如新聞發(fā)布。OScache提供了相當(dāng)簡(jiǎn)陋的Action緩存(通過web.xml中的配置),而RoR提供了相當(dāng)好的Action緩存。
緩存不能一概而論,以上每種緩存分別適用于各自的場(chǎng)景,緩存不同的層面。當(dāng)然你可以在應(yīng)用程序當(dāng)中把4種緩存一起用上。
相對(duì)路徑本質(zhì)上還是絕對(duì)路徑
因此,歸根結(jié)底,Java本質(zhì)上只能使用絕對(duì)路徑來尋找資源。所有的相對(duì)路徑尋找資源的方法,都不過是一些便利方法。不過是API在底層幫助我們構(gòu)建了絕對(duì)路徑,從而找到資源的!
得到classpath和當(dāng)前類的絕對(duì)路徑的一些方法
下面是一些得到classpath和當(dāng)前類的絕對(duì)路徑的一些方法。你可能需要使用其中的一些方法來得到你需要的資源的絕對(duì)路徑。
1.FileTest.class.getResource("")
得到的是當(dāng)前類FileTest.class文件的URI目錄。不包括自己!
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/
2.FileTest.class.getResource("/")
得到的是當(dāng)前的classpath的絕對(duì)URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
3.Thread.currentThread().getContextClassLoader().getResource("")
得到的也是當(dāng)前ClassPath的絕對(duì)URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
4.FileTest.class.getClassLoader().getResource("")
得到的也是當(dāng)前ClassPath的絕對(duì)URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
5.ClassLoader.getSystemResource("")
得到的也是當(dāng)前ClassPath的絕對(duì)URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
我推薦使用Thread.currentThread().getContextClassLoader().getResource("")來得到當(dāng)前的classpath的絕對(duì)路徑的URI表示法。
Web應(yīng)用程序中資源的尋址
上文中說過,當(dāng)前用戶目錄,即相對(duì)于System.getProperty("user.dir")返回的路徑。
對(duì)于JavaEE服務(wù)器,這可能是服務(wù)器的某個(gè)路徑,這個(gè)并沒有統(tǒng)一的規(guī)范!
而不是我們發(fā)布的Web應(yīng)用程序的根目錄!
這樣,在Web應(yīng)用程序中,我們絕對(duì)不能使用相對(duì)于當(dāng)前用戶目錄的相對(duì)路徑。
在Web應(yīng)用程序中,我們一般通過ServletContext.getRealPath("/")方法得到Web應(yīng)用程序的根目錄的絕對(duì)路徑。
這樣,我們只需要提供相對(duì)于Web應(yīng)用程序根目錄的路徑,就可以構(gòu)建出定位資源的絕對(duì)路徑。
這是我們開發(fā)Web應(yīng)用程序時(shí)一般所采取的策略。
(本文轉(zhuǎn)載自:http://dev.yesky.com/85/3001085_1.shtml)