package cn.jsp.servlet.filter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.URLEncoder;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CacheFilter implements Filter {
private ServletContext servletContext;
// 缓存文件夹,使用Tomcat工作目录
private File temporalDir;
// 缓存时间,配置在Filter初始化参数中
private long cacheTime = Long.MAX_VALUE;
public void init(FilterConfig config) throws ServletException {
temporalDir = (File) config.getServletContext().getAttribute(
"javax.servlet.context.tempdir");
servletContext = config.getServletContext();
cacheTime = new Long(config.getInitParameter("cacheTime"));
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
// 如果为 POST, 则不经过缓存
if ("POST".equals(request.getMethod())) {
chain.doFilter(request, response);
return;
}
// 请求的 URI
String uri = request.getRequestURI();
if (uri == null)
uri = "";
uri = uri.replace(request.getContextPath() + "/", "");
uri = uri.trim().length() == 0 ? "index.jsp" : uri;
uri = request.getQueryString() == null ? uri : (uri + "?" + request
.getQueryString());
// 对应的缓存文件
File cacheFile = new File(temporalDir, URLEncoder.encode(uri, "UTF-8"));
System.out.println(cacheFile);
// 如果缓存文件不存在 或者已经超出缓存时间 则请求 Servlet
if (!cacheFile.exists()
|| cacheFile.length() == 0
|| cacheFile.lastModified() < System.currentTimeMillis()
- cacheTime) {
CacheResponseWrapper cacheResponse = new CacheResponseWrapper(response);
chain.doFilter(request, cacheResponse);
// 将内容写入缓存文件
char[] content = cacheResponse.getCacheWriter().toCharArray();
temporalDir.mkdirs();
cacheFile.createNewFile();
Writer writer = new OutputStreamWriter(new FileOutputStream(
cacheFile), "UTF-8");
writer.write(content);
writer.close();
}
// 请求的ContentType
String mimeType = servletContext.getMimeType(request.getRequestURI());
response.setContentType(mimeType);
// 读取缓存文件的内容,写入客户端浏览器
Reader ins = new InputStreamReader(new FileInputStream(cacheFile),
"UTF-8");
StringBuffer buffer = new StringBuffer();
char[] cbuf = new char[1024];
int len;
while ((len = ins.read(cbuf)) > -1) {
buffer.append(cbuf, 0, len);
}
ins.close();
// 输出到客户端
response.getWriter().write(buffer.toString());
}
public void destroy() {
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Servlet高级应用.rar (73个子文件)
s2servlet
.project 1KB
winter.jpg 103KB
.mymetadata 300B
src
cn
jsp
servlet
common
ImageUtil.java 2KB
AccountException.java 293B
action
userServlet.java 2KB
doLogin.java 2KB
filter
WaterMarkOutputStream.java 977B
OutputReplaceFilter.java 2KB
PrivilegeFilter.java 2KB
ImageRedirectFilter.java 1KB
CacheResponseWrapper.java 962B
LogFilter.java 2KB
WaterMarkFilter.java 1KB
UploadRequestWrapper.java 3KB
ExceptionHandlerFilter.java 1KB
HttpCharacterResponseWrapper.java 677B
CacheFilter.java 3KB
WaterMarkResponseWrapper.java 2KB
UploadFilter.java 793B
CharacterEncodingFilter.java 1KB
log4j.properties 224B
commons-logging.properties 161B
WebRoot
WEB-INF
sensitive.properties 161B
trans.properties 344B
word.properties 121B
classes
cn
jsp
servlet
common
ImageUtil.class 2KB
AccountException.class 547B
action
userServlet.class 1KB
doLogin.class 2KB
filter
OutputReplaceFilter.class 3KB
WaterMarkOutputStream.class 1KB
UploadRequestWrapper.class 4KB
CacheFilter.class 5KB
WaterMarkResponseWrapper.class 2KB
PrivilegeFilter.class 4KB
CharacterEncodingFilter.class 2KB
UploadFilter.class 1KB
HttpCharacterResponseWrapper.class 938B
WaterMarkFilter.class 2KB
CacheResponseWrapper.class 1KB
ExceptionHandlerFilter.class 2KB
ImageRedirectFilter.class 2KB
LogFilter.class 3KB
log4j.properties 224B
commons-logging.properties 161B
lib
commons-logging.jar 33KB
commons-fileupload-1.2.1.jar 56KB
log4j-1.2.13.jar 312KB
commons-io-1.4.jar 106KB
web.xml 5KB
logo.png 6KB
privilege.properties 263B
accountException.jsp 977B
exception.jsp 872B
upload.jsp 1KB
action
doAction.jsp 852B
doUpload.jsp 716B
admin
welcome.jsp 949B
userList.jsp 1009B
index.jsp 871B
upload2.jsp 1KB
images
girl.jpg 83KB
error.gif 9KB
ch03
testExceptionFilter.jsp 1024B
demo02.jsp 922B
demo01.jsp 848B
dodemo02.jsp 315B
testCharReplace.jsp 964B
META-INF
MANIFEST.MF 39B
login.jsp 976B
.myeclipse
.classpath 679B
sunset.jpg 70KB
共 73 条
- 1
资源评论
shaouxiaoxiao
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功