【问题标题】:embedded jetty server in a exploded war爆发战争中的嵌入式码头服务器
【发布时间】:2014-02-22 12:45:18
【问题描述】:

在成功通过码头运行 WAR 之后,我正在尝试将码头服务器嵌入到我的网络应用程序中。它是一个由 servlet 组成的普通 java 应用程序。我使用了爆炸的 WAR 目录(WARless)。

但我得到以下异常。

    2014-02-22 16:27:08.271:INFO:oejw.StandardDescriptorProcessor:NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
    2014-02-22 16:27:08.319:WARN:oejs.Holder:
    java.lang.ClassNotFoundException: ClientServlet
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:421)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
    at org.eclipse.jetty.util.Loader.loadClass(Loader.java:100)
    at org.eclipse.jetty.util.Loader.loadClass(Loader.java:79)
    at org.eclipse.jetty.servlet.Holder.doStart(Holder.java:107)
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:298)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
    at org.eclipse.jetty.server.Server.doStart(Server.java:282)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at com.jetty.RunJetty.main(RunJetty.java:24)
    2014-02-22 16:27:08.321:WARN:/:unavailable

嵌入式码头服务器代码

    package com.jetty;

    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.webapp.WebAppContext;

    public class RunJetty {

    public RunJetty() {
    }
    public static void main(String[] args) {
    Server server=new Server(8080);
    WebAppContext wac = new WebAppContext();
    wac.setResourceBase("C:/Users/User/j2ee/workspace/CLient1");
    wac.setDescriptor("C:/Users/User/j2ee/workspace/CLient1/WebContent/WEB-INF/web.xml");
    wac.setContextPath("/");
    wac.setParentLoaderPriority(true);
    server.setHandler(wac);
    try {
        server.start();
        server.join();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }

    }

Servlet 代码

    package com.jetty;

    import java.io.IOException;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.omg.CORBA.RepositoryIdHelper;

    public class ClientServlet extends HttpServlet {

    private static final long serialVersionUID = 8120079003868426157L;
    private String greeting="Hello World";

    public ClientServlet(){}
    public ClientServlet(String greeting)
    {
    this.greeting=greeting;
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
    response.setContentType("text/html");
    response.setStatus(HttpServletResponse.SC_OK);
    response.getWriter().println("<h1>"+greeting+"</h1>");

    }

    }

web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <display-name>kajh</display-name>

    <servlet>
    <description></description>
    <display-name>ClientServlet</display-name>
    <servlet-name>ClientServlet</servlet-name>
    <servlet-class>ClientServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>ClientServlet</servlet-name>
    <url-pattern>/ClientServlet</url-pattern>
    </servlet-mapping>
    </web-app>

另外,我想在我的 servlet 中使用 response.sendRedirect。类似的,

      public class ClientServlet extends HttpServlet {

/**
 * 
 */
private static final long serialVersionUID = 8120079003868426157L;
private String greeting="Hello World";

public ClientServlet(){}
public ClientServlet(String greeting)
{
    this.greeting=greeting;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    response.setContentType("text/html");
    response.sendRedirect("http://localhost:8080/CLient1/index.html");

}
}

请帮忙!我永远被困在这上面。 提前谢谢!

我还添加了我的应用程序的文件夹结构以便更好地理解

【问题讨论】:

  • 看起来 ClassServlet 不在您的类路径中?您是从 Eclipse 或命令行等 IDE 运行的吗?除此之外,这对于使用 Jetty 的 Java EE 来说可能是一个好的开始:github.com/jhannes/java-ee-turnkey
  • RunJetty 和 ClientServlet 在同一个包中。我正在使用 eclipse 来运行这个应用程序。你的意思是我将servlet作为一个单独的java应用程序并隐藏到一个jar中并放入RunJetty的类路径中?

标签: java servlets embedded-jetty contextpath


【解决方案1】:

我认为servlet-class应该是

<servlet-class>com.jetty.ClientServlet</servlet-class>

编辑:让它也显示代码格式。

【讨论】:

  • 是的 RunJetty 和 ClientServlet 在同一个包中。还是行不通!! :(
  • @ParulS 似乎没有包含代码格式化。我认为您必须根据答案编辑您的 web.xml
  • 我使用了 com.jetty.ClientServlet,现在我没有遇到任何异常。我仍然无法使用response.sendRedirect("http://localhost:8080/CLient1/index.html"); 在访问 URL localhost:8080/ClientServlet HTTP ERROR 404 访问 /CLient1/index.html 时出现以下异常。原因:未找到 Powered by Jetty:/
  • 我的问题中也包含了我的应用程序结构。您的帮助将不胜感激。谢谢。
  • 我认为现在有很多理由需要考虑。 1.你的resourceBase是错误的。它应该指向 Webcontent。 2. Clientl 不在您的 web.xml 网址中,并且可能不应该在。 3.也许一起删除servlet并使用web.xml xml标签welcome-list指向index.html
猜你喜欢
  • 1970-01-01
  • 2013-12-30
  • 2020-06-27
  • 2016-09-27
  • 2012-07-26
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
相关资源
最近更新 更多