2016-03-03 66 views
0

我是Java servlets和JSP的新手...将数据从Java Servlet传递到JSP多次

我已经创建了一个Java servlet。其实这是我的第一个servlet!

在我的servlet代码中,我有一个循环。对于此循环的每次迭代,都会有变量设置为不同的值。在这个循环的每次迭代结束后,我希望能够在HTML表格中作为一行打印出我的变量(这些变量将随着循环的每次迭代而改变)...

经过一番研究,似乎我需要使用一个JSP页面来输出HTML中的变量。但是,如何在循环的每次迭代之后将数据发送到JSP页面?

伪例如:

--servlet逻辑

forloop{ 
     var1 = "somedata"; 
     var2 = "somemoredata"; 
    } 

--jsp逻辑

//this part should only output once 
<table> 
    <thead><tr><th></th></tr></thead> 

    //this part needs to output everytime the JSP is called. And each time, different values of var1 and var2 will be passed 
    <tr> 
    <td>${var1}</td> 
    <td>${var2}</td> 
    </tr> 

    </table> 

有谁知道做到这一点的最好方法是什么? 如果我这样做是错误的,那么我应该采取另一种方法吗?我应该使用AJAX继续提供信息来更新我的页面吗?

感谢您的任何建议和见解!

回答

1

您需要构建一个数据结构,它将保存来自您的servlet的结果并且必须传递给JSP。在JSP中,您可以遍历数据并构建表行。

要记住的一件事是,尽管JSP可能看起来像HTML文件,但最终它们与Java Servlet基本上只是Java Class相同。每次在Servlet中执行循环时,都无法加载jsp。想法是Java Servlet准备数据并传递给JSP进行演示。

的Servlet

// Import required java libraries 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

// Extend HttpServlet class 
public class HelloWorld extends HttpServlet { 

    private String message; 

    public void init() throws ServletException 
    { 
     // Do required initialization 
     message = "Hello World"; 
    } 

    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
      throws ServletException, IOException 
    { 
    List<String> data = null; 
    // do you loop here 
    //pass the data to jsp 
    String jsp = ""; //jsp path 
    ServletContext sc = getServletContext(); 
    RequestDispatcher rd = sc.getRequestDispatcher(jsp); 

    request.setAttribute("data", data); 
    rd.forward(request, response); 
    } 

    public void destroy() 
    { 
     // do nothing. 
    } 
} 

JSP

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<c:forEach items="${data}" var="d"> 
    <tr>  
     <td>${d}</td> 
    </tr> 
</c:forEach> 
+0

感谢您的意见。我试过这个,但是当我尝试实现jstl时,出现错误 对于类型PageContextImpl,未定义方法proprietaryEvaluate(String,Class ,PageContext,null) – tt2244

0

你可以用我的解决方案,但它只会工作,但你知道你会究竟有多少变数使用。而不是使用JSP代码中使用AJAX请求和JQuery

样品JSP将它们添加:

<html> 
<head>...</head> 
<body> 
    <table> 
     <thead><tr><th></th></tr></thead> 
     <tbody id="text"> 
     </tbody> 
    </table> 
    <button id="submit" onClick="addData()">Click me</button> 
</body> 
... import Jquery.... 
<script> 
    function addData(){ 
     $.ajax({ 
      type:'POST', 
      url: ./MyServlet, 
      data:{//data name://value}, 
      success: function(response){ 
      $("#text").append(response); 
     }); 
    } 
</script> 
</html> 

样本servlet:

@WebServlet("/MyServlet") 
public class MyServlet extends HttpServlet { 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

      String text=""; 
      String values[][]={{"1","2"},{"4","5"},{"6","7"},{"8","9"}} //your values it really can be anything 

      for(int i=0;i<values.length;i++){ 
       text=text+"<tr>\n"; 
       text=text+"<td>"+values[i][0]+"</td>\n"; 
       text=text+"<td>"+values[i][1]+"</td>\n"; 
       text=text+"</tr>\n"; 
      } 

      out.print(text); 
    } 
} 

希望它可以帮助你。好运