自己書面によるJavaベースのサーバーのウィケット
質問
ちょっとヨール、私は改札とサーバー関連の質問を持っています:
私たちはJavaを使用して小さなサーバーを構築しました(ええ、私は知っています、なぜホイールを再発明しました... Wicket-Mailing-Listで質問をしたとき、私はそれをたくさん手に入れました)....必死に必要なb/c ...私の知る限り、ウィケットを実行するには、サーブレットを実行できるサーバーが必要です...(私の英語の不足については、Tomcatのようなサーブレットコンテナであるはずです)...この非常に美しいサーバー、誰かが私がしなければならないことを考えているのですか?ウィケットアプリを実行することになっていることをサーバーに伝えるにはどうすればよいですか?
私がそれをよく説明したことを願っています...事前に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
}
今、サーブレットプロセッサ:
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());
}
}
}
解決
簡単な答えは、あなたが実装する必要があるということです サーブレットAPI. 。ウィケットのドキュメントは、正確な必要なバージョンを言っているようには見えませんが、少なくとも2.4になると確信しています。私があなたがすることをお勧めする仕事ではありません、それは正しく行うのは難しいことであり、あなたはあなた自身を痛みの世界に開くだけです。
サーバーを埋め込む必要がある場合は、最初に始めることをお勧めします 桟橋 そして、あなたが持っている要件を満たすためにそれをカスタマイズします。 Jettyには非常に寛容なライセンスがあるため、商用製品での使用を心配する必要はなく、それらのベストを使用してほとんどスケーリングできます。