java基础-tomcat请求过程-解析一个普通的jsp

比如一个http://localhost:8080/boss/c.jsp,最简单的jsp页面请求。

 

JIoEndpoint,运行
protected class SocketProcessor implements Runnable {
    ...
    public void run() {
    ...
}

AbstractProtocol,运行
public SocketState process(SocketWrapper<S> socket,SocketStatus status) {

CoyoteAdapter,运行
public void service(org.apache.coyote.Request req, org.apache.coyote.Response res)

ApplicationFilterChain,运行
public void doFilter(ServletRequest request, ServletResponse response)
private void internalDoFilter(ServletRequest request, ServletResponse response)

JspServlet,运行
public void service (HttpServletRequest request, HttpServletResponse response)
private void serviceJspFile(HttpServletRequest request,HttpServletResponse response, String jspUri,boolean precompile)

JspServletWrapper,运行
public void service(HttpServletRequest request,  HttpServletResponse response,boolean precompile){
    ctxt.compile();  //编译
           【
            JspCompilationContext,运行
            public void compile() {
                ...
               createCompiler(); // 创建编译器,默认是JDT编译器
 
               if (jspCompiler.isOutDated()) { // 比较jsp和编译后的类的时间,保证最新的类被加载
                   ...
                   jspCompiler.removeGeneratedFiles(); // 移出旧的编译文件
                   jspLoader = null;
                   jspCompiler.compile(); // 生成新的编译文件,如c_jsp.java,  c_jsp.class
                   jsw.setReload(true);// 重新加载
                   jsw.setCompilationException(null);
                    ...
                }
               ...
       }
         】
    servlet = getServlet(); // 获得servlet
    servlet.service(request, response); // 真正的请求,这里去除了servlet单线程模式,具体可参照源代码
            【
             HttpJspBase,运行
             public final void service(HttpServletRequest request, HttpServletResponse response)
             {
                _jspService(request, response);
             }
           
             JspFactoryImpl,运行
             public PageContext getPageContext(Servlet servlet, ServletRequest request,
             ServletResponse response, String errorPageURL, boolean needsSession,
             int bufferSize, boolean autoflush) {
            
             private PageContext internalGetPageContext(Servlet servlet, ServletRequest request,
             ServletResponse response, String errorPageURL, boolean needsSession,
             int bufferSize, boolean autoflush) {
            】

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值