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

Servlet重定向到同一页面,并显示错误消息

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

Servlet重定向到同一页面,并显示错误消息

最常见和推荐的方案(用于Java脚本/ JSP世界中的服务器端验证)是将一些错误消息设置为 请求属性 (在 请求范围内
),然后使用表达式语言在JSP中输出此消息(请参见下面的示例)
)。未设置错误消息时-将不会显示任何内容。

但是,当在请求中存储错误消息时,应将 请求转发 到初始页面。重定向时,设置请求属性是不合适的,因为如果使用重定向,它将是一个 全新
请求,并且 请求之间的请求属性会重置

如果要将 请求重定向 到引荐页(从中提交数据 的请求 ),则可以在会话中(在 会话范围内 )存储错误消息,即设置 会话属性
。但是在这种情况下, 当提交的请求正确时 ,您还需要 从会话中删除该属性 ,因为否则,只要会话存在,就会出现错误消息。

至于 context属性, 它意味着整个Web应用程序( 应用程序范围
)和所有用户都可以使用,而且它的生存时间与Web应用程序的寿命一样长,这在您的情况下几乎没有用。如果将错误消息设置为应用程序属性,
则它对所有用户可见 ,而不仅对提交错误数据的 用户可见


好的,这是一个原始示例。

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"    version="3.0">    <display-name>Test application</display-name>    <servlet>        <servlet-name>Order Servlet</servlet-name>        <servlet-class>com.example.TestOrderServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>Order Servlet</servlet-name>        <url-pattern>/MakeOrder.do</url-pattern>    </servlet-mapping></web-app>

order.jsp

<!DOCTYPE html><html><head>    <title>Test Page</title>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>    <h1>Test page</h1>    <form action="MakeOrder.do" method="post">        <div >${errorMessage}</div>        <p>Enter amount: <input type="text" name="itemAmount" /></p>        <input type="submit" value="Submit Data" />    </form></body></html>

选项№1:将错误消息设置为请求属性

package com.example;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.ServletException;import java.io.IOException;public class TestOrderServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response)         throws ServletException, IOException {        int amount = 0;        try { amount = Integer.parseInt(request.getParameter("itemAmount"));        } catch (NumberFormatException e) { // do something or whatever        }        if ((amount > 0) && (amount < 100)) {   // an amount is OK request.getRequestDispatcher("/index.jsp").forward(request, response);        } else {          // invalid amount // Set some error message as a request attribute. if (amount <= 0) {     request.setAttribute("errorMessage", "Please submit an amount of at least 1"); }  if (amount > 100){     request.setAttribute("errorMessage", "Amount of items ordered is too big. No more than 100 is currently available."); } // get back to order.jsp page using forward request.getRequestDispatcher("/order.jsp").forward(request, response);        }    }}

选项№2:将错误消息设置为会话属性

TestOrderServlet.java

package com.example;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.ServletException;import java.io.IOException;public class TestOrderServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response)         throws ServletException, IOException {        int amount = 0;        try { amount = Integer.parseInt(request.getParameter("itemAmount"));        } catch (NumberFormatException e) { // do something or whatever        }        if ((amount > 0) && (amount < 100)) {   // an amount is OK // If the session does not have an object bound with the specified name, the removeAttribute() method does nothing. request.getSession().removeAttribute("errorMessage"); request.getRequestDispatcher("/index.jsp").forward(request, response);        } else {          // invalid amount // Set some error message as a Session attribute. if (amount <= 0) {     request.getSession().setAttribute("errorMessage", "Please submit an amount of at least 1"); }  if (amount > 100){     request.getSession().setAttribute("errorMessage", "Amount of items ordered is too big. No more than 100 is currently available."); } // get back to the referer page using redirect response.sendRedirect(request.getHeader("Referer"));        }    }}

相关阅读:

  • 如何选择合适的bean范围?
  • java.lang.IllegalStateException:提交响应后无法转发


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

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

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