0

サーブレット (MyServlet.java) の URL を Java クラス (Test.java) に配信したいと考えています。Test.java は、WEB-INF のフォルダー lib 内の Project.jar にあります。だから私はサーブレットのURLをTest.javaに渡そうとしました



    import projct.Test;

    public class MyServlet extends HttpServlet {

        @Override
        public void init() throws ServletException {..}                

        @Override
        public void destroy() {..}

        @Override
        protected void doGet(HttpServletRequest request,
                HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }

        @Override
        protected void doPost(HttpServletRequest request,
                HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }

        protected void processRequest(HttpServletRequest request,
                HttpServletResponse response)
                throws ServletException, IOException {

             new Test().setServleturl(request.getRequestURL().toString());
             request.getRequestDispatcher("/index.html").forward(request, response);

        }
    }

Test.java クラスは次のようになります。



    public class Test {
        private static String var;

        public static String getVar() {
            return var;
        }

        public static void setVar(String var) {
            Test.var = var;
        }    
    }

Diployment の後、var の値は null のままです。

私は何を間違っていますか?また、Test.java の var に MyServlet.java の URL を書き込むにはどうすればよいでしょうか?

4

1 に答える 1

0

コンパイルされないためsetServleturl()、実際にはそうであると思います。setVar()

もちろん、展開後は null です。processRequest()リクエスト...が処理されるときにのみ呼び出されます。サーブレットに HTTP リクエストを送信すると、コードが実行されます。

とは言っても、あなたが持っているものは本当に悪い考えのようで、スレッドセーフではsetVar()ありgetVar()ません (同期する必要があります)。さらに、これらのメソッドは静的メソッドであるため、 ではTest.setVar()なくを使用して呼び出す必要があります。new Test().setVar()何を達成しようとしていますか?

編集:展開時にWEB-INFからファイルを読み取ることが問題のようです。これを行うには、ServletContextListenerを使用し、そのcontextInitialized()メソッドでイベントからサーブレット コンテキストを取得し、 を呼び出しますservletContext.getResourceAsStream("/WEB-INF/theFileToLoad")

于 2012-12-14T13:52:08.313 に答える