1

JSPアクションタグのscope属性がどのように機能するかを正確に理解しようとしています。jsp:useBean私の理解scopeでは、Bean の場所 (リクエスト、セッション、アプリケーションなど) を示すために使用されますが、いくつかのテストの後、そうではない興味深い状況に遭遇しました。次の JSP コードを検討してください (ここではスクリプトレットを使用しています)。簡単にするために):

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"  import="package2JSP.User" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Title</title>
</head>

<body>
    <%
        User user1 = new User("id1","name1");
        User user2 = new User("id2","name2");
        request.setAttribute("user", user1);
        session.setAttribute("user", user2);
    %>
    <%-- Here I expect to create user bean that represents user2 from session scope--%>
    <jsp:useBean id="user" class="package2JSP.User" scope="session"/>

    <%-- Here I expect user name to be name2 but it is name1 instead--%>
    <jsp:getProperty property="name" name="user"/>
</body>
</html>

したがって、基本的にここでは2つのユーザーオブジェクトを作成し、それらをリクエストスコープとセッションスコープで「ユーザー」属性として設定しました。「セッション」スコープから「ユーザー」を取得しようとするとjsp:useBean、「リクエスト」スコープから「ユーザー」が取得されたように見えます.

なぜそうなったのか説明してもらえますか?jsp:useBeanまた、指定されたスコープから属性を通常選択するのではなく、このように機能させる開発上の理由は何でしたか?それには何か利点がありますか?

これで、JSTL/EL を使用して必要な値を取得できることがわかりました。つまり<c:out value="${sessionScope.user.name}" />、どのように機能するかを知りたいだけですjsp:useBean

4

1 に答える 1