respose状态个案研究

为了做个性能测试,在每次访问资源的时候 又要设个延时,程序不复杂,做个过滤器就行了:

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);

这样一来目的就达到了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值