2013-04-05 64 views
1

我目前正在嘗試在eclipse中做一個簡單的Web項目,我是全新的,所以與我一起裸露。我的目標是讓一個.jsp/html文件成爲一個表示層,用來處理邏輯的javascript,以及用於處理服務器端的東西的Java。對於我的簡單測試,我只想讓我的javascript代碼能夠聯繫web服務器並讓java代碼返回一個日期。以下是我現在所擁有的(注意我只顯示 「麻煩」 的部分)JavaScript到Java Web應用程序

的.jsp(Timer.jsp):

<div ><h2 id="date" class="main"></h2></div> 

的JavaScript(timer.js):

var xhr = new XMLHttpRequest(); 
    document.getElementById("date").innerHTML = xhr.responseText; 
    xhr.open("GET", "CoopTimer", true); 
    xhr.send(); 

的Java:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
    Date date = new Date(); 

    request.setAttribute("date", dateFormat.format(date).toString()); 

    request.getRequestDispatcher("/Timer.jsp").forward(request, response); 

} 

中的JavaScript我肯定是錯誤的,可能是麻煩的區域。所以基本上,我的目標是讓標題id「date」從javascript獲取日期,而javascript將從java servlet獲取值。

如果任何人都能指引我走向正確的方向,無論是資源,你有什麼,這將是非常棒的。謝謝!

編輯:這是我使用的最終代碼。經過數小時的試圖找出什麼是錯的......在eclipse中沒有提到右鍵單擊HTML和運行方式在服務器上。一個侮辱性的錯誤,但我永遠不會再忘記。

這裏是我用來返回一個簡單的日期字符串代碼:

的.jsp(Timer.jsp):

<div ><h2 id="date" class="main"></h2></div> 

使用Javascript(timer.js)

$("#date").load("http://127.0.0.1:14949/CoopTimer/CoopTimer"); 

的Java :

/** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
     Date date = new Date(); 

     response.setContentType("text/plain"); 
     response.setCharacterEncoding("UTF-8"); 
     response.getWriter().write(date.toString()); 

     //System.out.println("PING"); 
    } 
+0

我已經爲'servlets'添加了一個標籤。你應該看看我們在SO的文檔:http://stackoverflow.com/tags/servlets/info – 2013-04-05 14:51:29

+0

如果你想發送一個AJAX請求,那麼你不想轉發到一個jsp,你需要寫直接到響應outputstream(可能是json)。 – 2013-04-05 14:52:24

回答

1

有在lea這兩個問題。

第一:servlet的結果是Timer.jsp呈現的結果。 Timer.jsp不會對servlet請求中存儲的日期做任何事情。如果您只希望servlet返回格式化日期,則不需要轉發到JSP。只需將日期寫入回覆的作者。

第二:在發送請求之前,您的JavaScript代碼嘗試更改標題的innerHTML和響應的內容。這是行不通的。我的建議,讓你的JS代碼更容易編寫和理解和瀏覽器之間移植,是使用jQuery和AJAX其功能:

$('#date').load('CoopTimer'); 
+0

第一:所以不要說 equest.getRequestDispatcher(「/ Timer。jsp「)。forward(request,response); 我想知道是什麼試圖做出請求,而不是發送迴應給它? 第二:我一直在閱讀很多關於jQuery的知識,而且更容易它使事情。有沒有辦法使用HttpRequest()來分配基於響應的值而不是我在做什麼?或者這是唯一可能的jQuery? – Vernah 2013-04-05 15:53:06

+0

第一:如果URL的contratc是返回當前的日期,你只需要返回當前的日期,而不需要知道是什麼試圖做出請求。一個請求是一個請求,並且servlet應該總是做同樣的事情。第二:當然可能沒有jQuery沒有比你自己編寫的任何腳本更強大的功能,但它使事情變得更加簡單和便攜,而不是使用它自己拍攝 腳。 – 2013-04-05 16:02:10

+0

當我在做負載時,我使用什麼地址?我遇到與使用HTTPRequest.open時相同的問題,它找不到CoopTimer文件。 [警告] SRVE0190E:找不到文件:/CoopTimer.java – Vernah 2013-04-05 20:57:36

0

使用jQuery使Ajax調用,這是非常簡單的在它的自我 。這裏是javascript代碼片段

function pullResultFromServlet() { 
    var url = 'servletURL'; 
    $.ajax({ 
    url: url, 
    dataType: 'json', 
    data:{ 
     "dateValue: $('#date').val(), 
    }, 
    type: 'POST', 
    success: function(responseFromServlet) { 
     // further processing 
     } 


    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
    } 
    }); 
}