为了做个性能测试,在每次访问资源的时候 又要设个延时,程序不复杂,做个过滤器就行了:
public class WylFilter implements Filter{
int sleep = 15;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
System.out.println("start sleep.");
try {
Thread.sleep(sleep * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("end sleep.");
System.out.println("sleep " + sleep + " s.");
HttpServletResponse r = (HttpServletResponse)response;
r.setHeader("Pragma", "No-cache");
r.setHeader("Cache-Control", "no-cache");
r.setDateHeader("Expires", 0);
filterChain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
sleep = Integer.parseInt((String)filterConfig.getInitParameter("sleep"));
}
}
但是同时说,使用loadrunner的时候,一个脚本里用同一个url访问同一个资源,会有问题,我不太明白,但既然有问题总的解决,我想了一个方案
http://IP:8080/^^^^tomcat.gif 在过滤器中滤掉^^^^ 然后重定向到http://IP:8080/tomcat.gif
起初代码我是这样写的:
.......
String ourl = ((HttpServletRequest)request).getRequestURI();
System.out.println("ourl:" + ourl);
String nurl = ourl;
Pattern p = Pattern.compile("(^.*/)([^/]*$)");
Matcher m = p.matcher(ourl);
if(m.matches()){
String temp = m.group(2);
Pattern pt = Pattern.compile("(^//^*)([^//^]*$)");
Matcher mt = pt.matcher(temp);
if(mt.matches()){
nurl = m.group(1) + mt.group(2);
}else{
nurl = m.group(1) + m.group(2);
}
}
System.out.println("nurl:" + nurl);
RequestDispatcher rd = null;
rd = request.getRequestDispatcher(nurl);
HttpServletResponse r = (HttpServletResponse)response;
r.setHeader("Pragma", "No-cache");
r.setHeader("Cache-Control", "no-cache");
r.setDateHeader("Expires", 0);
rd.forward(request, response);
filterChain.doFilter(request, response);
System.out.println("after doFilter.");
......
filterChain.doFilter(request, response);行报java.lang.IllegalStateException
说明response已经提交了
从这里我们可以得出两个结论:
1,重定向不会在过滤
2,重定向会提交response
3,doFilter()方法要求response未提交,因为提交就等于结束了
通过另一个小实验我还得出一个结论:
处在责任连末尾的Filter中的doFilter()会提交response
doFilter()的方法是用来处理责任连的,因为我即一个Filter,所以我即删去了filterChain.doFilter(request, response);
这样一来目的就达到了