在Jetty中运行servlet时获取HTTP 500

我有一个servlet,运行良好,直到几天前。 但我唯一改变的是我用于maven的nexus repo。 我正在通过mvn jetty运行servlet:run

但是当我尝试访问该网站而不是看到主页时,我看到:

HTTP ERROR 500 Problem accessing /. Reason: jregex/Pattern 

我可以访问其他url,例如/favicon.ico。 但是我找不到关于这个jregex / Pattern错误的任何内容,它看起来根本就没有在代码中使用jregex库。

我也没有在日志中看到任何问题。 看起来主页的请求不是通过我的servlet,而是请求其他页面。

这在Arch Linux和Mac OS X 10.7上都有发生

这几乎肯定是一个依赖性问题,因为在用旧的nexus服务器取代我的~/.m2文件夹之后(它与旧的nexus服务器的依赖关系)可以正常工作。

有时我也得到:

 HTTP ERROR: 503 Problem accessing /. Reason: SERVICE_UNAVAILABLE 

我将首先比较更改pom.xml之前和之后创建的ear / war文件。 这应该会引导您更改jar文件。 假设一切都是开源的,从maven repo下载源代码并进行比较。 \

编辑: JRegex是一个支持Perl regexp的java库。 也许更改maven repo会导致下载其他版本的依赖项,并且它们对JRegex有一些可选的依赖性。 (你应该能够检查一下)。

尝试将JRegex添加到您的依赖项中,看看会发生什么。 (请注意,如果您正在制作并且匆忙中,这应该是一种解决方法)

Jason这里对我有用,这是我经常使用的,pom.xml(相关部分):

    org.mortbay.jetty jetty-embedded 6.1.26      org.mortbay.jetty jetty-maven-plugin 7.0.2.v20100331   /jetty-example ${basedir}/src/main/webapp/WEB-INF/web.xml  5 9966 foo   9080 60000       

这是位于webappconfig中上面指定位置的web.xml作为描述符:

  HelloWorld Application  lalala   HelloServlet com.mypackage.jetty.Hello   HelloServlet /hello   

而servlet本身:

 public final class Hello extends HttpServlet { private static final long serialVersionUID = 903359962771189189L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); writer.println(""); writer.println(""); writer.println("Sample Application Servlet Page"); writer.println(""); writer.println(""); writer.println(""); writer.println(""); writer.println(""); writer.println(""); writer.println(""); writer.println("
"); writer.println(""); writer.println("

W00w I totally work

"); writer.println("
"); writer.println(""); writer.println(""); } }

您可以通过运行mvn jetty:run来运行服务器mvn jetty:run并在http://localhost:9080/jetty-example/hello检查它

此外,您可以在插件中添加执行并在芬兰构建项目时启动jetty。 无需手动mvn jetty:run每次都mvn jetty:run

   start-jetty pre-integration-test  run   true    stop-jetty post-integration-test  stop    

您还可以添加jetty配置文件,我将其用于数据库(适用于不同的环境)。 您可以在您的jetty插件的webAppConfig中添加文件位置,如下所示:

  /my-tool ${basedir}/src/main/webapp/WEB-INF/jetty/web.xml  ${basedir}/src/main/webapp/WEB-INF/jetty/jetty-env.xml   

并对jetty-env.xml的示例内容进行了说明:

     primaryDS    myuser password database database.stackoverflow.com 5432      

你应该对此很好。

你运行的mvn命令是什么? 您是否尝试手动下载工件并在本地工件上运行mvn?

我首先使用mvn下载工件。 这将validation您的所有设置/权限设置是否正常且适当。 为此,您可以使用Maven Dependency Plugin(v2.4)将依赖项下载到本地文件。 有关更多详细信息,请参阅此帖

一旦确保能够在本地下载工件,请尝试运行jetty:在本地工件上运行。 如果有效,那么您就知道自己的回购存在问题。

如果仍然无效,则可能是镜像设置或repo配置出现问题。 例如,如果mvn需要一个本地没有的插件或依赖项,它将查看第三方存储库。 您的settings.xml文件可能镜像到本地nexus服务器的所有内容,可能未配置为从MvnCentral下载。

确保您没有任何依赖/插件下载问题。 您可以轻松地从settings.xml指向mvncentral并完全绕过您的nexus服务器。

FWIW,您能否与BeyondCompare( Scooter Software )等工具进行文件比较