我想将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?
答案 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")
。