不使用容器 进行 测试 jsp

参照: 容器外的JSP页面测试技术
由于上面给出例 复杂 。一般人很难理解。我也是 ^_^
但仔细看我还是自己写出一个比较简单的,望大家一起讨论。

被测试jsp
<% @ taglib prefix = " html "  uri = " /WEB-INF/struts-html.tld "   %>
<% @ taglib prefix = " c "  uri = " /WEB-INF/c-1_0-rt.tld "   %>
< html:html >
    
< c:if  test ="${name != pass}" >
       ${name}  
< br >
       ${pass} 
< br >
       <!-- <html:text property="in" ></html:text> -->
     </ c:if >
</ html:html >





ant直接把他放在 eclipes 工程的根目录下 build.xml
   
但有有3个参数要设置 tomcat.home  Tomcat 的地址
                        webapp.path 工程中的根目录,下面有WEB-INF
                        src 原代码 (到时候jsp会翻译成.java
                                    到这个目录的 org.apache.jsp.jsp 下)
< project  name ="Webapp Precompilation"  default ="all"  basedir ="." >  

  
<!--  tomcat dir  -->
  
< property  name ="tomcat.home"  value ="D:\Tomcat 5.0" />
  
  
<!--  this=..//WEB-INF (in eclipes)   -->
  
< property  name ="webapp.path"  value =".\WebRoot" />
  
<!--  src (in eclipes)  -->
  
< property  name ="src"  value ="./src" />

  
< target  name ="jspc" >  
    
< taskdef  classname ="org.apache.jasper.JspC"  name ="jasper2"   >  
      
< classpath  id ="jspc.classpath" >  
        
< pathelement  location ="${java.home}/../lib/tools.jar" />  
        
< fileset  dir ="${tomcat.home}/bin" >  
          
< include  name ="*.jar" />  
        
</ fileset >  
        
< fileset  dir ="${tomcat.home}/server/lib" >  
          
< include  name ="*.jar" />  
        
</ fileset >  
        
< fileset  dir ="${tomcat.home}/common/lib" >  
          
< include  name ="*.jar" />  
        
</ fileset >  
      
</ classpath >  
    
</ taskdef >  

    
< jasper2 
             
validateXml ="false"  
             uriroot
="${webapp.path}"  
             webXmlFragment
="${webapp.path}/WEB-INF/generated_web.xml"  
             outputDir
="${src}"   />  
  
</ target >

  
< target  name ="compile" >

    
< mkdir  dir ="${webapp.path}/WEB-INF/classes" />
    
< mkdir  dir ="${webapp.path}/WEB-INF/lib" />

    
< javac  destdir ="${webapp.path}/WEB-INF/classes"
           optimize
="off"
           debug
="on"  failonerror ="false"
           srcdir
="${src}"  
       excludes
="**/*.smap" >
      
< classpath >
        
< pathelement  location ="${webapp.path}/WEB-INF/classes" />
        
< fileset  dir ="${webapp.path}/WEB-INF/lib" >
          
< include  name ="*.jar" />
        
</ fileset >
        
< pathelement  location ="${tomcat.home}/common/classes" />
        
< fileset  dir ="${tomcat.home}/common/lib" >
          
< include  name ="*.jar" />
        
</ fileset >
        
< pathelement  location ="${tomcat.home}/shared/classes" />
        
< fileset  dir ="${tomcat.home}/shared/lib" >
          
< include  name ="*.jar" />
        
</ fileset >
        
< fileset  dir ="${tomcat.home}/bin" >  
          
< include  name ="*.jar" />  
        
</ fileset >  
      
</ classpath >
      
< include  name ="**"   />
      
< exclude  name ="tags/**"   />
    
</ javac >

  
</ target >

  
< target  name ="all"  depends ="jspc,compile" >
  
</ target >

  
< target  name ="cleanup" >
      
< delete >
        
< fileset  dir ="${webapp.path}/WEB-INF/src" />
        
< fileset  dir ="${webapp.path}/WEB-INF/classes/org/apache/jsp" />
      
</ delete >
  
</ target >

</ project >

TEST
package  jetty.test.supper;


import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;

import  org.apache.jsp.jsp.MyJsp_jsp;

import  com.meterware.httpunit.GetMethodWebRequest;
import  com.meterware.httpunit.WebRequest;
import  com.meterware.httpunit.WebResponse;
import  com.meterware.servletunit.InvocationContext;
import  com.meterware.servletunit.ServletRunner;
import  com.meterware.servletunit.ServletUnitClient;

import  junit.framework.TestCase;

public   class  JSPCTest  extends  TestCase{
    
private  InvocationContext ic  =   null  ;

    
protected   void  setUp()  throws  Exception {
        ServletRunner sr 
=   new  ServletRunner();
           
//  向环境中注册 jsp
        sr.registerServlet( " HelloWorld " , MyJsp_jsp. class .getName());
        ServletUnitClient  sc 
=  sr.newClient();
        WebRequest request 
=   new  GetMethodWebRequest( " http://localhost/HelloWorld " );
         ic 
=  sc.newInvocation(request);

    }
    
    
public   void  testJspC()  throws  Exception{
        HttpServletRequest re 
=   ic .getRequest();
        HttpServletResponse rq 
=   ic.getResponse();
        re.setAttribute(
" name " , " liukaiyi " );
        re.setAttribute(
" pass " , " 123456 " );
        
        MyJsp_jsp is 
=  (MyJsp_jsp) ic.getServlet();
        is._jspService(re,rq);
        
        WebResponse response 
=  ic.getServletResponse();
// 输出
        System.out.println( response.getText() );
        
    }
}

结果是
< html >
    
       liukaiyi  
< br >
       123456 
< br >
    
    
</ html >

后面用 HttpUnit 和 HtmlUnit 测试就不用我说了把 网上一大把。




你可能感兴趣的:(不使用容器 进行 测试 jsp)