我是jsp和servlet的新手。我的情況如下從servlet使用sendRedirect時請求屬性在jsp頁面中不可用
我有一個jsp頁面,它有一個窗體。有兩個領域。 jsp頁面的代碼snipet如下。
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」,那麼servlet將該屬性設置爲請求對象並將其重定向到調用jsp頁面即上面的頁面。它將從請求對象中獲取值並將其填充到相應的表單字段中。 我也有相同的效果的Java表達式語言。
這裏是MyFirstServlet.java servlet的文件
/**
* 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);
}
}
我的一小段代碼片段但是,當我執行代碼的servlet重定向到JSP頁面,但不填充與相應值的表單字段。 至於找到原因,我添加了if-else-block來知道原因,並且我知道請求對象屬性在此處不可用。
如果我在這種情況下使用請求調度程序,那麼這些值將變得可用,表單將被填充值,但地址欄中的url不會變化,並始終向servlet顯示url。
所以我的查詢是
** 1)爲什麼請求對象不可用的sendRedirect jsp頁面。
2)是THRE任何其他的方式來顯示我在與用戶輸入的值預填充jsp頁面表單如果servlet sendredirects到調用JSP,使用戶不必重新輸入到表單中的數據。**
請指導我這個問題的朋友 謝謝!
閱讀BalusC的答案:http://stackoverflow.com/questions/2047122/requestdispatcher-interface-vs-sendredirect –