私はjspとサーブレットが初めてです。私のシナリオは次のとおりです
フォームを含むjspページがあります。2 つのフィールドを持つ。jsp ページのコード スニペットは次のとおりです。
MyFirstJSP.jsp ファイル
<body>
<h1> This is my first jsp and servlet project</h1>
<%
//System.out.println(request.getAttribute("fname"));
if(request.getAttribute("fname")!=null){
System.out.println(request.getAttribute("fname"));
}else{
System.out.println("No request ");
}
%>
<form action="MyFirstServlet" method="get">
First Name<input type="text" name="fname" value= ${fname}><br>
Last Name<input type="text" name="lname" value= ${lname}>
<input type="submit" value="Send">
</form>
</body>
このフォームを送信すると、ユーザーが入力した名をチェックする MyFirstServlet が呼び出されます。最初の名前が「abc」と等しい場合、サーブレットは属性を要求オブジェクトに設定し、それを呼び出し元の jsp ページ、つまり上記のページにリダイレクトします。request オブジェクトから値を取得し、フォームのそれぞれのフィールドに入力します。私も同じ効果のために Java 式言語を持っています。
MyFirstServlet.java サーブレット ファイルのコード スニペットを次に示します。
/**
* Servlet implementation class MyFirstServlet
*/
public class MyFirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyFirstServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub
String firstname=request.getParameter("fname");
if(firstname.equalsIgnoreCase("abc")){
System.out.println("Setting attributes");
request.setAttribute("fname",firstname);
request.setAttribute("lname",request.getParameter("lname"));
response.sendRedirect("MyFirstJSP.jsp");
}else{
System.out.Println("No problem");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter p=response.getWriter();
p.println("Success!");
doGet(request,response);
}
}
しかし、コードを実行すると、サーブレットは jsp ページにリダイレクトされますが、フォーム フィールドにそれぞれの値が入力されません。原因を見つけるために、if-else-block を追加して原因を調べましたが、ここではリクエスト オブジェクト属性が利用できないことがわかりました。
この場合にリクエストディスパッチャーを使用すると、値が利用可能になり、フォームに値が入力されますが、アドレスバーの URL は変更されず、常にサーブレットに URL が表示されます。
だから私のクエリは
**1) sendRedirect を使用してリクエスト オブジェクトを jsp ページで使用できないのはなぜですか。
2)ユーザーがフォームにデータを再入力する必要がないように、サーブレットが呼び出し元のjspにリダイレクトする場合、ユーザーが入力した値が事前に入力されたフォームをjspページに表示する他の方法はありますか.**
この問題で友達を案内してください ありがとう!