#
網頁緩存
2009-07-09 10:42
網頁的緩存是由HTTP消息頭中的“Cache-control”來控制的,常見的取值有private、no-cache、max-age、must-revalidate等,默認為private。其作用根據不同的重新瀏覽方式分為以下幾種情況: (1) 打開新窗口 如果指定cache-control的值為private、no-cache、must-revalidate,那么打開新窗口訪問時都會重新訪問服務器。而如果指定了max-age值,那么在此值內的時間里就不會重新訪問服務器,例如: Cache-control: max-age=5 表示當訪問此網頁后的5秒內再次訪問不會去服務器 (2) 在地址欄回車 如果值為private或must-revalidate(和網上說的不一樣),則只有第一次訪問時會訪問服務器,以后就不再訪問。如果值為no-cache,那么每次都會訪問。如果值為max-age,則在過期之前不會重復訪問。 (3) 按后退按扭 如果值為private、must-revalidate、max-age,則不會重訪問,而如果為no-cache,則每次都重復訪問 (4) 按刷新按扭 無論為何值,都會重復訪問 項目中使用過濾器來設置網頁的緩存 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中遇到這樣一個問題,參數中包含特殊字符,比如&'#@等
這是執行AJAX的時候就會出問題,因為所傳的參數變了.
看個示例就明白:
$.ajax({
url: '/ashx/ajax.ashx',
type: 'post',
data: 'option=delete&name=11&adb,
success: function (data) {
if (data != 'error') {
}
}
});
上面執行的ajax就是異步刪除一個name為 11&abd 的數據
當請求到ajax.ashx頁面時,我們獲取到的name參數為11
執行操作后會發現其實刪除了 name 為 11的數據,而沒有刪除 name 為 11&abc 的數據
這是由于有&特殊字符,把以前的倆個參數變成了三個參數 option,name,abc
這時就需要用另外一種方法傳遞參數:
$.ajax({
url: '/ashx/ajax.ashx',
type: 'post',
data:{ 'option':'delete','name':'11&adb'},
success: function (data) {
if (data != 'error') {
}
}
});
采用上面的json格式傳遞參數就可以避免特殊字符引起的參數錯誤問題.
1、安裝ant,下載ant包,并解壓到d盤根目錄d:\ant
2、配置環境變量,包括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、啟動命令行cmd,到該目錄:E:\workspace\ebizcenter\metadata\build\scripts
5、執行a、"ant checkout"從svn服務器下載,b、"ant build"編譯java類成class文件,c、"ant deploy"部署到服務器(上傳)
6、如果是64位系統,參考這篇文章http://www.linuxso.com/linuxbiancheng/13326.html
a、去
http://www.sliksvn.com/en/download下載并安裝
b、安裝完成后,把安裝目錄(如:D:\Program Files\SlikSvn\bin) 加入到系統環境變量PATH中 c、
在安裝目錄下(如:D:\Program Files\SlikSvn\bin)找到“libsvnjavahl-1.dll”這個文件,復制一份后重命名為“svnjavahl-1.dll”,即去掉文件名中前三個字母
1、url轉發需要修改響應的字符類型response.setContentType("text/html;charset=UTF-8");2、@import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
ajax 是無法實現上傳文件的 , ajax與后臺通信都是通過傳遞字符串
-- 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 中主要要做的就是寫一個 form 和 iframe ,并把 form 的 target 設為 iframe 的名字,注意要把iframe 設為不可見,其他的都是正常的文件上傳的寫法,這樣刷新的頁面就是這個隱藏的 Iframe ,而在 index.html 中是不會有頁面刷新的,js的 callback 方法是回調方法。用于清空文件上傳框和顯示后臺信息,注意清空文件上傳框的方法,和普通方法有點不一樣。
上傳的注意事項:
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(根據不同版本可用的按鈕會不一樣) ->Line Wrapping->Maximum line width:由默認的80改成自己想要設定的長度
2.Html代碼
Window->Preferences->MyEclipse->Files and Editors->Html->Html Source->Line width->加個0以后保存。
3.xml代碼
Window->Preferences->MyEclipse->Files and Editors->xml->xml Source->->Line width->999
@import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
為了能夠讓終端通過網絡訪問,需要開啟MYSQL遠程訪問服務。即在MYSQL的user表中進行設置,使任何ip的主機都能夠使用用戶名為root,密碼為“1”訪問數據庫。在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 ;
當看到Host 這一項中有一個%記錄且用戶名為root。說明設置已成功。
一般MySQL安裝的時候默認是綁定了本機。因此需要在配置文件中取消本機綁定。方能夠被遠程的主機訪問。MySQL配置文件為my.cnf ,位于/etc/mysql/文件夾下。編輯my.cnf,找到bind-address =127.0.0.1。這一句就是將MySQL與本機綁定。所以將此句注釋掉。取消與本機的綁定。然后執行 #sudo /etc/init.d/mysql restart 。即重啟MySQL服務,重啟之后就可進行遠程訪問。這樣就完全搭建好可以在網絡中被終端訪問的服務器端數據庫了。
1、struts2提供的有struts-2.0.9\j4目錄,這個下面有工具可以把1.5下編譯的包,給編譯成兼容1.4的包。
2、spring2是直接支持jre1.4的,其實大部分開源jar包都直接支持。
3、如果你用的是eclipse,你需要在項目--->屬性--->構建路徑---->庫,中進行設置“JRE 系統庫[jdk 1.4.2_07]”,當然你也要引入其它編譯好了的兼容1.4的包。
4、在項目--->屬性--->java編譯器,中需要勾選“啟用特定與項目的設置”,將“編譯器一致性級別”設置為1.4,并且應用。
5、有些jar包不能在1.4環境下跑的,不過這個不好統計,我遇到的有commons-beanutils-1.6.jar不要用1.7以及以后版本的,貌似commons-logging-1.0.4.jar也不要用高版本。
這個是沒有設置好的時候報出的錯誤信息(這里是c3p0,也可能不是這個類報出來):
(C3P0Registry.java:139) jdk1.5 management interfaces unavailable... JMX support disabled.
緩存實現的層面有很多:
1、對象緩存
由ORM框架提供,透明性訪問,細顆粒度緩存數據庫查詢結果,無需業務代碼顯式編程。當軟件結構按照ORM框架的要求進行針對性設計,使用對象緩存將會極大降低web系統對于數據庫的訪問請求。因為類似Hibernate這樣的ORM,良好的設計數據庫結構和利用對象緩存,在大負載網站,能夠提供極高的性能。因為使用對象緩存也無需顯式編程,所以適用范圍也最廣泛。
2、查詢緩存
對數據庫查詢結果行集進行緩存,適用于一些耗時,但是時效性要求比較低的場景。iBATIS就只能使用查詢緩存,而無對象緩存。查詢緩存和對象緩存適用的場景不一樣,是互為補充的。
3、片斷緩存
針對動態頁面的局部片斷內容進行緩存,適用于一些個性化但不經常更新的頁面(例如博客)。OSCache提供了相當簡陋的片斷緩存,而RoR則提供了相當好的片斷緩存機制。
4、Action緩存
針對URL訪問返回的頁面結果進行緩存,適用于粗粒度的頁面緩存,例如新聞發布。OScache提供了相當簡陋的Action緩存(通過web.xml中的配置),而RoR提供了相當好的Action緩存。
緩存不能一概而論,以上每種緩存分別適用于各自的場景,緩存不同的層面。當然你可以在應用程序當中把4種緩存一起用上。
相對路徑本質上還是絕對路徑
因此,歸根結底,Java本質上只能使用絕對路徑來尋找資源。所有的相對路徑尋找資源的方法,都不過是一些便利方法。不過是API在底層幫助我們構建了絕對路徑,從而找到資源的!
得到classpath和當前類的絕對路徑的一些方法
下面是一些得到classpath和當前類的絕對路徑的一些方法。你可能需要使用其中的一些方法來得到你需要的資源的絕對路徑。
1.FileTest.class.getResource("")
得到的是當前類FileTest.class文件的URI目錄。不包括自己!
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/
2.FileTest.class.getResource("/")
得到的是當前的classpath的絕對URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
3.Thread.currentThread().getContextClassLoader().getResource("")
得到的也是當前ClassPath的絕對URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
4.FileTest.class.getClassLoader().getResource("")
得到的也是當前ClassPath的絕對URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
5.ClassLoader.getSystemResource("")
得到的也是當前ClassPath的絕對URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
我推薦使用Thread.currentThread().getContextClassLoader().getResource("")來得到當前的classpath的絕對路徑的URI表示法。
Web應用程序中資源的尋址
上文中說過,當前用戶目錄,即相對于System.getProperty("user.dir")返回的路徑。
對于JavaEE服務器,這可能是服務器的某個路徑,這個并沒有統一的規范!
而不是我們發布的Web應用程序的根目錄!
這樣,在Web應用程序中,我們絕對不能使用相對于當前用戶目錄的相對路徑。
在Web應用程序中,我們一般通過ServletContext.getRealPath("/")方法得到Web應用程序的根目錄的絕對路徑。
這樣,我們只需要提供相對于Web應用程序根目錄的路徑,就可以構建出定位資源的絕對路徑。
這是我們開發Web應用程序時一般所采取的策略。
(本文轉載自:http://dev.yesky.com/85/3001085_1.shtml)