栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从Servlet使用sendRedirect时,jsp页面中的请求属性不可用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从Servlet使用sendRedirect时,jsp页面中的请求属性不可用

您需要 转发 到服务器端的jsp页面,因为 重定向
是客户端操作(请检出位置标头1),请求属性会丢失。

更换

response.sendRedirect("MyFirstJSP.jsp");

request.getRequestDispatcher("MyFirstJSP.jsp").forward(request, response);

编辑:对不起,我跳过了这一部分

如果在这种情况下使用请求分配器,则可以使用这些值,并且使用这些值填充表单,但是地址栏中的url不会改变,并且始终显示servlet的url。

但是,重定向时您不能将请求属性传递给您的jsp(因为上面已经提到过,这是一个客户端操作)

我建议您执行以下操作:

  • 实现doGet仅用于呈现包含表单的页面
  • 实现doPost以处理提交的表单数据
  • 在HTML表单中使用POST而不是GET提交表单

在doGet和doPost中,都使用 forward 呈现* .jsp页面。

GET / MyFirstServlet->转发到MyFirstJSP.jsp

POST / MyFirstServlet->转发到MyFirstJSP.jsp

这是最常用和最清洁的方法。

编辑2:简单的例子

SimpleFormServlet.java

public class SimpleFormServlet extends HttpServlet {private static final long serialVersionUID = 1L;private static final String VIEW_NAME = "/WEB-INF/jsp/simpleForm.jsp";private static final String MODEL_NAME = "form";public SimpleFormServlet() {    super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    request.setAttribute(MODEL_NAME, new SimpleForm());    request.getRequestDispatcher(VIEW_NAME).forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    final SimpleForm form = map(request);    if(form.getfName().equalsIgnoreCase("abc")){        request.setAttribute(MODEL_NAME, form);        // put additional attributes on the request        // e.g. validation errors,...        request.getRequestDispatcher(VIEW_NAME).forward(request, response);    }else{        System.out.println("No problem");        response.sendRedirect("/SuccessServlet");    }}private SimpleForm map(final HttpServletRequest request) {    SimpleForm form = new SimpleForm();    form.setfName(request.getParameter("fName"));    form.setlName(request.getParameter("lName"));    return form;}public static class SimpleForm implements Serializable {    private static final long serialVersionUID = -2756917543012439177L;    private String fName;    private String lName;    public String getfName() {        return fName;    }    public void setfName(String fName) {        this.fName = fName;    }    public String getlName() {        return lName;    }    public void setlName(String lName) {        this.lName = lName;    }}}

/WEB-INF/jsp/simpleForm.jsp

<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></head><body><form method="POST">    First Name<input type="text" name="fName" value="${form.fName}"><br>    Last Name<input type="text" name="lName" value="${form.lName}">    <input type="submit" value="Send"></form></body></html>
  1. GET / SimpleFormServlet
  2. doGet()准备表单模型(SimpleForm)并将其添加为名为“ form”的请求属性
  3. 转发到simpleForm.jsp
  4. 访问模型值并预填写以下表单:$ {form.fName}和$ {form.lName}
  5. 浏览器仍显示/ SimpleFormServlet(我们喜欢它;-))
  6. POST 形式相对到/ SimpleFormSerlvet(你没有明确设置表单元素的action属性)
  7. doPost()将请求参数映射到SimpleForm。
  8. 处理请求并执行您想做的任何事情(验证)
  9. 那么您可以转发到simpleForm.jsp(例如当验证失败时)或 重定向 到另一个Servlet(例如,/ SuccessServlet)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号