サーブレットからjspに変数を渡すにはどうすればよいですか? setAttribute
およびgetAttribute
は私には機能しませんでした:-(
要求をjspに転送する前に、すべての値を応答オブジェクトに設定できます。または、値をセッションBeanに入れて、jspでアクセスできます。
次の場合に機能しません。
response.sendRedirect("page.jsp")
によって、応答を新しい要求にリダイレクトしています。もちろん、新しく作成されたリクエストオブジェクトには属性が含まれなくなり、リダイレクトされたJSPでアクセスできなくなります。リダイレクトではなく転送する必要があります。例えば。
request.setAttribute("name", "value");
request.getRequestDispatcher("page.jsp").forward(request, response);
間違った方法でアクセスしている、または間違った名前を使用しています。名前"name"
を使用して設定したとすると、次のようにforwardedJSPページでアクセスできるはずです。
${name}
私が見つけた簡単な方法は、
サーブレット内:
以下のように値を設定してJSPに転送できます
req.setAttribute("myname",login);
req.getRequestDispatcher("welcome.jsp").forward(req, resp);
Welcome.jspでは、値を取得できます
.<%String name = (String)request.getAttribute("myname"); %>
<%= name%>
(または)直接uを呼び出すことができます
<%= request.getAttribute("myname") %>.
つかいます
request.setAttribute( "attributeName");
その後
getServletContext()。getRequestDispatcher( "/ file.jsp")。forward();
その後、JSPでアクセス可能になります。
サイドノートとして-jspではJavaコードの使用を避けてください。 JSTLを使用します。
attributeを使用して情報をサーブレットからJSPページに渡すほか、parameterを渡すこともできます。これは、問題のJSPページを指定するURLにリダイレクトし、通常のURL経由のパラメーター受け渡しメカニズムを追加するだけで実行されます。
例。サーブレットコードの関連部分:
protected void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException
{
response.setContentType( "text/html" );
// processing the request not shown...
//
// here we decide to send the value "bar" in parameter
// "foo" to the JSP page example.jsp:
response.sendRedirect( "example.jsp?foo=bar" );
}
JSPページの関連部分example.jsp
:
<%
String fooParameter = request.getParameter( "foo" );
if ( fooParameter == null )
{
%>
<p>No parameter foo given to this page.</p>
<%
}
else
{
%>
<p>The value of parameter foo is <%= fooParameter.toString() %>.</p>
<%
}
%>
これは、文字列変数aを含むサーブレットコードです。 aの値は、フォームを含むHTMLページから取得します。次に、変数を要求オブジェクトに設定します。次に、forward
およびrequestdispatcher
メソッドを使用してjspに渡します。
String a=req.getParameter("username");
req.setAttribute("name", a);
RequestDispatcher rd=req.getRequestDispatcher("/login.jsp");
rd.forward(req, resp);
jspでは、プログラムで以下に示すこれらの手順に従います
<%String name=(String)request.getAttribute("name");
out.print("your name"+name);%>
RequestDispacherを使用して、必要なjspページとともにデータを渡すこともできます。
request.setAttribute("MyData", data);
RequestDispatcher rd = request.getRequestDispatcher("page.jsp");
rd.forward(request, response);
setAttribute
でgetRequestDispatcher
およびdoGet
を使用する場合は、サーブレットに定義されたurlPatterns(たとえば「/ login」)でページにアクセスしていることを確認してください。 「/login.jsp」でこれを行うと、doGet
が呼び出されないため、どの属性も使用できなくなります。
Action、Actionforwardを使用してビジネスロジックを処理し、次のページを表示する場合は、リダイレクトが呼び出されるかどうかを確認してください。他の多くの人が指摘したように、リダイレクトは基本的に指定されたパスへの新しいリクエストを強制するため、元のリクエストを保持しません。したがって、requestdispatchの代わりにリダイレクトを使用すると、元のリクエストで設定された値は失われます。