如何编写Java logger Servlet?

时间:2013-12-18 03:26:08

标签: java servlets

我想在我的系统中做一些登录,比如用户操作, 我知道在servelet中我可以获得所有会话的参数,参数..etc

所以我想编写Servlet

public class UserActionCheck extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException,
    IOException {


        HttpSession session = request.getSession();
        Map map=request.getParameterMap();
        Set keSet=map.entrySet();
        for(Iterator itr=keSet.iterator();itr.hasNext();){
            Map.Entry me=(Map.Entry)itr.next();
            Object ok=me.getKey();
            Object ov=me.getValue();
            String[] value=new String[1];
            if(ov instanceof String[]){
                value=(String[])ov;
            }else{
                value[0]=ov.toString();
            }

            for(int k=0;k<value.length;k++){
                System.out.println(ok+"="+value[k]);
            }
          }

    }

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

        //HttpSession session = request.getSession();


    }
}

然后我可以在tomcat控制台中看到参数输出..但是我得到了空白页..

似乎页面在doGet方法之后停止..

那我该如何继续呢?

使用RequestDispatcher

如何处理doPost

3 个答案:

答案 0 :(得分:1)

出于您的目的,最好的方法是使用Filter

示例:

@WebFilter(filterName = "monitoringFilter", urlPatterns = { "/*" })
public class MonitoringFilter implements Filter
{
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    {
        // Right here do your stuff pretty much like in a servlet
        request // ... get information you need

        // Process request as normal
        chain.doFilter(request,response);
    }

    @Override
    public void init(FilterConfig config) throws ServletException
    {

    }

    @Override
    public void destroy()
    {

    }
}

更多信息:

答案 1 :(得分:0)

您应该使用 log4j FileAppender 在您的应用中实施日志记录。 这样的东西:::

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
class A{
  static Log log = LogFactory.getLog(A.class);
  void methodA(){
   try{
    log.info("I am inside A");
   } catch(Exception e) {
      log.error("error" , e);
     }
  }

}

答案 2 :(得分:0)

你问这个问题

  

那我该如何继续呢?

doGet方法的想法是它应该写入响应对象,应该在浏览器中写入的html(或数据);

例如你可以写

PrintWriter out = response.getWriter();
for(int k=0;k<value.length;k++){
            out.println(ok+"="+value[k]);
}

查看http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-First-Servlets.html

doPost也可以被类似地处理,但通常用于POST数据 - 在提交HTML表单时调用它。