2016-03-03 124 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); 
    } 
} 

希望它可以幫助你。好運