簡體   English   中英

我如何編寫 Java 記錄器 Servlet?

[英]How do I write the Java logger Servlet?

我想在我的系統中進行一些登錄,例如用戶操作,並且我知道在小服務中我可以獲得包含所有會話、參數等的請求

所以我想寫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還怎么處理?

為了您的目的,最好的方法是使用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()
    {

    }
}

更多信息:

你問這個問題

所以我應該如何繼續下去?

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表單時調用它。

您應該使用log4jFileAppender在您的應用程序中實現日志記錄。 像這樣的東西:::

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);
     }
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM