2016-11-17 2 views
0

Ich habe zwei Projekt (Project1, Project2). Project1 enthält eine JSP-Seite "index.jsp" und Project2 enthält ein Servlet "HelloServlet". Von JSP-Seite versuche ich "HelloServlet" weiterzuleiten/einzubeziehen. Unten ist der Code ..In einer JSP-Datei wie auf Servlet eines anderen Projekts mit Request Dispatcher zugreifen

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"); 
} 

Anker-Tag funktioniert gut, aber Request gibt Null-Zeiger-Ausnahme.

Antwort

0

Leider ist dies gemäß der Servlet-Spezifikation vorgeschrieben. Die Javadoc ServletRequest.getRequestDispacher ist klar, dass (betonen mir):

Request getRequestDispatcher (String path)

... Der Pfadname angegeben relativ sein kann, obwohl es nicht außerhalb des aktuellen Servletkontext erstrecken kann .

Da ein Forward intern diese Methode aufruft, können Sie nicht auf eine Seite einer anderen Anwendung weiterleiten. Sie müssen hier eine Umleitung machen. Die Umleitung wird funktionieren, da Sie die neue URL an den Browser senden und sie auffordern, dorthin zu gehen. Hier könnte es sein:

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

mit einem schönen und sauberen JSTL-Tag anstelle eines Scriptlet.

Wenn aus irgendeinem Grund nicht JSTL verwenden, diese scriptlet auf die gleiche würde (aber JSTL ist kürzer und schöner):

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

aber ich mit umleiten kann nicht die gleiche Anfrage Objekt in HelloServlet –

+0

@SushilSharma erhalten : Ich weiß, dass Weiterleiten und Weiterleiten unterschiedlich sind. Da du zwischen verschiedenen Apps nicht weiterleiten kannst, habe ich nur eine Weiterleitung vorgeschlagen, wenn es angemessen ist. Sie könnten jedoch Parameter in der umgeleiteten URL übergeben, die vom Servlet 'sendRedirect ("/Project2/HelloServlet? Param1 = a & param2 = b ") verarbeitet würde' ' –

Verwandte Themen