我是 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 Expression 语言以获得相同的效果。
这是我的 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 不会更改,并且始终将 url 显示给 servlet。
所以我的查询是
**1) 为什么请求对象对使用 sendRedirect 的 jsp 页面不可用。
2)如果servlet发送重定向到调用jsp,是否有任何其他方式在jsp页面中显示我的表单,预先填充用户输入的值,以便用户无需重新输入数据到表单中。**
请有这个问题的朋友指导一下 谢谢!