あなたの問題に関しては、昔ながらのスクリプトレットを使用してローカルで宣言したものは、jsp:useBean
. また、ローカル スクリプトレット変数を宣言しても、含まれているページには表示されないため、少なくともリクエスト スコープに明示的に配置する必要があります。スクリプトレットの使用は悪い習慣です。私はそれをまったく忘れることをお勧めします。
特定のケースでは、データを保持するための実際のJava Bean を作成するだけです。つまり、(暗黙の) デフォルト コンストラクターと、パブリック ゲッター/セッターによって公開されるプライベート プロパティを持つクラスです。基本的な例を次に示します。
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
その後、サーブレット クラスを使用してリクエストを前処理できます。これにはサーブレットのdoGet()
メソッドを使用できます。
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
User user = new User();
user.setName("Jitendra");
request.setAttribute("user", user); // Store in request scope.
request.getRequestDispatcher("/WEB-INF/show.jsp").forward(request, response);
}
このサーブレットをたとえばweb.xml
にマップします。その後、このサーブレットにアクセスできるようになり、すぐに実行されます。url-pattern
/show
http://example.com/context/show
doGet()
show.jsp
次に、次の行を使用して、直接アクセスを防止するために配置する JSP ファイルを変更/作成し/WEB-INF
ます (これにより、クライアントはそれにアクセスできなくなりますがhttp://example.com/context/show.jsp
、サーブレットを呼び出すことを「強制」されます)。
<p>User name: ${user.name}</p>
は${user}
、任意の request/session/application 属性 key に関連付けられているオブジェクトを指しますuser
。これは舞台裏で行われjspContext.findAttribute("user")
ます。返されたUser
インスタンスは javabean 仕様に準拠しているため、 はインスタンスでメソッド${user.name}
を呼び出し、EL はその結果を表示します。getName()
User
追加する必要がありますが、サーブレットは既に目的の Bean を作成してスコープに配置しているため、これは必要ありません。jsp:useBean
とはいえ、まともな JSP/サーブレットのチュートリアル/本から始めることをお勧めします。例:
お役に立てれば。