如何将Servlet的URL传递给Java类?

时间:2012-12-14 13:37:52

标签: java-ee

我想将servlet的URL(MyServlet.java)传递给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;
        }    
    }

在Diployment之后,var的值仍为null。

我做错了什么? 如何从Test.java中的var中的MyServlet.java中编写URL?

1 个答案:

答案 0 :(得分:0)

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

当然,部署后它为null。只有在处理请求时才会调用processRequest()。向servlet发出HTTP请求,代码将被执行。

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

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