0

我想将 servlet (MyServlet.java) 的 URL 传递给 java 类 (Test.java)。Test.java 位于 WEB-INF 文件夹 lib 中的 Project.jar 中。所以我试图将 Servlet 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;
        }    
    }

在部署之后是 var 的值仍然为空。

我究竟做错了什么?以及如何将 MyServlet.java 的 URL 写入 Test.java 的 var 中?

4

1 回答 1

0

我认为这setServleturl()实际上是setVar(),因为它不会编译。

当然部署后为空。processRequest()仅在处理请求时调用。向您的 servlet 发出 HTTP 请求,代码将被执行。

也就是说,你所拥有的似乎是一个非常糟糕的主意,而且它不是线程安全的(setVar()并且getVar()应该是同步的)。此外,这些方法应该使用Test.setVar(),而不是调用new Test().setVar(),因为它们是静态方法。你想达到什么目的?

编辑:似乎问题是在部署时从 WEB-INF 读取文件。为此,请使用ServletContextListener,并在其contextInitialized()方法中从事件中获取 servlet 上下文,然后调用servletContext.getResourceAsStream("/WEB-INF/theFileToLoad").

于 2012-12-14T13:52:08.313 回答