jetty实战2-jsp

1.概述

jetty会将jsp文件编译成servlet然后提供服务,主要原理是在webdefault.xml中,有一个关于jsp的配置

Xml代码 复制代码  收藏代码jetty实战2-jsp
  1. <</SPAN>servlet id="jsp">  
  2.  <</SPAN>servlet-name>jsp</</SPAN>servlet-name>  
  3.  <</SPAN>servlet-class>org.apache.jasper.servlet.JspServlet</</SPAN>servlet-class>  
  4. </</SPAN>servlet>  
   
   
    
    jsp org.apache.jasper.servlet.JspServlet 
   
   

 
因此所有的jsp的请求都会由这个servlet来处理

 

 

jetty对于jsp的支持以及依赖的jar包

 

 

 

jetty用的的jsp-2.1-glassfish的核心类图如下:

 

 

 

2.编译

2.1 编译过程

 

编译的逻辑是(jsp2.1.6.jar),在每次请求JspServlet的service方法中,主要调用

 

Java代码 复制代码  收藏代码jetty实战2-jsp
  1. serviceJspFile(request, response, jspUri, null, precompile);  
serviceJspFile(request, response, jspUri, null, precompile);

 
然后调用

Java代码 复制代码  收藏代码jetty实战2-jsp
  1. wrapper (JspServletWrapper) rctxt.getWrapper(jspUri);  
wrapper = (JspServletWrapper) rctxt.getWrapper(jspUri);

 
根据jsp的请求路径取得对应的JspServletWrapper(wrapper中就会有jspfile的路径)。然后将请求委托到JspServletWrapper,这个类的逻辑如下:

 

(1) Compile,调用Compiler的compile方法,然后调用ecj.jar或者jdk的javacompiler来编译并生成对应的class。(编译的过程主要是generateJava() ;generateclass();两个步骤)
(2) (Re)load servlet class file,并赋值给theServlet成员变量
(3) Service request ,调用servlet的服务

 

2.2 配置

 所有的初始化参数都在jspSevlet的init方法中被读取然后存入Options options;成员变量,在初始化JspServletWrapper的时候传入并被使用

 

development参数,默认是true,如果不设置,每次访问都会重新编译jsp文件,引起性能问题。

 

Xml代码 复制代码  收藏代码jetty实战2-jsp
  1. <</SPAN>init-param>  
  2.    <</SPAN>param-name>development</</SPAN>param-name>  
  3.    <</SPAN>param-value>false</</SPAN>param-value>  
  4.  </</SPAN>init-param>  
   
      development
      false
    

 

 

如果设置了上面的参数,但是需要在修改jsp文件后能够动态生效,需要在webdefault.xml中添加如下配置:

   

Xml代码 复制代码  收藏代码jetty实战2-jsp
  1. <</SPAN>init-param>  
  2.      <</SPAN>param-name>checkInterval</</SPAN>param-name> (默认是0,也就是不扫描)   
  3.      <</SPAN>param-value>5</</SPAN>param-value>  
  4.    </</SPAN>init-param>  
 
      checkInterval (默认是0,也就是不扫描)
      5
    

 

3. compiler的选择

都是使用javaComplier,从初始化逻辑可以看到,先尝试使用JDK的complier,不行就使用ecj的compiler。

Java代码 复制代码  收藏代码jetty实战2-jsp
  1. private void initJavaCompiler() {   
  2.     Class getClassFor("javax.tools.ToolProvider");   
  3.     if (c != null) {   
  4.         // JDK1.6   
  5.         getClassFor("org.apache.jasper.compiler.Jsr199JavaCompiler");   
  6.         if (c != null) {   
  7.             try {   
  8.                 javaCompiler (JavaCompiler) c.newInstance();   
  9.             catch (Exception ex) {   
  10.             }   
  11.         }   
  12.     }   
  13.     if (javaCompiler == null) {   
  14.         getClassFor("org.eclipse.jdt.internal.compiler.Compiler");   
  15.         if (c != null) {   
  16.             getClassFor("org.apache.jasper.compiler.JDTJavaCompiler");   
  17.             if (c != null) {   
  18.                 try {   
  19.                     javaCompiler (JavaCompiler) c.newInstance();   
  20.                 catch (Exception ex) {   
  21.                 }   
  22.             }   
  23.         }   
  24.     }   
  25.     if (javaCompiler == null) {   
  26.         javaCompiler new AntJavaCompiler();   
  27.     }   
  28.   
  29.     javaCompiler.init(ctxt, errDispatcher, jspcMode);   
  30.  
    private void initJavaCompiler() {
        Class c = getClassFor("javax.tools.ToolProvider");
        if (c != null) {
            // JDK1.6
            c = getClassFor("org.apache.jasper.compiler.Jsr199JavaCompiler");
            if (c != null) {
                try {
                    javaCompiler = (JavaCompiler) c.newInstance();
                } catch (Exception ex) {
                }
            }
        }
        if (javaCompiler == null) {
            c = getClassFor("org.eclipse.jdt.internal.compiler.Compiler");
            if (c != null) {
                c = getClassFor("org.apache.jasper.compiler.JDTJavaCompiler");
                if (c != null) {
                    try {
                        javaCompiler = (JavaCompiler) c.newInstance();
                    } catch (Exception ex) {
                    }
                }
            }
        }
        if (javaCompiler == null) {
            javaCompiler = new AntJavaCompiler();
        }

        javaCompiler.init(ctxt, errDispatcher, jspcMode);
    }

  

4.参考文档

1. http://wiki.eclipse.org/Jetty/Howto/Configure_JSP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangleijay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值