在两个JSP页面之间传递参数

时间:2013-05-15 08:34:29

标签: jsp spring-mvc

我是网络编程的新手,我坚持设计一个简单的流程。

假设我有一个像

这样的简单对象
public class Object1
{
  private int ID;
  private String text;

  { getters and setters etc}
}

我从我的DAO中获取了一堆(取决于DB中的记录号)List<Object1>,并将它们打印在页面上的循环中,我们称之为jspPage1。我还有另一个页面jspPage2,它与Object1.ID

有关

我想要的是:

创建某种连接,这样,当用户点击或选择一个对象时,所选对象的ID(在jspPage1上)将被发送到jspPage2

到目前为止我的想法;

  • 创建用于重定向ID信息的超链接,例如:

        <c:forEach items="${objects}" var="object1">
            <tr>
               <td><a href="/jspPage2?id=${object1.ID}">${object1.text} </a></td>
           </tr>
        </c:forEach>
    

    这很糟糕,任何人都可以篡改地址栏并更改ID 值。

  • 我可以对选项#1的参数信息进行模糊处理。这似乎是一个 更安全,但一些任性的用户仍然可以与之交流 创建哈希。

  • 我可以编写一些像request.setAttribute("ID", object1.ID);这样的小脚本,但我被告知在JSP页面中包含代码和逻辑是不对的。

重复我的问题; 有没有办法以更简洁的方式做这样的事情?

我接近这个问题的方法是根本错误的,我应该考虑一个不同的设计。 (如果有任何提示)

2 个答案:

答案 0 :(得分:1)

我能想到的一种方法是使用MVC方法。用户单击URL后,您可以让servlet验证对象ID是否有效。换句话说,servlet将包含您的所有逻辑。所以,在jspPage1

<c:forEach items="${objects}" var="object1">
    <tr>
        <td><a href="
               <c:url value='/checkId' > 
                   <c:param name='id'value ='${object1.ID}' /> 
               </c:url>
               ">${object1.text}</a>
    </tr>
</c:forEach>

然后在web.xml中注册一个名为CheckIdServlet的servlet

<servlet>
    <servlet-name>checkId</servlet-name>
    <servlet-class>CheckIdServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>checkId</servlet-name>
    <url-pattern>/checkId</url-pattern>
</servlet-mapping>

由于您要传递url中的参数,您只需覆盖doGet(...)方法

public class CheckIdServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException { 
    //do your id checking to make sure it's a number or if id value is actually in the database 
    //if either condition not met, you could redirect back to jsppage 1 or however you want to do 
    //handle 
    response.sendRedirect("/jsppage1.jsp"); 

    //or if id is valid
    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/jsppage2.jsp"); 
    dispatcher.forward(request, response);

    //Keep in mind this is pseudocode so make sure to add your if conditions above

}

最后,在jsppage2中,您只需显示您的对象ID

<h1>${param.id}</h1>

答案 1 :(得分:0)

您可以将这些值存储到会话中,然后可以在第二个jsp页面中使用

否则您可以使用request.setAttribute("name",value );