我的servlet运行正常,直到几天前。但我唯一改变的是我用于maven的nexus repo。我正在通过mvn jetty运行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
答案 0 :(得分: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
此外,您可以在插件中添加执行,并在构建项目时启动jetty。无需每次都手动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>
您还可以添加我用于数据库(适用于不同环境)的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>
示例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>
你应该对此很好。
答案 1 :(得分:1)
我首先要比较您更改ear
之前和之后创建的war
/ pom.xml
文件。这应该会引导您更改jar文件。承担一切是开源的,从maven repo下载源代码并进行比较。 \
编辑:JRegex是一个支持Perl regexp的java库。 也许更改maven repo会导致下载其他版本的依赖项,并且它们对JRegex有一些可选的依赖性。 (你应该能够检查一下)。
尝试将JRegex添加到您的依赖项中,看看会发生什么。 (请注意,如果您正在制作并且匆忙中,这应该是一种解决方法)
答案 2 :(得分:0)
您正在运行的mvn命令是什么?您是否尝试手动下载工件并在本地工件上运行mvn?
我首先使用mvn下载工件。这将验证您的所有设置/权限设置是否正常且适当。为此,您可以使用Maven Dependency Plugin (v2.4)将依赖项下载到本地文件。有关详细信息,请参阅this post
一旦确保能够在本地下载工件,请尝试运行jetty:在本地工件上运行。如果有效,那么你知道你的回购有问题。
如果仍然无效,则可能是镜像设置或repo配置出现问题。例如,如果mvn需要一个本地没有的插件或依赖项,它将查看第三方存储库。您的settings.xml文件可能会镜像到本地nexus服务器的所有内容,但可能未配置为从MvnCentral下载。
确保您没有任何依赖/插件下载问题。您可以轻松地从settings.xml指向mvncentral并完全绕过您的nexus服务器。
答案 3 :(得分:0)
FWIW,您能否与BeyondCompare(Scooter Software)等工具进行文件比较