【问题标题】:In a JSP file how to access Servlet of another project using Request dispatcher在 JSP 文件中如何使用 Request dispatcher 访问另一个项目的 Servlet
【发布时间】:2017-03-31 20:20:43
【问题描述】:

我有两个项目(Project1、Project2)。 Project1 包含一个jsp 页面“index.jsp”,Project2 包含一个servlet“HelloServlet”。 从jsp页面我试图转发/包含“HelloServlet”。下面是代码..

index.jsp

<body>
<a href="/Project2/HelloServlet">Goto project2 servlet</a><!--This works Fine-->
<%
try{RequestDispatcher=null;
rd = request.getRequestDispatcher("../Project2/HelloServlet");//gives -> java.lang.NullPointerException
//rd = request.getRequestDispatcher("/Project2/HelloServlet");//gives -> The requested resource (/Project1/Project2/HelloServlet) is not available 
//rd.forward(request,response);
rd.include(request,response);
}
catch(Exception e){out.println("Exception occured: "+e);}
%>
</body>

HelloServlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("Hello from project 2 servlet");
}

anchor 标记工作正常,但 RequestDispatcher 给出空指针异常。

【问题讨论】:

    标签: jsp servlets


    【解决方案1】:

    不幸的是,这是根据 Servlet 规范强制执行的。 ServletRequest.getRequestDispacher 的 Javadoc 对此很清楚(强调我的):

    RequestDispatcher getRequestDispatcher(字符串路径)

    ...指定的路径名​​可能是相对的,尽管它不能扩展到当前 servlet 上下文之外。

    由于转发在内部调用该方法,因此您无法转发到其他应用程序的页面。您必须在此处进行重定向。重定向将起作用,因为您将新 URL 发送到浏览器,要求它去那里。这里可能是:

    <body>
        <c:redirect url="/Project2/HelloServlet"/>
    </body>
    

    使用漂亮干净的 JSTL 标记而不是 scriptlet。

    如果由于某种原因你不能使用 JSTL,这个 scriptlet 也一样(但是 JSTL 更短更好):

    <body>
        <%
            response.sendRedirect("/Project2/HelloServlet");
        %>
    </body>
    

    【讨论】:

    • 但使用重定向我无法在 HelloServlet 中获得相同的请求对象
    • @SushilSharma:我知道转发和重定向是不同的。由于您不能在不同的应用程序之间使用转发,我只是建议在合适的情况下进行重定向。但是您可以在重定向的 URL 中传递参数,这些参数将由 servlet sendRedirect("/Project2/HelloServlet?param1=a&amp;param2=b") 处理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多