Калитка на собственно написанном Java-сервере - PullRequest
0 голосов
/ 11 июня 2009

Привет, у меня есть калитка, а также вопрос, связанный с сервером:

Мы создали небольшой сервер с Java (да, я знаю, зачем заново изобретать колесо ... Я получил это, когда задал вопрос в списке рассылки wicket) .... так что давайте просто скажем, это отчаянно необходимо, б / к ... эм ... Я до сих пор не могу придумать вескую причину, но я ничего не могу с этим поделать ... поэтому я наконец-то получил этот маленький сервер для запуска сервлетов ... насколько я знаю, для запуска wicket вам нужен сервер, который может запускать сервлеты ... (что касается моего отсутствия английского, давайте просто скажем: это должен быть контейнер сервлетов, как tomcat) ... теперь У меня есть этот очень красивый сервер, кто-нибудь знает, что мне делать, чтобы на нем работали мои приложения-калитки? как мне сообщить моему серверу, что на нем должно быть запущено приложение wicket?

Надеюсь, я все хорошо объяснил ... спасибо заранее:)

... дг


Хорошо, маленький источник ... Я сделал это после урока:

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
}

Теперь ServletProcessor:

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());
 }

}
}

1 Ответ

3 голосов
/ 11 июня 2009

простой ответ - вам нужно реализовать Servlet API . В документации по калитке не указано, какая именно версия требуется, но я уверен, что она будет как минимум 2.4. Не та работа, которую я бы порекомендовал вам делать, это трудно сделать правильно, и вы просто открываете себя миру боли.

Если вам нужно встроить сервер, то я могу порекомендовать вам начать с jetty и настроить его так, чтобы он соответствовал вашим требованиям. Jetty имеет весьма разрешительную лицензию, поэтому вам не нужно беспокоиться об использовании в коммерческих продуктах, и вы можете масштабировать ее с лучшими из них.

...