设为首页 加入收藏

TOP

how tomcat works 读书笔记(二)----------一个简单的servlet容器(三)
2015-07-20 17:26:47 来源: 作者: 【 】 浏览:19
Tags:how tomcat works 读书 笔记 ---------- 一个 简单 servlet 容器
seUri("sdf")); PrintWriter out = response.getWriter(); out.println("Hello. Roses are red."); out.print("Violets are blue."); out.flush(); }

我把servlet类中的service改成上面的样子,大家看看,其实request的parseUri方法在servlet里是不应该被使用的!
那怎么办?
第一种,将parseUri方法的public方法改成默认的访问修饰符,包外的类就不能访问了。
不过还有另一种方式
门面模式!!
在上面的例子中,我们写的request实现了ServletRequest,我们可以再写一个类RequestFacade类让他也实现ServletRequest(response 类似)
\


package ex02.pyrmont;


import java.io.IOException;
import java.io.BufferedReader;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;


public class RequestFacade implements ServletRequest {


  private ServletRequest request = null;


  public RequestFacade(Request request) {
    this.request = request;
  }


    public String getRemoteHost() {
    return request.getRemoteHost();
  }


  //省略对ServletRequest接口的实现
  //servletrequest接口的方法 在RequestFacade 内部实现时 都调用类的属性request来实现


  public void setCharacterEncoding(String encoding)
    throws UnsupportedEncodingException {
    request.setCharacterEncoding(encoding);
  }


}
再看看  ServletProcessor 改成如下


    Servlet servlet = null;
    RequestFacade requestFacade = new RequestFacade(request);
    ResponseFacade responseFacade = new ResponseFacade(response);
    try {
      servlet = (Servlet) myClass.newInstance();
      servlet.service((ServletRequest) requestFacade, (ServletResponse) responseFacade);
    }
    catch (Exception e) {
      System.out.println(e.toString());
    }
    catch (Throwable e) {
      System.out.println(e.toString());
    }
httpServer 也改成如下
 if (request.getUri().startsWith("/servlet/")) {
          ServletProcessor2 processor = new ServletProcessor2();
          processor.process(request, response);
        }


app1给servlet里面传递的参数实际上是Request类型的,有调用parseUri方法的危险。
app2给servlet里面传递的参数实际上是RequestFacade,它根本就没有parseUri方法,自然就安全了。



这篇文章中 对书中的源码有删减 大家可以 下载完整版本的
深入剖析tomcat 源码
http://down.51cto.com/data/486495








首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA11504- Dominos(Tarjan+缩点) 下一篇HDU 4849-Wow! Such City!(最短..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)
·MySQL 数据类型:从 (2025-12-26 18:20:03)
·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)