#java #http-status-code-404 #embedded-jetty
#java #http-status-code-404 #встроенный-jetty
Вопрос:
Я хочу развернуть веб-приложение Java Netbeans со встроенным сервером Jetty; сам сервер работает, но я всегда получаю следующую ошибку:
Я просмотрел множество примеров в Интернете, настроил и перенастроил свой web.xml ; хотя моя конфигурация кажется прекрасной, я не могу заставить ее работать.
Я должен отметить, что когда я запускаю приложение с помощью Netbeans, используя встроенный сервер Glassfish, оно работает нормально, что говорит мне о том, что web.xml вероятно, он настроен хорошо.
Кто-нибудь может помочь с этим?
Мой код следует.
PS Я знаю, что об этом спрашивали на 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();
}
}
Развертывание.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>
Заранее спасибо за помощь!
Комментарии:
1. Может ли дополнительная косая черта в конце URL вызвать эту ошибку? Я вижу, что URL-адрес в браузере заканчивается косой чертой (…/Holmes/), но вы монтируете ресурс без завершающей косой черты: WebAppContext.setContextPath(«/Holmes»)
Ответ №1:
Доступны ли какие-либо журналы трассировки стека?
Без дополнительных журналов я могу только предположить, основываясь на опыте, что это может быть вызвано разрешением каталога, он отлично работал в вашей IDE, поскольку он может находить нужные файлы без каких-либо дополнительных настроек контекста, что может быть не так, когда вы выполняете реальное развертывание.
Ответ №2:
Возможно, шаблон URL неверен, попробуйте изменить на что-то вроде:
<servlet-mapping>
<servlet-name>StrutsController</servlet-name>
<url-pattern>*</url-pattern>
</servlet-mapping>
Ответ №3:
изменить с
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;
}
}
Для
public class AppContextBuilder {
private WebAppContext webAppContext;
public WebAppContext buildWebAppContext() {
webAppContext = new WebAppContext();
webAppContext.setDescriptor(webAppContext "/WEB-INF/web.xml");
webAppContext.setResourceBase(webAppContext);
webAppContext.setContextPath("/Holmes");
return webAppContext;
}
}
попробуйте это, дайте мне знать
Ответ №4:
Изменить
Handler[] handlers = new Handler[]{new AppContextBuilder().buildWebAppContext().getHandler()};
Для
Handler[] handlers = new Handler[]{new AppContextBuilder().buildWebAppContext()};
Комментарии:
1. Спасибо за ответ, но это не помогло.