2017-08-15 95 views
0

我有以下項目:用java編寫的後端;我的Main類在日誌文件上創建一個偵聽器,在日誌被修改時檢索一些信息,並創建一個名爲「Candidate」的對象,並通過POST方法將其某些屬性發送給Servlet。一切工作到這裏,我從Servlet獲得200響應代碼。在POST後HTTP瀏覽器動態更新jsp頁面請求

然後,我在一個index.jsp文件中創建了一個前端(帶有bootstrap,看起來不錯),它由靜態部分(背景,消息,標識等)和動態部分組成每次更新日誌文件時都要進行更新。中的index.jsp的簡化版本可以在下面找到,其中的firstName是應該由POST請求到達數據的例子:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<!-- If IE use the latest rendering engine --> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 

<!-- Set the page to the width of the device and set the zoon level --> 
<meta name="viewport" content="width = device-width, initial-scale = 1"> 

<title>User Page</title> 

<style> 
@import url('bootstrap/css/bootstrap.css');  
</style> 
<script type=」text/javascript」 src=」bootstrap/js/bootstrap.min.js」></script> 
</head> 
<body style="background-image:url(images/xxxx.jpg); background-size:cover; " > 


<% String firstName = (String) request.getParameter("firstName"); %> 

<div class="container"> 
<div class="page-header"> 
<h1 style="color:white">Hello 

<%if(firstName != null){%> 

    <%=firstName %> 
<%}%> 
Welcome to this new page.</h1> 

</div> 
<img src="images/xx.png" style="width:35%;height:35%; padding-left: 10%; padding-top:10%"/> 
</div> 
</body> 
</html> 

我的終極目標是,用戶只要看到指數.jsp頁面,每次修改日誌時都會使用「新候選」中的數據更新其某些內容。

要運行我的應用程序,我有幾個運行實例。我運行Main類,最重要的是,我在服務器上運行index.jsp和MyServlet。這是正確的方式來運行它嗎?

因爲當我這樣做,然後我修改日誌,主類控制檯打印一切,顯示POST請求已發送(我試圖發送請求到Servlet或直接發送到jsp文件)但是我的index.jsp沒有收到請求(或者至少它不會在eclipse中打開的瀏覽器中顯示它),即使在刷新頁面之後。

但是,當我手動修改瀏覽器中的url以將url查詢參數與?firstName=XXXX一起添加並刷新時,該做什麼工作,然後該消息就會包含在index.jsp頁面中。我如何確保通過後端發送的POST請求動態修改了我的index.jsp頁面?

最後一個注意事項:當日志文件被修改時,控制檯打印System.out.println並顯示相應的名字,如下面的doGet方法所示,這就是我假定一切都正常工作的方式。

下面是servlet代碼:

package com.xyz.xxxxx; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

/** 
* Servlet implementation class MyServlet 
*/ 
@WebServlet("/MyServlet") 
public class MyServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     //response.setIntHeader("Refresh", 5); 

     response.setContentType("text/html"); 
     PrintWriter writer = response.getWriter(); 
     String firstName = request.getParameter("firstName"); 
     System.out.println("testing get: first name : " + firstName); 

     // forward request to jsp page 
     request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request,response); 

    } 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     doGet(request,response); 
    } 


} 

和文件組織here

謝謝你的幫助!

+0

什麼框架你熟悉或者有一些技巧?很難把ajaxify prpoject沒有,原生jsp –

+0

沒有。但是我可以學習,如果你能指出我究竟可以使用什麼框架,爲什麼:-) – goToSpace

+0

我使用Wicket幾年,但這遠離JSP,告訴真正的JSP沒有任何東西。幾乎沒有與JSP兼容的情況,或者在他的演示級別使用JSP。 –

回答

0

我要在這裏採取信仰的飛躍,並假設你正在尋找從你POST

堅持的firstName的值。這將需要你調整你的代碼不少,但我也如果這是一個教室項目,不想只提供實施。

從代碼片段您提供:看起來你正在努力實現以下目標:

  1. GET - >顯示的index.html通過後提供
  2. POST的名稱 - >變化給定會話的名稱。

因此,您應該使用您在ServletClass上定義的任何內容來訪問該頁面。

一旦你瞭解了HttpSession,你應該得到你想要的效果

+0

謝謝你的回答。對不起,不清楚:我不想保留firstName的值,即每次修改日誌時,我都希望顯示新名稱。當我試圖使事情發揮作用時,我使用了會話,但實際上它沒有幫助。 – goToSpace

+0

我注意到你最近的3個問題都圍繞着同一個問題。什麼會觸發日誌被修改? – shinjw

+0

你目前寫的是一個GET和一個POST將以同樣的方式解決。 這意味着任何具有?firstName = XYZ的GET請求都會提示新的日誌事件。 這也意味着任何具有firstName = XYZ的POST都會執行相同的操作 – shinjw