0
임베디드 Jetty 9.4.3.x 서버의 POC를 쓰고 있습니다. 여러 핸들러로 서버를 실행하면 첫 번째 핸들러 만 작동합니다. 코드에서 첫 번째 처리기로 '컨텍스트'가 있으면 hello 서블릿이 작동하고 jsp에 404 오류가 발생합니다. 첫 번째 처리기로 'webapp'가 있으면 jsp가 작동하고 서블릿에 404가 생깁니다. 여기에 코드가 있습니다. 내가 놓친 게 있니? Servlet 및 JSP 파일은 간단한 테스트 파일입니다. 필요한 경우 webdefault.xml 및 jetty.xml 파일을 추가 할 수 있습니다.임베디드 jetty 서버가 servlet과 webapp를 모두 실행하지 않습니다.
package com.easyask.server;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.xml.XmlConfiguration;
public class EasyAskServer {
private static String m_webdefaultXMLFileName = "etc/webdefault.xml";
public static void main(String[] args) {
Server server = new Server();
List<String> configurations = new ArrayList<String>();
configurations.add("etc/jetty.xml"); //$NON-NLS-1$
configurations.add("etc/jetty-http.xml"); //$NON-NLS-1$
configurations.add("etc/jetty-ssl.xml"); //$NON-NLS-1$
configurations.add("etc/jetty-ssl-context.xml"); //$NON-NLS-1$
configurations.add("etc/jetty-https.xml"); //$NON-NLS-1$
XmlConfiguration last = null;
List<Object> objects = new ArrayList<Object>();
try{
for (String configFile : configurations) {
InputStream configStream = null;
File xmlConfiguration = new File(configFile);
if (xmlConfiguration.exists()) {
configStream = new FileInputStream(xmlConfiguration);
}
XmlConfiguration configuration = new XmlConfiguration(configStream);
if (last != null) {
configuration.getIdMap().putAll(last.getIdMap());
}
objects.add(configuration.configure());
last = configuration;
}
}catch (Exception e){
e.printStackTrace();
}
server = (Server) objects.get(0);
ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.setResourceBase("com/easyask/server");
context.addServlet(HelloServlet.class, "/hello");
WebAppContext webapp = new WebAppContext();
webapp.setResourceBase("com/easyask/server");
webapp.setContextPath("/");
webapp.setExtractWAR(false);
webapp.setDefaultsDescriptor(m_webdefaultXMLFileName);
webapp.setAttribute("javax.servlet.context.tempdir", "tmp");
Configuration.ClassList classlist = Configuration.ClassList
.setServerDefault(server);
classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
classlist.addBefore(
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
"org.eclipse.jetty.annotations.AnnotationConfiguration");
webapp.setAttribute(
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$");
HandlerCollection handlers = new HandlerCollection();
handlers.addHandler(context);
handlers.addHandler(webapp);
server.setHandler(handlers);
try {
server.start();
server.dumpStdErr();
server.join();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}