2009-06-11 3 views
-1

는 yall를 이봐, 나는 wicket- 또한 서버 관련 질문이 있습니다. .. 내가 wicket-mailing-list에 관한 질문을했을 때 많이 얻었습니다.) .... 그래서 그냥 말하자면 필사적으로 필요합니다. b/c ... ehm ... 나는 아직도 생각할 수 없습니다. 좋은 이유가 있지만 내가 할 수있는 일이 많지 않아 ... 결국 서블릿을 실행하는이 작은 서버를 얻었습니다 ... 제가 아는 한, 서블릿을 실행할 수있는 서버가 필요합니다. (내 부족한 영어에 대해서는 단지 바람둥이와 같은 서블릿 컨테이너라고 가정 해 봅시다.)이 아주 아름다운 서버가 생겼으니 아무에게도 내가해야 할 일이 있다는 생각이 들었습니다. 그래서 내 개찰구가 -apps가 실행됩니까? 내 서버에 개찰 앱을 실행한다고 가정하려면 어떻게해야합니까? 내가 잘 설명개찰구는

희망 ... 사전 :

에서 thnx ... DG


확인, 약간의 소스 ... 내가 그랬어이 다음 자습서 :

는 "마법"발생하는 HttpServer 여기서

while (!shutdown) { 
    // ... all the stuff before 

    //check if this is a request for a servlet or a static resource 
    //a request for a servlet begins with "/servlet/" 
    if (request.getUri().startsWith("/servlet/")) { 
     System.out.println("SERVLET-REQUEST\n\n"); 
     ServletProcessor2 processor = new ServletProcessor2(); 
     processor.process(request, response); 
    } 
    else { 
     System.out.println("STATICRESOURCE-REQUEST"); 
     StaticResourceProcessor processor = new StaticResourceProcessor(); 
     processor.process(request, response); 
    } 
// ... all the stuff after 
} 

을 지금 ServletProcess을 나 :

public class ServletProcessor2 { 

public void process(Request request, Response response) { 

String uri = request.getUri(); 
String servletName = uri.substring(uri.lastIndexOf("/") + 1); 
System.out.println("SERVLETNAME ... " + servletName); 
URLClassLoader loader = null; 

try { 
    // create a URLClassLoader 
    URL[] urls = new URL[1]; 
    URLStreamHandler streamHandler = null; 
    File classPath = new File(Constants.WEB_ROOT); 
    // the forming of repository is taken from the createClassLoader method in 
    // org.apache.catalina.startup.ClassLoaderFactory 
    String repository = (new URL("file", null, classPath.getCanonicalPath() + File.separator)).toString() ; 
    System.out.println("REPOSITORY ... " + repository); 
    // the code for forming the URL is taken from the addRepository method in 
    // org.apache.catalina.loader.StandardClassLoader class. 
    urls[0] = new URL(null, repository, streamHandler); 
    loader = new URLClassLoader(urls); 
} 
catch (IOException e) { 
    System.out.println(e.toString()); 
} 
Class myClass = null; 
try { 
    myClass = loader.loadClass(servletName); 
} 
catch (ClassNotFoundException e) { 
    System.out.println("FEHLER: " + e.toString() + " ... CAUSE: " + e.getCause()); 
    e.printStackTrace(); 
} 

Servlet servlet = null; 
RequestFacade requestFacade = new RequestFacade(request); 
ResponseFacade responseFacade = new ResponseFacade(response); 
try { 
    servlet = (Servlet) myClass.newInstance(); 
    servlet.service((ServletRequest) requestFacade, (ServletResponse) responseFacade); 
} 
catch (Exception e) { 
    System.out.println("Fehler: " + e.toString() + " ... CAUSE: " + e.getCause()); 
    e.printStackTrace(); 
} 
catch (Throwable e) { 
    System.out.println(e.toString()); 
} 

} 
} 
+0

서버에 대해 어떻게 대답 할 수 있습니까? 서버에서 서블릿을 어떻게 실행합니까? –

답변

3

간단한 대답은 당신이 Servlet API를 구현해야한다는 것입니다. 개찰구 설명서는 정확히 필요한 버전이 무엇인지 말하지 않는 것 같지만 적어도 2.4는 될 것이라고 확신합니다. 제가하는 일을 권하고 싶지는 않습니다. 제대로하는 것이 어렵고 고통의 세계에 당신 자신을 열어 두는 것이 어렵습니다.

서버를 임베드해야하는 경우 jetty으로 시작하여 필요한 요구 사항을 충족하도록 사용자 정의하는 것이 좋습니다. Jetty는 매우 관대 한 라이센스를 가지고 있으므로 상용 제품에서 사용하는 것에 대해 걱정할 필요가 없으며 최상의 제품으로 확장 할 수 있습니다.

+0

제게 고마워, 고맙다는 생각이 들었다. 적어도 "쉽지 않은 일이지, 더 나은 일은하지 말라."- 슬픈 일이지만 ... 사실 ... 고마워요! – doro

+0

ServletRequest 프로세서를 살펴보면 ... servlet을 실행하고 service()를 호출하는 것보다 서블릿을 실행하는 것이 더 있습니다. 구현할 전체 서블릿 라이프 사이클이 있습니다. 그저 시작을위한 것입니다. –

+0

나는이 모든 서버 작업을 아무 것도 과소 평가하지 않는다는 것을 알아두면 좋을 것 같습니다. 단지 내 상사에게 설명 할 필요가 있습니다. * g * – doro