2

ここに私のHTMLコードの一部があります:

<form action="LoginServlet" method="post">
    Username: <input type="text" name="username"><br>
    Password: <input type="password" name="password">
    <input type="submit" value="Log In">
</form>

そして、ここに servletContextListener があります:

public class DataListener implements ServletContextListener {
private AccountManager accs;
ServletContext context;
/**
 * Default constructor. 
 */
public DataListener() {
    // TODO Auto-generated constructor stub
}

/**
 * @see ServletContextListener#contextInitialized(ServletContextEvent)
 */
public void contextInitialized(ServletContextEvent e) {
    accs = new AccountManager();
    context = e.getServletContext();
    context.setAttribute("accounts", accs);
}

/**
 * @see ServletContextListener#contextDestroyed(ServletContextEvent)
 */
public void contextDestroyed(ServletContextEvent e) {
    context = e.getServletContext();
}

}

ここに私のサーブレット doPost があります:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //ServletContext context = getServletContext();
    //AccountManager manager = (AccountManager) context.getAttribute("accounts");


    /*if (manager.isValid(request.getParameter("username"),request.getParameter("password"))){
        RequestDispatcher dispatch = request.getRequestDispatcher("welcome.jsp");
        dispatch.forward(request, response);
    } else{ */
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>");
        out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""
                      + " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
        out.println("<html xmlns='http://www.w3.org/1999/xhtml'>");
        out.println("<head>");
        out.println("<title>Information Incorrect</title>");
        out.println("</head>");
        out.println("<body>");
        out.print("<h1>Please Try Again </h1>");
        out.print("<br />");
        out.print("Either Your username or password is incorrect. Please try again.");
        out.print("<br />");
        out.print("<br />");
        request.getRequestDispatcher("/LoginForm.html").include(request, response); 
        out.println("</body>");
        out.println("</html>"); 
//  }

問題は、welcome.html を実行してログイン ボタンを押すと、まだ古いコードが機能することです。私はこの部分にコメントしたことを意味します:

/*if (manager.isValid(request.getParameter("username"),request.getParameter("password"))){
    RequestDispatcher dispatch = request.getRequestDispatcher("welcome.jsp");
    dispatch.forward(request, response);
} else{ */

それでも、ボタンを押すと、コメント付きのブロックが実行されます...そこで何も変更できません..サーブレットクラスを再起動する方法を誰かが説明できますか? または何が問題ですか?よろしくお願いします


私は Project->clean を実行しましたが、うまくいきました:)

4

2 に答える 2

0

アプリケーションは、tomcat ディレクトリ tomcat\work\Catalina\localhost の下にキャッシュされる場合があります。このディレクトリからアプリケーションを削除して、アプリケーションを再デプロイするか、単純に tomcat を再起動してください。

上記の方法で問題が解決しない場合は、Eclipse WAR の作成または展開に何らかの問題があるはずです。WAR をビルドし、更新されたクラス ファイルが含まれていることを確認してください。重要なのは、WAR をデプロイした Tomcat ディレクトリ内のファイルの日付を確認することです。まったく新しいクリーンな WAR をデプロイし、すべてのフォルダーを削除しても、そこには古いキャッシュ ファイルが残っている場合があります。おそらく、Eclipse がコンパイル時間を節約するためにファイルに変更がないと考えて保持しているためです。Tomcat の war または webapp フォルダーに最新のクラス ファイルが含まれていることを確認してください。

幸運を!

于 2013-05-04T12:54:36.897 に答える
0

Giorgi さん、これは [Build] > [Clean] で簡単に解決できるはずです。それでも頑固な場合は、Eclipse では、生成されたクラスが Java ビルド パス ユーティリティで指定されたディレクトリに書き込まれることに注意してください。

ここに画像の説明を入力

ここで作成したクラス ファイルは手動で削除できます。ただし、ディレクトリはEclipseパッケージエクスプローラーでは非表示になります。デフォルトの Eclipse ビュー フィルターを変更する代わりに、ファイル システムで直接行うことができます。

その後、再構築します。それはあなたの問題を解決するはずです。

于 2013-05-04T14:42:50.970 に答える