2016-11-17 7 views
0

2つのプロジェクト(Project1、Project2)があります。 Project1にはjspページ "index.jsp"があり、Project2にはサーブレット "HelloServlet"が含まれています。 jspページから "HelloServlet"を転送/インクルードしようとしています。以下のコード..JSPファイルでは、リクエストディスパッチャを使用して別のプロジェクトのサーブレットにアクセスする方法

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

アンカータグが正常に動作しますが、するRequestDispatcherは、nullポインタ例外を与えています。

答えて

0

残念ながら、これはサーブレットの仕様に従って必須です。 ServletRequest.getRequestDispacherのJavadocは、(私を強調する)ことで明らかである:

するRequestDispatcher getRequestDispatcher(文字列のパス)は、それが現在のサーブレット・コンテキスト外側に延びることができないが

...指定されたパス名は、相対的であってもよいです。

転送は内部的にこのメソッドを呼び出すため、別のアプリケーションのページに転送することはできません。ここでリダイレクトする必要があります。リダイレクトはブラウザに新しいURLを送信してそこに行くことを要求するため機能します。

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

スクリプトレットの代わりにきれいでクリーンなJSTLタグを使用することができます。

同じに

何らかの理由であなたはJSTLを使用できない場合は、このスクリプトレットは、だろう(ただし、JSTLは短く、よりよいです):

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

しかしHelloServlet –

+0

@SushilSharmaで利用可能な同じリクエストオブジェクトを取得することができない私をリダイレクト使用私はフォワードとリダイレクトが異なることを知っています。異なるアプリ間で転送することはできないので、適切であればリダイレクトを提案しました。しかし、サーブレット 'sendRedirect("/Project2/HelloServlet?param1 = a&param2 = b ")'によって処理されるリダイレクトされたURLにパラメータを渡すことができます –

関連する問題