我正在编写我的第一个Java EE应用程序,使用EJB,Servlet,JSP等 我正在使用JBOSS 4.2 AS和Eclipse作为IDE,包括启动和停止服务器等任务。
我无法理解的是,在jsp中记录指令时,如:
<% System.out.println("Log this!"); %>
在Eclipse控制台和$SERVER_HOME/server/default/log/server.log
中按预期记录,我在servlet中尝试的任何日志记录指令都失败了。
以下是调用servlet的jsp代码:
<form action="MyServlet" method="POST" accept-charset="utf-8">
<input type="text" name="id" value="" id="id">
<input type="submit" value="Go →">
</form>
当然servlet还是:
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public MyServlet() {
super();
System.out.println("Hi, I'm your servlet's constructor");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.err.println("Hi, this is your servlet on system.err");
System.out.println("Hi, this is your servlet on system.out");
System.out.println(request);
ServletContext sc = getServletContext();
sc.log("Hi, this is your servlet on servlet context!");
}
}
我错过了一些明显的东西吗?做错了什么,或只是找错了地方?
答案 0 :(得分:3)
我刚创建了一个虚拟servlet,我在JBoss 4.2.3上部署并在Eclipse控制台和System.out.println
中使用server/default/log/server.log
输出,因此我无法重现您的问题。一定有别的错误。
话虽这么说,我不建议使用System.out
或System.err
,尤其是在使用Java EE容器时。相反,您应该使用日志框架(Don't Use System.out.println!),我建议使用logback(log4j的后继者)。
答案 1 :(得分:1)
如果没有看到任何写入stdout / stderr的内容,那么这只是意味着servlet实际上没有被执行。这可能有很多微不足道的原因。 Servlet是否在类路径中? Servlet是在web.xml
中定义的还是用@WebServlet
注释的? url-pattern
是否正确?请求网址是否涵盖了它? Eclipse调试器说了什么? appserver自己的日志说了什么?
顺便说一句,这实际上并不是日志记录。这只是对stdout / stderr的简单写作。记录不止于此。