Встроенный Jetty: JSP и сервлеты вместе?

У меня есть приложение со встроенным Jetty 6.1.26. Сервлет 2.5. Ниже приведена конфигурация моего сервера.

Проблема в том, что когда я пытаюсь объединить JSP и сервлеты, это не работает. У меня работает либо один, либо другой, в зависимости от того, есть ли у меня server.addHandler() или server.setHandler() в приведенном ниже коде.

Под «не работает» я подразумеваю, что Jetty возвращает 404, но в остальном все выглядит нормально, даже журнал Jetty показывает, что конфигурация прошла нормально — см. http://pastebin.com/PzbEx0qc (это было с addHandler(), JSP не работал).

Запрошенные URL-адреса:
http://localhost:17283/jars?mvnPath=... и
http://localhost:17283/jsp/index.jsp .

Спасибо, Ондра

Server server = new Server( PORT );
Context ctx = new Context( server, "/", Context.NO_SECURITY | Context.SESSIONS );


final String WEBAPP_RESOURCES_PATH = "org/jboss/qa/mavenhoe/web/jsp";
final String JSP_CONTEXT_PATH = "/jsp";

// For localhost:port/jsp/index.html and whatever else is in the directory...
final URL warUrl = this.getClass().getClassLoader().getResource(WEBAPP_RESOURCES_PATH);
final String warUrlString = warUrl.toExternalForm();
    WebAppContext webAppContext = new WebAppContext(warUrlString, JSP_CONTEXT_PATH);
webAppContext.setAttribute("jarIndex", jarIndex);
server.addHandler( webAppContext );


// .jar's download.
final ServletHolder mavenhoeSH = new ServletHolder(new JarFinderServlet(this.jarIndex));
ctx.addServlet( mavenhoeSH, "/jars" );


final ServletHolder shutdownSH = new ServletHolder(new JettyShutdownServlet( server ));
shutdownSH.checkServletType();
ctx.addServlet( shutdownSH, "/shutdown" );

person Ondra Žižka    schedule 13.11.2010    source источник


Ответы (1)


Каждый компонент пути должен обрабатываться своим собственным контекстом, и убедитесь, что вы используете ContextHandlerCollection для нескольких контекстов.

ContextHandlerCollection contexts = new ContextHandlerCollection();

contexts.setHandlers(new Handler[] { jspContext, servletContext });

server.setHandler(contexts);
person Lirm    schedule 06.07.2011