我是一个新手,对jsp和servlet不熟悉。我的情况如下:
我有一个包含两个字段的表单的jsp页面。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”,则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块以了解原因,并得知该请求对象属性在此处不可用。
如果在这种情况下使用请求分派程序,则可以使用值,表单将使用这些值填充,但地址栏中的url不会更改,并始终显示指向servlet的url。
所以我的问题是:
1)为什么使用sendRedirect时,请求对象对jsp页面不可用。
2)如果servlet sendredirects到调用jsp,则是否有其他方法在jsp页面上显示预填充的用户输入值,以便用户无需重新输入数据到表单中。
请在此问题中指导我吧。
谢谢!