1

これが私が書いたコードの一部です:

public class ServletCounter extends HttpServlet {

    private final Object lock = new Object();

    private int serviceCounter = 0;
    private FileOutputStream out;
    private boolean shuttingDown;

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        super.init(servletConfig);
            }

     @Override
    protected void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        enteringServiceMethod();
        try {
            super.service(httpServletRequest, httpServletResponse);
            out = new FileOutputStream("C:\\xampp\\tomcat\\webapps\\myapp\\WEB-INF\\lib\\counter.txt");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        } 
        @Override
    protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        if (!shuttingDown) {
            writeToFile("number of servlet access = " + serviceCounter );

        }
    }

    @Override
    public void destroy() {
        ...
    }
    private void enteringServiceMethod() {
        synchronized (lock) {
            serviceCounter++;
            writeToFile("method enteringServiceMethod serviceCounter =  " + serviceCounter);
        }
    }
    private int getNumServices() {
        synchronized (lock) {
            return serviceCounter;
        }
    }
    private void writeToFile(String text) {
        System.out.println(text);
        text += "\r\n";

        try {
            out.write(text.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    }

必要なのは、誰かが私のサーブレットを開くたびに、「counter.txt」ファイルを開き、サーブレットが開かれた回数を保存する必要があることです。たとえば、ファイルが番号8を保持している場合、誰かがサーブレットにアクセスした後、番号9を保存し、番号8を削除する必要があります。それは意味がありますか?誰かがwriteToFileメソッドをオーバーライドするのを手伝ってもらえますか?私が書いたコードは不完全ですが、行き詰まり、いくつかのことを試しましたが、何も機能しないようです。

4

1 に答える 1

2

ページヒットをカウントしようとしている場合は、それFilterが良いアプローチになります

各リクエストをインターセプトsynchronizedし、アプリケーションスコープで変数を取得してインクリメントします

于 2012-05-12T11:17:51.460 に答える