【发布时间】:2017-02-09 07:20:14
【问题描述】:
我想部署一个带有嵌入式 Jetty 服务器的 Java Netbeans Webapp;服务器本身可以工作,但我总是收到以下错误:
我在网上搜索了大量示例,配置并重新配置了我的 web.xml;虽然我的配置看起来不错,但我无法让它工作。
我应该指出,当我使用内置 Glassfish 服务器从 Netbeans 运行应用程序时,它运行良好,这告诉我 web.xml 可能配置良好。
有人可以帮忙吗?
我的代码如下。
P.S.我知道有人在 SO 上问过这个问题,但这些例子对我也不起作用。
项目结构:
WebContext 设置:
import org.eclipse.jetty.webapp.WebAppContext;
public class AppContextBuilder {
private WebAppContext webAppContext;
public WebAppContext buildWebAppContext() {
webAppContext = new WebAppContext();
webAppContext.setDescriptor(webAppContext + "/WEB-INF/web.xml");
webAppContext.setResourceBase("src/main/webapp");
webAppContext.setContextPath("/Holmes");
return webAppContext;
}
}
JettyServer.java:
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
public class JettyServer {
private Server server;
public JettyServer() {
this(8585);
}
public JettyServer(Integer runningPort) {
server = new Server(runningPort);
}
public void setHandler(ContextHandlerCollection contexts) {
server.setHandler(contexts);
}
public void start() throws Exception {
server.start();
}
public void stop() throws Exception {
server.stop();
server.join();
}
public boolean isStarted() {
return server.isStarted();
}
public boolean isStopped() {
return server.isStopped();
}
}
Deploy.java(主要方法):
import org.apache.log4j.Logger;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
/**
*
* @author Motty Waldner <motty@timeworksny.com>
*/
public class Deploy {
private final static Logger log = Logger.getLogger(Deploy.class);
static JettyServer jettyServer = new JettyServer();
public static void main(String[] args) throws Exception {
// add hook to stop server upon service termination
// (service calls System.exit(0) upon termination,
// so it should work under normal circumstances)
addShutdownHook();
ContextHandlerCollection contexts = new ContextHandlerCollection();
Handler[] handlers = new Handler[]{new AppContextBuilder().buildWebAppContext().getHandler()};
contexts.setHandlers(handlers);
jettyServer = new JettyServer();
try {
jettyServer.start();
} catch (Exception e) {
log.error("Error Starting Jetty Server", e);
}
}
private static void addShutdownHook() {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
try {
jettyServer.stop();
log.info("Shutdown Hook is running: Jetty Server instance being stopped.");
} catch (Exception e) {
log.error("error", e);
}
log.info("Application Terminating ...");
}
});
}
}
Web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" 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">
<display-name>Test App</display-name>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name> struts2 </filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>120</session-timeout>
</session-config>
<servlet-mapping>
<servlet-name>StrutsController</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
提前感谢您的帮助!
【问题讨论】:
-
URL 末尾多余的斜杠会不会导致这个错误?我看到浏览器中的 URL 以斜杠 (.../Holmes/) 结尾,但您安装的资源没有尾部斜杠:webAppContext.setContextPath("/Holmes")
标签: java http-status-code-404 embedded-jetty