在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("W00w I totally work
"); writer.println(" "); writer.println(" "); 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 )等工具进行文件比较