Java 在Jetty中运行servlet时获取HTTP 500

Java 在Jetty中运行servlet时获取HTTP 500,java,deployment,jetty,Java,Deployment,Jetty,我有一个servlet,它在几天前运行良好。但我唯一改变的是我为maven使用的nexus回购协议。我正在通过mvnjetty:run运行servlet 但当我尝试访问网站而不是查看主页时,我看到: HTTP ERROR 500 Problem accessing /. Reason: jregex/Pattern 我可以访问其他url,例如/favicon.ico。但是我在这个jregex/模式错误上找不到任何东西,而且代码中根本没有使用jregex库 我在日志中也没有看到任何问

我有一个servlet,它在几天前运行良好。但我唯一改变的是我为maven使用的nexus回购协议。我正在通过mvnjetty:run运行servlet

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

HTTP ERROR 500

Problem accessing /. Reason:

    jregex/Pattern
我可以访问其他url,例如/favicon.ico。但是我在这个jregex/模式错误上找不到任何东西,而且代码中根本没有使用jregex库

我在日志中也没有看到任何问题。看起来对主页的请求并没有发送到我的servlet,但对其他页面的请求却在发送

这在ArchLinux和MacOSX10.7上都会发生

这几乎肯定是一个依赖性问题,因为用旧文件夹(带有旧nexus服务器的依赖项)替换我的
~/.m2
文件夹后,它就可以工作了

有时我也会:

HTTP ERROR: 503

Problem accessing /. Reason:

    SERVICE_UNAVAILABLE

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

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

一旦您能够确保您能够在本地下载工件,请尝试在本地工件上运行jetty:run。如果这样做有效,那么你就知道你的回购协议有问题

如果仍然不起作用,则可能是镜像设置或repo配置有问题。例如,如果mvn需要一个您在本地没有的插件或依赖项,那么它将寻求第三方repo。您的settings.xml文件可能会将所有这些镜像到您的本地nexus服务器,该服务器可能未配置为从MvnCentral下载


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

Jason这是我的工作方式,这是我经常使用的pom.xml(相关部分):

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

<webAppConfig>
      <contextPath>/my-tool</contextPath>
      <descriptor>${basedir}/src/main/webapp/WEB-INF/jetty/web.xml                          </descriptor>
      <jettyEnvXml>${basedir}/src/main/webapp/WEB-INF/jetty/jetty-env.xml                           </jettyEnvXml>
</webAppConfig>

/我的工具
${basedir}/src/main/webapp/WEB-INF/jetty/WEB.xml
${basedir}/src/main/webapp/WEB-INF/jetty/jetty-env.xml
和jetty-env.xml的示例内容:

<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"[]>
<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
      <!-- PRIMARY DATABASE     -->
      <New id="devDS" class="org.eclipse.jetty.plus.jndi.Resource">
            <Arg>primaryDS</Arg>
            <Arg>
                  <!-- i.e. Postgress   -->
                  <New class="org.postgresql.ds.PGSimpleDataSource">
                        <Set name="User">myuser</Set>
                        <Set name="Password">password</Set>
                        <Set name="DatabaseName">database</Set>
                        <Set name="ServerName">database.stackoverflow.com</Set>
                        <Set name="PortNumber">5432</Set>
                  </New>
            </Arg>
      </New>
      <!-- BACKUP DATABASE      
      <New id="devDS" class="org.eclipse.jetty.plus.jndi.Resource">         
      <Arg>backupDS</Arg>       
      <Arg>             
            .....       
      </Arg>    
        -->
</Configure>

primaryDS
我的用户
密码
数据库
database.stackoverflow.com
5432

您应该对此很在行。

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

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


尝试将JRegex添加到依赖项中,看看会发生什么。(请注意,如果您在生产中并且很匆忙,这将是一个解决方法)

FWIW,您可以使用BeyondCompare()之类的工具进行文件比较吗?确保服务器具有访问这些文件的权限。这是在Linux和Mac(特别是Arch Linux和Mac OS X 10.7)上进行的。我重复检查了权限,但仍然得到相同的结果。您的WAR web.xml正确吗?看看码头日志file@YvesMartin看起来是对的。我认为没有jetty日志文件,只有stderr(上面没有什么有趣的内容)。@Jason Axelson您使用的jetty版本是什么?谢谢!我90%确信我现在已经解决了。比较战争的两个版本使我注意到使用了不同版本的uasparser。好版本使用2012-02-08,而坏版本使用2012-05-09。此更改是由其他人进行的,我没有充分研究它,因为我没有意识到这是一个应用程序级故障,而不是jetty-level。感谢您的详细解释,但事实证明,这实际上是一个应用程序级问题,而不是jetty-level。
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("<html>");
        writer.println("<head>");
        writer.println("<title>Sample Application Servlet Page</title>");
        writer.println("</head>");
        writer.println("<body bgcolor=white>");

        writer.println("<table border=\"0\" cellpadding=\"10\">");
        writer.println("<tr>");
        writer.println("<td>");
        writer.println("</td>");
        writer.println("<td>");
        writer.println("<h1>W00w I totally work</h1>");
        writer.println("</td>");
        writer.println("</tr>");
        writer.println("</table>");

        writer.println("</body>");
        writer.println("</html>");
    }
} 
<executions>
     <execution> <id>start-jetty</id> <phase>pre-integration-test</phase> <goals> <goal>run</goal> </goals> <configuration> <daemon>true</daemon> </configuration> </execution> <execution> <id>stop-jetty</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> 
</executions>
<webAppConfig>
      <contextPath>/my-tool</contextPath>
      <descriptor>${basedir}/src/main/webapp/WEB-INF/jetty/web.xml                          </descriptor>
      <jettyEnvXml>${basedir}/src/main/webapp/WEB-INF/jetty/jetty-env.xml                           </jettyEnvXml>
</webAppConfig>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"[]>
<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
      <!-- PRIMARY DATABASE     -->
      <New id="devDS" class="org.eclipse.jetty.plus.jndi.Resource">
            <Arg>primaryDS</Arg>
            <Arg>
                  <!-- i.e. Postgress   -->
                  <New class="org.postgresql.ds.PGSimpleDataSource">
                        <Set name="User">myuser</Set>
                        <Set name="Password">password</Set>
                        <Set name="DatabaseName">database</Set>
                        <Set name="ServerName">database.stackoverflow.com</Set>
                        <Set name="PortNumber">5432</Set>
                  </New>
            </Arg>
      </New>
      <!-- BACKUP DATABASE      
      <New id="devDS" class="org.eclipse.jetty.plus.jndi.Resource">         
      <Arg>backupDS</Arg>       
      <Arg>             
            .....       
      </Arg>    
        -->
</Configure>