2016-08-01 54 views
0

早上好鄉親,從JSP的形式在文本文件中寫入

我使用Eclipse和學習如何使用JSP編寫,我創建了一個簡單的形式使用(代碼和密碼)引導(以使它看起來很好),我希望每次點擊按鈕「Se connecter」(提交),在文本文件中創建或添加單擊人員的時間和名稱(codeOp.getText())。

這裏是我的表(顯示爲法文不好意思):

<div id="page-content-wrapper"> 
    <div class="container col-sm-offset-2 col-sm-6"> 
     <form class="form-signin" action="Page1.jsp" method="GET"> 
     <h2 class="form-signin-heading">Veuillez vous connectez</h2> 
     <label for="codeOp" class="sr-only">Code de l'opérateur</label> 
     <input type="number" id="CodeOp" class="form-control" placeholder="Code l'opérateur" ></input> 
     <label for="password" class="sr-only">Mot de passe</label> 
     <input type="password" id="password" class="form-control" placeholder="Password" ></input> 
     <div class="checkbox"> 
      <label> 
       <input type="checkbox" value="remember-me"/> Se souvenir de moi. 
      </label> 
     </div> 
       <button class="btn btn-lg btn-primary btn-block" type="submit"/>Se connecter 
     </form> 
    </div> 
</div> 

,這裏是我想添加的代碼(或至少類似的東西):

<% String content = codeOP.GetText(); %> 
    <% File file = new java.io.File("log.txt");%> 
    <% FileWriter fw = new FileWriter(file.getAbsoluteFile());%> 
    <% BufferedWriter bw = new BufferedWriter(fw);%> 
    <% bw.write(content);%> 
    <% bw.close();%> 

的想法是創建一個簡單的日誌文件,顯示每次點擊的時間(可以使用日期後添加)和單擊用戶的名稱(CodeOP)。

看起來很簡單,但我不知道在哪裏編寫代碼,因爲它不鼓勵在JSP頁面中編寫Java代碼。

感謝您提前閱讀!準備好被批評;)

+0

不!甚至不要考慮寫這個像Java 1.2的東西。使用普通記錄器進行呼叫! –

+0

JSP被設計爲您的Web應用程序的視圖。如果您想執行後端操作(如日誌記錄),那麼使用一個記錄並轉發到您的JSP的Servlet會更好。 –

+0

感謝您的快速回復! 我知道我正要犯一個錯誤xD您能詳細闡述一下爲何使用servlet嗎?或者有什麼方法可以與您聯繫? – DrayneZ

回答

0

而不是用JSP內聯寫這個,你可以把它發送到後端。然後您可以在後端執行該代碼。你想要將你的JSP按鈕綁定到後面的動作上。當你有表單並提交時,這是一個通過你創建的「Servlet」的動作。

雖然,您的方法應該是POST方法,而不是GET方法。因此,此行<form class="form-signin" action="page1" method="GET">應更改爲類似 <form class="form-signin" action="Page1" method="POST">

您不需要將.jsp添加到該操作。該操作是一個將傳遞給我們的servlet的參數。

然後,當動作與表單中的動作相匹配時,您就可以在servlet中執行後端的一些(普通java)代碼。

爲了使這個更具體一些,在你的servlet中你有一個post方法。這看起來大致是

public class SomeServlet extends HttpServlet{ 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     // do something with the form data. 
     // I would use another class for the filewriting though 

     String content = request.getParameter('codeOp'); 
     File file = new File("log.txt"); 
     FileWriter fw = new FileWriter(file.getAbsoluteFile(); 
     BufferedWriter bw = new BufferedWriter(fw); 
     bw.write(content); 
     bw.close(); 

    } 
} 

我寫這沒有實際測試這一點,但它更給你的,你會怎麼做這一點的想法。當您有多個表單時,您可以使用表單的ACTION來確定哪個表單在servlet中發送了POST請求。實際爲所有後端邏輯創建一些後端類是明智的,並且從Servlet只調用一些Facade類,然後可以調用正確的後端類以創建日誌等。

+0

這看起來棒極了我需要什麼,我會努力,讓你知道,謝謝你的詳細答案兄弟!我能以某種方式聯繫你嗎? – DrayneZ

0

您是否考慮過使用現有的webapp日誌文件? 嘗試在jsp頁面application.log(String.format("EVENT - User %s, Action %s", "myuser", "click-1"))中調用日誌功能,然後查找j2ee服務器的日誌文件。

這適用於併發多個用戶請求開箱即用,使用自定義的FileOutputStream您需要確保它正確同步。

使用grep或類似的方式從日誌文件中收集事件。

+0

我其實看了一圈,看了一些關於webapp登錄的東西,但它聽起來很複雜,我只需要一些簡單的東西x) – DrayneZ