#
网页缓存
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://www.blogjava.net/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://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://www.blogjava.net/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)