设为首页 加入收藏

TOP

how tomcat works 读书笔记(二)----------一个简单的servlet容器(二)
2015-07-20 17:26:47 来源: 作者: 【 】 浏览:20
Tags:how tomcat works 读书 笔记 ---------- 一个 简单 servlet 容器
kTrace(); System.exit(1); } } } }

大家可以很清楚地看到,这部分和上一节的不同主要就在response部分,更准确的说就是在这
if (request.getUri().startsWith("/servlet/")) {
          ServletProcessor1 processor = new ServletProcessor1();
          processor.process(request, response);
        }
        else {
          StaticResourceProcessor processor = new StaticResourceProcessor();
          processor.process(request, response);
        }


我们看看,如果请求是以servlet开头的该如何处理。
package ex02.pyrmont;


import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLStreamHandler;
import java.io.File;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


public class ServletProcessor1 {


  public void process(Request request, Response response) {


    String uri = request.getUri();
    String servletName = uri.substring(uri.lastIndexOf("/") + 1);
    
    URLClassLoader loader = null;


    try {
      // create a URLClassLoader   //try部分的主要功能就是产生一个URLClassLoader
      URL[] urls = new URL[1];
      URLStreamHandler streamHandler = null;  
    
      File classPath = new File(Constants.WEB_ROOT);
      //下面的URL构造函数为
      //java.net.URL.URL(String protocol, String host, String file) throws MalformedURLException
      String repository = (new URL("file", null, classPath.getCanonicalPath() + File.separator)).toString() ;
 


      System.out.println(servletName+"*****"+Constants.WEB_ROOT+"   "+repository);
      //下面的URL构造函数为
      //java.net.URL.URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException
      //至于 URLStreamHandler是什么东西 暂时不必理会
      urls[0] = new URL(null, repository, streamHandler);
      loader = new URLClassLoader(urls);
    }
    catch (IOException e) {
      System.out.println(e.toString() );
    }
    Class
   myClass = null;
    try {
      myClass = loader.loadClass(servletName);   //加载请求的servlet
                                                 
    }
    catch (ClassNotFoundException e) {
      System.out.println(e.toString());
    }


    Servlet servlet = null;


    try {
      servlet = (Servlet) myClass.newInstance();  //生成实例 并调用service方法
      servlet.service((ServletRequest) request, (ServletResponse) response);
    }
    catch (Exception e) {
      System.out.println(e.toString());
    }
    catch (Throwable e) {
      System.out.println(e.toString());
    }


  }


}


看看另一部分,如果请求的不是servlet(这一节就是静态资源)该如何处理

package ex02.pyrmont;


import java.io.IOException;


public class StaticResourceProcessor {


  public void process(Request request, Response response) {
    try {
      response.sendStaticResource();
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }
}


跟第一节没有什么区别。
我们的request类要实现ServletRequest接口
package ex02.pyrmont;


import java.io.InputStream;
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.AsyncContext;
import javax.servlet.DispatcherType;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;




public class Request implements ServletRequest {


  private InputStream input;
  private String uri;


  public Request(InputStream input) {
    this.input = input;
  }


  public String getUri() {
    return uri;
  }


  private String parseUri(String requestString) {
    int index1, index2;
    index
首页 上一页 1 2 3 4 下一页 尾页 2/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)