2

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

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

HTTP ERROR 500

Problem accessing /. Reason:

    jregex/Pattern

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

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

Arch Linux 和 Mac OS X 10.7 都发生了这种情况

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

有时我也会得到:

HTTP ERROR: 503

Problem accessing /. Reason:

    SERVICE_UNAVAILABLE
4

4 回答 4

2

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

<dependencies>
        <!-- Jetty dependencies -->
        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-embedded</artifactId>
            <version>6.1.26</version>
        </dependency>
    </dependencies>

    <build>
    <plugins>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>7.0.2.v20100331</version>
            <configuration>
                <webAppConfig>
                    <contextPath>/jetty-example</contextPath>
                    <descriptor>${basedir}/src/main/webapp/WEB-INF/web.xml</descriptor>
                </webAppConfig>
                <scanIntervalSeconds>5</scanIntervalSeconds>
                <stopPort>9966</stopPort>
                <stopKey>foo</stopKey>
                <connectors>
                    <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                        <port>9080</port>
                        <maxIdleTime>60000</maxIdleTime>
                    </connector>
                </connectors>
            </configuration>
        </plugin>
    </plugins>
    </build>

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

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <display-name>HelloWorld Application</display-name>
    <description>
       lalala
    </description>

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.mypackage.jetty.Hello</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

</web-app>

和 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("<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>");
    }
} 

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

此外,您可以将执行添加到插件部分并在完成构建项目时启动码头。无需mvn jetty:run每次手动操作。

<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您可以像这样在您的码头插件中添加文件位置:

<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>

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>

你应该对此很好。

于 2012-05-15T22:08:53.893 回答
1

我将从比较您更改ear. 这应该会引导您找到已更改的 jar 文件。假设一切都是开源的,从 maven repo 下载源代码并进行比较。\warpom.xml

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

尝试将 JRegex 添加到您的依赖项中,看看会发生什么。(请注意,如果您正在生产并且赶时间,这可能是一种解决方法)

于 2012-05-17T10:35:58.847 回答
0

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

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

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

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

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

于 2012-05-15T20:09:34.870 回答
0

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

于 2012-05-18T14:34:41.933 回答