各位早上好,
我正在使用eclipse并学习如何使用JSP进行编码,我使用bootstrap创建了一个简单的表单(代码和密码)(让它看起来很好看),我希望每次单击按钮"Se-connector"(提交)时,都能创建或添加一个文本文件,其中包括单击者的时间和名称(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();%>
其想法是创建一个简单的日志文件,显示每次单击的时间(可以稍后使用Date添加)和单击用户的名称(CodeOP)。
这看起来很简单,但我不知道在哪里编写代码,因为不鼓励在JSP页面中编写java代码。
感谢您提前阅读!准备接受批评;)
您可以将其发送到后端,而不是使用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
类,然后它可以调用后端的正确类来创建日志等。
您是否考虑过使用现有的webapp日志文件?尝试在jsp页面application.log(String.format("EVENT - User %s, Action %s", "myuser", "click-1"))
中调用日志函数,然后查找j2ee服务器的日志文件。
这适用于开箱即用的并发多个用户请求,使用自定义FileOutputStream确保它正确同步。
使用grep或类似方法从日志文件中收集事件。