【问题标题】:Servlet-Servlet-Jsp redirectingServlet-Servlet-Jsp 重定向
【发布时间】:2013-04-18 07:01:43
【问题描述】:

我正在用 JAVA 开发一个应用程序,其中一个 servlet 从 JSP 页面获取输入。在 db 中插入值后,它将重定向到另一个 servlet。然后第二个 servlet 将调度一个带有 ArrayList 的 JSP 页面。但是我不能从第二个 servlet 重定向到 JSP 页面。 ArrayList 将转到 JSP 页面,但该页面没有显示任何内容。我正在使用 NetBeans 6.8。 如果有人能解决这个问题,我将不胜感激。

第一个 Servlet 的代码:

RequestDispatcher dispatcher = request.getRequestDispatcher("/Servlet1?id="+id);
dispatcher.forward(request, response);

第二个 Servlet 的代码:

request.setAttribute("list",list);
String url="test2.jsp";
RequestDispatcher v=request.getRequestDispatcher(""+url+"");
v.forward(request, response);

【问题讨论】:

  • 最好显示一些来自您的第二个 servlet 的代码。
  • 添加您的代码以了解确切的问题。
  • @Sankha:在您的问题中,您说的两件不同的事情在我看来是模棱两可的:1.) 但是我不能从第二个 servlet 重定向到 JSP 页面。 2.) ArrayList 进入JSP 页面,但页面没有显示任何内容 请说明浏览器是否进入第二个jsp。
  • 您遇到的错误是什么?
  • 我使用“id”从第一个 servlet 重定向到第二个 servlet,该“id”用于从存储在 ArrayList 中的 DB 中获取一些数据,第二个 servlet 将重定向到一个 JSP 页面数组列表。

标签: java jsp


【解决方案1】:

在第二个 servlet 上试试这个 ..

request.setAttribute("list",list);
String url="test2.jsp";
RequestDispatcher v=request.getRequestDispatcher(url);
v.forward(request, response);

在jsp页面上...

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title></title>
</head>
<body>
<c:forEach items="${list}" var="item">
        ${item}<br>
</c:forEach>
</body>
</html>

【讨论】:

  • 没有例外。我放了一个 System.out.println("list values::"+list.get(0));在最终的 JSP 页面中。它正在工作并打印我可以在 Netbeans 的输出控制台中看到的值。但是页面没有显示。
  • 你可以在你的jsp页面上试试JSTL。
  • 这里是 JSTL 的链接 .. [link](stackoverflow.com/questions/2148658/java-list-use-through-use-of-jstl-cforeach)
  • 实际上,当我直接访问第二个 servlet 时,它工作正常。但是当我通过另一个 servlet 访问它时,问题就出现了。
  • 嗯...试试 response.sendRedirect("/path/to/your.jsp");
【解决方案2】:
public class MySqlConnection {

    Connection c;

    public Connection getConnection() throws ClassNotFoundException, SQLException {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/";
        String dbName = "ignite292";
        String user = "root";
        String password = "root";
        Class.forName(driver); // You don't need to call it EVERYTIME btw. Once during application's startup is more than enough.
        c = (Connection) DriverManager.getConnection(url + dbName, user, password);
        return c;
    }

    public void closeConnection() {
        try {
            if (!c.isClosed()) {
                c.close();
            }
        } catch (Exception e) {
        }
    }
}

【讨论】:

    【解决方案3】:

    首先,如果您使用任何重定向机制,它不应该在 RequestScope 中。它必须在会话或上下文范围内(根据您的要求)。因此,第二个 Servlet 的结果代码如下

    request.getSession().setAttribute("list",list);
    String url="/test2.jsp";
    RequestDispatcher v=request.getRequestDispatcher(""+url+"");
    v.forward(request, response);
    

    试试这个代码。

    【讨论】:

      【解决方案4】:

      桑卡,

      您可以将这些对象添加到会话对象中。并且您可以在任何 jsp 和 servlet 中使用该会话 obj。

      假设您有一个包含一些数据对象的 arrayList Obj。并且您正在尝试将您的 servlet 重定向到 jsp 或 servlet 到 servlet。 例如:-

      RequestDispatcher dispatcher = request.getRequestDispatcher("/Servlet1?id="+id);
      dispatcher.forward(request, response);
      request.setAttribute("list",list); // **Insted of using request object use session implicit object**.
      String url="test2.jsp";
      RequestDispatcher v=request.getRequestDispatcher(""+url+"");
      v.forward(request, response);
      

      请参考下面的代码来解决您的问题。

      RequestDispatcher dispatcher = request.getRequestDispatcher("/Servlet1?id="+id);
      dispatcher.forward(request, response);
      **session.setAttribute("list",list);** 
      String url="test2.jsp";
      RequestDispatcher v=request.getRequestDispatcher(""+url+"");
      v.forward(request, response);
      

      并通过使用

      获取此列表对象

      List dataList = session.getAttribute("list");

      希望这会对你有所帮助。

      【讨论】:

        猜你喜欢
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多