0 0

使用junit测试servlet时候出现escaped absolute path not valid错误5

我在学习junit在线教程的时候(网址是http://caterpillar.onlyfun.net/Gossip/JUnit/JUnitGossip.htm),在里面的第一個 Cactus + Tomcat 測試 中遇到了问题。

详细情况是这样的:
我根据他所说的方法,设置了web.xml和添加了LoginServletTest(testCase)和LoginServlet两个servlet,之后进行测试。发现会报error message="escaped absolute path not valid" type="org.apache.commons.httpclient.URIException"的错误。在网上搜索了一阵子之后,有人说是由于httpclient对url处理的问题造成的。之后我重新新建了一个项目,名称叫做CactusDemo,之前的项目名称叫Cactus Demo(注意Cactus和Demo之间有一个空格)。同样的设置了相关的web.xml和jar包之后发布。测试正常。
但是新的问题又出现了,当我启动tomcat之后,如果我首先运行http://localhost:8088/CactusDemo/ServletTestRunner?suite=onlyfun.caterpillar.test.LoginServletTest也就是没有空格那个项目的链接的话显示的是一切正常,而且链接到有空格的目录也是正常的http://localhost:8088/Cactus%20Demo/ServletTestRunner?suite=onlyfun.caterpillar.test.LoginServletTest。但是如果首先运行的是后者的话,就是先点有空格的话,即使接着再运行没有空格也会返回前面所说的escaped absolute path not valid的错误信息,直到你重启tomcat才会正常。

在这里请问有哪位大虾能够帮助小弟解解惑呢?
祝各位仁兄工作顺利,学习进步,并祝愿javaeye越办越好。

下面附上相关的文件和配置信息

错误信息如下
<?xml version="1.0" encoding="UTF-8" ?> 
- <testsuites>
- <testsuite name="onlyfun.caterpillar.test.LoginServletTest" tests="2" failures="0" errors="2" time="0.234">
- <testcase name="testValidUser" time="0.157">
  <error message="escaped absolute path not valid" type="org.apache.commons.httpclient.URIException">org.apache.commons.httpclient.URIException: escaped absolute path not valid at org.apache.commons.httpclient.URI.setRawPath(URI.java:2837) at
 org.apache.commons.httpclient.URI.parseUriReference(URI.java:2023) at
 org.apache.commons.httpclient.URI.<init>(URI.java:147) at
 org.apache.commons.httpclient.HttpMethodBase.getURI(HttpMethodBase.java:265) at
 org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:383) at 
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346) at 
org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody0(HttpClientConnectionHelper.java:144) at 
org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody1$advice(HttpClientConnectionHelper.java:307) at 
org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect(HttpClientConnectionHelper.java:1) at 
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.callRunTest(DefaultHttpClient.java:163) at 
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody0(DefaultHttpClient.java:81) at 
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody1$advice(DefaultHttpClient.java:307) at 
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest(DefaultHttpClient.java:1) at 
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runWebTest(HttpProtocolHandler.java:164) at 
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody0(HttpProtocolHandler.java:83) at 
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody1$advice(HttpProtocolHandler.java:307) at 
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest(HttpProtocolHandler.java:1) at 
org.apache.cactus.internal.client.ClientTestCaseCaller.runTest(ClientTestCaseCaller.java:145) at 
org.apache.cactus.internal.AbstractCactusTestCase.runBareClient(AbstractCactusTestCase.java:218) at 
org.apache.cactus.internal.AbstractCactusTestCase.runBare(AbstractCactusTestCase.java:134) at 
org.apache.cactus.server.runner.ServletTestRunner.run(ServletTestRunner.java:309) at 
org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody0(ServletTestRunner.java:187) at 
org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody1$advice(ServletTestRunner.java:225) at 
org.apache.cactus.server.runner.ServletTestRunner.doGet(ServletTestRunner.java:1) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619)</error> 
  </testcase>
- <testcase name="testInValidUser" time="0.015">
  <error message="escaped absolute path not valid" type="org.apache.commons.httpclient.URIException">由于字数太多而且跟上面的堆栈信息一样,因此不重复了</error> 
  </testcase>
  </testsuite>
  </testsuites>


web.xml配置信息
    <!-- Cactus框架开始 -->
    <description>
        Cactus Demo
    </description>
    <display-name>Cactus Demo</display-name>
    <servlet>
        <servlet-name>
            ServletRedirector
        </servlet-name>
        <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>
            ServletTestRunner
        </servlet-name>
        <servlet-class>org.apache.cactus.server.runner.ServletTestRunner</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>
            HelloServlet
        </servlet-name>
        <servlet-class>onlyfun.caterpillar.test.HelloServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>
            LoginServlet
        </servlet-name>
        <servlet-class>onlyfun.caterpillar.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletRedirector</servlet-name>
        <url-pattern>/ServletRedirector</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ServletTestRunner</servlet-name>
        <url-pattern>/ServletTestRunner</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
     <!-- Cactus框架结束 -->


LoginServletTest和LoginServlet源代码
LoginServletTest
package onlyfun.caterpillar.test;

import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;
import onlyfun.caterpillar.LoginServlet;

public class LoginServletTest extends ServletTestCase {
    
    public void beginValidUser(WebRequest webRequest) {
        webRequest.addParameter("username", "justin");
        webRequest.addParameter("password", "123456");
    }
    
    public void testValidUser() {
        LoginServlet loginServlet = new LoginServlet();
        assertTrue(loginServlet.isValidUser(request));
    }
    
    public void beginInValidUser(WebRequest webRequest) {
        webRequest.addParameter("username", "guest");
        webRequest.addParameter("password", "123456");
    }
    
    public void testInValidUser() {
        LoginServlet loginServlet = new LoginServlet();
        assertFalse(loginServlet.isValidUser(request));
    }
}


LoginServlet
package onlyfun.caterpillar;

import javax.servlet.http.*;

public class LoginServlet extends HttpServlet {
    
    public boolean isValidUser(HttpServletRequest request) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        if(username == null ||
                password == null ||
                !username.equals("justin") ||
                !password.equals("123456")) {
            return false;
        }
        else {
            return true;
        }


    }
}


添加的jar如下
在如没有特殊说明均可在http://jakarta.apache.org/site/downloads/downloads_cactus.cgi下载
junit-3.8.2.jar
aspectjrt-1.5.3.jar
cactus.core.framework.uberjar.javaEE.14-1.8.1.jar
commons-httpclient-3.1.jar
commons-logging-1.1.jar
commons-codec-1.4.jar(这个忘了,不过网上搜搜就会有)
servlet-api.jar(tomcat自带)

测试环境的配置如下
myeclipse Version: 5.1.0 GA
Tomcat 6.0.18

问题补充:这个测试当时是直接用网上的例子作为测试的,而且测试的目的是假设已经有了一个后台的login servlet,但是前台的页面还没有写好的情况下,以模拟的前后文的方式进行测试。
现在的问题是这样子的:有两个项目,其中一个项目跟另外一个项目完全一样,只不过是名字中间增加了一个空格。然后如果先用没有空格的项目来测试的话,两个项目都可以测试通过,但是如果先测试有空格的项目的话,两个项目都测试不通过。
photon 写道
人工login的时候,有这样的异常吗?

2010年1月12日 15:03

1个答案 按时间排序 按投票排序

0 0

人工login的时候,有这样的异常吗?

2010年1月24日 09:58

相关推荐

    实验5 JUnit测试框架的使用.doc

    单元测试代码是不会出现在最终软件产品中的,所以最好为单元测试代码与被测试代码创建单独的目录,并保证测试代码和被测试代码使用相同的包名。这样既保证了代码的分离,同时还保证了查找的方便。在项目 coolJUnit ...

    Junit测试案例使用

    5. Junit 测试的分类:Junit 有不同的使用技巧,以后慢慢地分别讲叙,如 Class 测试、Jsp 测试、Servlet 测试、Ejb 测试等。 6. Junit 的下载和安装:去 Junit 主页下载最新版本 3.8.1 程序包 junit-3.8.1.zip,用 ...

    学生信息管理系统(jsp,Junit,servlet,filter,sql)

    《学生信息管理系统——基于JSP、JUnit、Servlet、Filter与SQL的实现》 学生信息管理系统是信息化教育领域中常见的应用,它旨在通过计算机技术管理大量的学生数据,提高工作效率,减少人为错误。本系统采用JavaWeb...

    JUnit3.8.1 以及使用JUnit测试的代码demo

    在`JUnit & 简单Junit使用代码`这个文件中,可能包含了一个或多个示例,展示了如何创建测试类、编写测试方法、使用断言以及设置测试环境。例如,可能有一个简单的数学操作类`MathUtils`,以及对应的测试类`...

    在Eclipse中使用JUnit4进行单元测试

    在Eclipse中使用JUnit4进行单元测试是一种常见的Java开发实践,它可以帮助开发者确保代码的正确性和稳定性。单元测试是软件开发中的重要环节,通过编写针对代码各个独立模块的测试用例,可以验证代码功能是否按预期...

    自动饮料机Junit测试(软件测试与质量保证实验).rar

    3. **异常处理**:测试异常处理逻辑,确保在出现错误时程序行为符合预期。 4. **正向测试**:验证正常输入和操作的正确性。 5. **负向测试**:验证程序对错误输入和非法操作的响应。 **自动饮料机案例** 在这个...

    Ant 使用Junit进行单元测试

    对于单元测试,我们需要在代码中创建测试类,比如`MyTestClass`,并使用JUnit提供的注解来定义测试方法。例如: ```java import org.junit.*; public class MyTestClass { @Test public void testMyFunction() {...

    单元测试之道Java版——使用Junit

    在Java世界里,Junit是广泛使用的单元测试框架,它为开发者提供了方便、高效的测试工具。本篇文章将深入探讨如何利用Junit进行单元测试,并分享一些最佳实践。 首先,我们需要了解什么是单元测试。单元测试是对软件...

    在java中使用 junit单元测试

    在Java中使用JUnit单元测试是软件开发过程中不可或缺的一部分。单元测试是指在开发过程中,对代码的一部分进行测试,以确保代码的正确性和可靠性。在Java中,JUnit是最流行的单元测试框架之一。 单元测试的重要性 ...

    junit测试_java_JUnit_JUnit测试_

    例如,文件可能会讲解如何设置一个基本的JUnit测试类,通常这个类会继承自`junit.framework.TestCase`(对于较旧的JUnit版本)或者使用注解`@RunWith(JUnit4.class)`(对于JUnit 4及以上版本)。 测试类中的每个...

    javaweb中.java文件测试需要的框架(junit测试).rar

    3. **集成测试**:虽然JUnit主要用于单元测试,但结合Servlet容器(如Tomcat)和工具如Arquillian,也可以进行简单的集成测试。 4. **测试覆盖率**:使用JaCoCo等工具可以测量代码覆盖率,确保测试的全面性。 5. *...

    Myeclipse中的JUnit测试详细

    通过右键点击测试类或测试方法 -&gt; Run As -&gt; JUnit Test,MyEclipse会启动JUnit测试并显示测试结果,包括通过的测试、失败的测试以及错误信息。此外,MyEclipse的JUnit视图(JUnit View)可以展示所有项目的测试结果...

    Junit 单元测试完整案例

    【Junit单元测试完整案例】深入解析 在软件开发中,单元测试是验证代码功能是否正确、独立单元是否按预期工作的关键步骤。Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例...

    单元测试之道(Java):使用JUnit进行单元测试

    单元测试之道(Java):使用JUnit进行单元测试。单元测试是提高代码质量的有效手段,但大部分开发人员由于种种原因都不乐意进行单元测试。

    JUnit测试代码示例

    JUnit是Java编程语言中最...随着JUnit4和JUnit5的出现,更多的高级特性,如参数化测试、异步测试、规则等,使得单元测试更加灵活和强大。不过,了解JUnit3的基本概念和实践对于理解后续版本的演变和使用是至关重要的。

    Junit测试jar包

    1. **创建测试类**:首先,你需要创建一个测试类,这个类通常以`Test`结尾,并且继承自`junit.framework.TestCase`(对于JUnit4)或使用`@org.junit.Test`注解(对于JUnit5)标记测试方法。 2. **测试方法**:测试...

Global site tag (gtag.js) - Google Analytics