1

サーブレットが実行されているURLとポートを把握するためのメソッド呼び出しは何ですか?画面に印刷して、クライアントで使用して接続できるようにします。

url = new URL("trying to figure this out");

私はクライアントとサーバーの両方をローカルで実行しています。日食では、これは学校のプロジェクトです。

関連コード:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class ServerMain {

    public static void main(String[] args){
        Server server = new Server();
        ServletContextHandler context = 
                new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("Servlet");

        context.setResourceBase("etc/docroot");

        server.setHandler(context);
        context.addServlet(new ServletHolder(new MyServer()), "/game");
        DefaultServlet staticFileServlet = new DefaultServlet();
        context.addServlet(new ServletHolder(staticFileServlet), "/*");
        System.out.println("context: " +  context.getContextPath());
        //System.out.println("One valid Port = "
                  + context.getServer().getConnectors()[0].getPort());
        try {
            server.start();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
4

3 に答える 3

9

これを埋め込んで行っているので、いくつかのオプションがあります。

サーバーサーバー=新しいサーバー(8080);

これにより、ポート8080でサーバーが起動します。これは、必要な場合は問題ありませんが、単体テストでは、CIや並列テストが相互にトリップするなどの問題を回避するために、通常、これをランダムポートにする必要があります。

サーバーサーバー=新しいサーバー(0);

これにより、ランダムなポートでコネクタが起動しますが、そのポートを取得するにはどうすればよいですか?

server.getConnectors()[0] .getLocalPort();

ポートは実際にはコネクタから来ており、通常、ここで設定するコネクタは1つだけなので、これでそのポートを取得できます。

これで、localhostはテストでうまく機能しますが、コネクタが存在するホストの名前が必要な場合は、次のように使用できます。

server.getConnectors()[0] .getHost();

それを連鎖させると、Jetty自体でユニットテストのほとんどを実行し、サーバー自体を起動し、必要なハンドラーやWebアプリを接続して、動作、要求、応答などをアサートする方法がわかります。

ここにいくつかの埋め込み例があり、コード内でjettyを接続するさまざまな方法を調べることができます。また、jetty.xml形式はjava上のxmlの薄いレイヤーであるため、コードを介してjettyの起動を簡単にマッピングできます。 Javaハットをオンにしてxmlファイルを読み取る。構成をそこに保持したい場合は、そのxml形式に基づいて突堤をブートストラップするための埋め込み例もここにあります。

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded

桟橋の埋め込みに関する優れたページについては、こちらをご覧ください:http ://www.eclipse.org/jetty/documentation/current/embedding-jetty.html

于 2012-08-18T13:19:05.443 に答える
1

ほとんどの場合、jetty サーバーはデフォルトで 8080 で実行されています。そうでない場合は、ポート構成が何であるかを示すserver.xmlファイルを確認してください。

于 2012-08-17T22:59:43.220 に答える
0

ここで何を求めているのかわかりませんが、サーブレット、つまり Hello がある場合:

public final class Hello extends HttpServlet {

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
      throws IOException, ServletException {

        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();        
        writer.println("URL is " + request.getRequestURL() + " port is " request.getServerPort());
    }
} 

さらに、これがあなたが探している情報でない場合は、これを参照してください:

http://docs.oracle.com/javaee/1.4/api/javax/servlet/http/HttpServletRequest.html

http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/api/javax/servlet/http/HttpServletRequest.html

于 2012-08-17T22:57:36.447 に答える