做李刚老师的例子:
代码:
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.javapackage lee;import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.*;import java.io.PrintWriter;
import java.io.IOException;
import java.sql.*;public class LoginServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
        String errMsg = "";
        RequestDispatcher rd;//RequestDispatcher is imported
        String username = request.getParameter("username");
        String pass = request.getParameter("pass");
        try {
            DbDao dd = DbDao.instance("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/cara", "root", "stimpy");
            ResultSet rs = dd.query("select pass from user_table where name = '"+ username +"'");// ResultSet?
            if (rs.next()) {
                if (rs.getString("pass").equals(pass)) {
                    HttpSession session = request.getSession(true);
                    session.setAttribute("name", username);
                    rd = request.getRequestDispatcher("/welcome.jsp");//?
                    rd.forward(request, response);
                } else {
                    errMsg += "your username and password are not fit";
                }
            } else {
                errMsg += "your username does not exist, please register first";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        if (errMsg != null || !errMsg.equals("")) {
            rd = request.getRequestDispatch("/login.jsp");
            request.setAttribute("err", errMsg);
            rd.forward(request, response);
        }
    }
}
编译通过:
C:\Users\hp2>javac -cp "D:\myWorkspace\test\WEB-INF\src";"E:\software\apache-tom
cat-6.0.26\lib\servlet-api.jar";"E:\software\apache-tomcat-6.0.26\lib\jsp-api.ja
r" "D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java"如果我将这两个classpath添加到环境变量中,一下是我当前的环境变量:
.;E:\software\apache-tomcat-6.0.26\lib\servlet-api.jar;E:\software\apache-tomcat-6.0.26\lib\jsp-api.jar;%JAVA_HOME%/lib/tools.jar;%jJAVA_HOME%/bin编译:
C:\Users\hp2>javac -cp "E:\software\apache-tomcat-6.0.26\lib\servlet-api.jar" "D
:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java"结果:
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:19: cannot find symbol
symbol  : class DbDao
location: class lee.LoginServlet
                        DbDao dd = DbDao.instance("com.mysql.jdbc.Driver", "jdbc
:mysql://localhost:3306/cara", "root", "stimpy");
                        ^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:19: cannot find symbol
symbol  : variable DbDao
location: class lee.LoginServlet
                        DbDao dd = DbDao.instance("com.mysql.jdbc.Driver", "jdbc
:mysql://localhost:3306/cara", "root", "stimpy");
                                   ^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:38: cannot find symbol
symbol  : method getRequestDispatch(java.lang.String)
location: interface javax.servlet.http.HttpServletRequest
                        rd = request.getRequestDispatch("/login.jsp");
                                    ^
3 errorsC:\Users\hp2>javac -cp "D:\myWorkspace\test\WEB-INF\src";"E:\software\apache-tom
cat-6.0.26\lib\servlet-api.jar";"E:\software\apache-tomcat-6.0.26\lib\jsp-api.ja
r" "D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java"
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:38: cannot find symbol
symbol  : method getRequestDispatch(java.lang.String)
location: interface javax.servlet.http.HttpServletRequest
                        rd = request.getRequestDispatch("/login.jsp");
                                    ^
1 errorC:\Users\hp2>javac -cp "D:\myWorkspace\test\WEB-INF\src";"E:\software\apache-tom
cat-6.0.26\lib\servlet-api.jar";"E:\software\apache-tomcat-6.0.26\lib\jsp-api.ja
r" "D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java"
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:38: cannot find symbol
symbol  : method getRequestDispatch(java.lang.String)
location: interface javax.servlet.http.HttpServletRequest
                        rd = request.getRequestDispatch("/login.jsp");
                                    ^
1 errorC:\Users\hp2>javac -cp "D:\myWorkspace\test\WEB-INF\src";"E:\software\apache-tom
cat-6.0.26\lib\servlet-api.jar";"E:\software\apache-tomcat-6.0.26\lib\jsp-api.ja
r" "D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java"
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:38: cannot find symbol
symbol  : method getRequestDispatch(java.lang.String)
location: interface javax.servlet.ServletContext
                        rd = getServletContext().getRequestDispatch("/login.jsp"
);
                                                ^
1 errorC:\Users\hp2>javac -cp "D:\myWorkspace\test\WEB-INF\src";"E:\software\apache-tom
cat-6.0.26\lib\servlet-api.jar";"E:\software\apache-tomcat-6.0.26\lib\jsp-api.ja
r" "D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java"
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:38: cannot find symbol
symbol  : method getRequestDispatch(java.lang.String)
location: interface javax.servlet.ServletContext
                        rd = getServletContext().getRequestDispatch("/login.jsp"
);
                                                ^
1 errorC:\Users\hp2>javac -cp "D:\myWorkspace\test\WEB-INF\src";"E:\software\apache-tom
cat-6.0.26\lib\servlet-api.jar";"E:\software\apache-tomcat-6.0.26\lib\jsp-api.ja
r" "D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java"C:\Users\hp2>javac -cp "D:\myWorkspace\test\WEB-INF\src" "D:\myWorkspace\test\WE
B-INF\src\lee\LoginServlet.java"
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:3: package javax.servlet d
oes not exist
import javax.servlet.ServletException;
                    ^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:4: package javax.servlet d
oes not exist
import javax.servlet.ServletContext;
                    ^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:5: package javax.servlet d
oes not exist
import javax.servlet.RequestDispatcher;
                    ^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:6: package javax.servlet.h
ttp does not exist
import javax.servlet.http.*;
^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:12: cannot find symbol
symbol: class HttpServlet
public class LoginServlet extends HttpServlet {
                                  ^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:13: cannot find symbol
symbol  : class HttpServletRequest
location: class lee.LoginServlet
        public void service(HttpServletRequest request, HttpServletResponse resp
onse) throws ServletException, java.io.IOException {
                            ^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:13: cannot find symbol
symbol  : class HttpServletResponse
location: class lee.LoginServlet
        public void service(HttpServletRequest request, HttpServletResponse resp
onse) throws ServletException, java.io.IOException {
                                                        ^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:13: cannot find symbol
symbol  : class ServletException
location: class lee.LoginServlet
        public void service(HttpServletRequest request, HttpServletResponse resp
onse) throws ServletException, java.io.IOException {             ^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:15: cannot find symbol
symbol  : class RequestDispatcher
location: class lee.LoginServlet
                RequestDispatcher rd;//RequestDispatcher is imported
                ^
D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java:23: cannot find symbol
symbol  : class HttpSession
location: class lee.LoginServlet
                                        HttpSession session = request.getSession
(true);
                                        ^
10 errors找不到很多东西,看来是环境变量设置的问题了,麻烦大家指点一下了!!

解决方案 »

  1.   

    设了。请忽略dispather的错误,我已经修正了。
    编译时如果是这样:
    C:\Users\hp2>javac -cp "D:\myWorkspace\test\WEB-INF\src";"E:\software\apache-tom
    cat-6.0.26\lib\servlet-api.jar";"E:\software\apache-tomcat-6.0.26\lib\jsp-api.ja
    r" "D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java"就能编译通过。如果把servlet-api.jar和jsp-api.jar添加到环境变量里然后这样:
    C:\Users\hp2>javac -cp "E:\software\apache-tomcat-6.0.26\lib\servlet-api.jar" "D
    :\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java"就不通过了,是很多东西找不到。
      

  2.   

    设了,JAVA_HOME现在是C:\Program Files (x86)\Java\jdk1.6.0_12
      

  3.   

    添加到环境变量之后,为什么还要servlet-api.jar?
    C:\Users\hp2>javac -cp "D:\myWorkspace\test\WEB-INF\src" "D:\myWorkspace\test\WEB-INF\src\lee\LoginServlet.java"这样呢?
      

  4.   

    环境变量直接设置成E:\software\apache-tomcat-6.0.26\lib\这样就行了
      

  5.   

    有一点需要确认,那就是,你设置 CLASSPATH 变量之后,你的 cmd.exe 重启过了吗?环境变量在一个进程启动之后是不会再改变了,只有重开才起作用。
      

  6.   

    我现在环境变量
    classpath是E:\software\apache-tomcat-6.0.26\lib\
    重启了cmd窗口
    依然出现上述错误。
      

  7.   

    现在
    classpath:E:\software\apache-tomcat-6.0.26\lib\*;这样就是指该目录下所有的jar包,可以解决。