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) {
】
}
页:
[1]