有四个文件:Book.java,GoodBooks.java,InitializeBookList.java,ShowGoodBooks.java   它们的代码分别如下:
package scwcd.lab04;public class Book {
  private String name;
  private String author;
  private String publisher;
  private String isbn;
  private String price;  public Book(String name, String author,String publisher,
                 String isbn, String price ) {
    this.name      = name;
    this.author    = author;
    this.publisher = publisher;
    this.isbn      = isbn;
    this.price     = price;
  }  public String getName() {
    return name;
  }
  public String getAuthor() {
    return author;
  }
  public String getPublisher() {
    return publisher;
  }
  public String getIsbn() {
    return isbn;
  }
  public String getPrice() {
    return price;
  }
}
package scwcd.lab04;import java.util.*;public class GoodBooks {  private List BooksList;  public GoodBooks() {
    BooksList = new LinkedList();
  }  public void addBook(Book book) {
    BooksList.add(book);
  }  public Iterator getBookList() {
    return BooksList.iterator();
  }
}
package scwcd.lab04;import javax.servlet.*;
import java.io.*;
import java.util.*;public class InitializeBookList implements ServletContextListener {
  public void contextInitialized(ServletContextEvent sce) {
    
    // 取得 ServletContext 对象
    ServletContext context = sce.getServletContext();
    
    // 读取 recommendedBooks 起始参数值 
    // 此 context 起始参数定义在 web.xml
    String booklist = context.getInitParameter("BookListFile");
    InputStream is = null;
    BufferedReader br = null;    try {
      // 读取 data/booklist.txt 文件内容
      is = context.getResourceAsStream(booklist);
      br = new BufferedReader(new InputStreamReader(is));
      
      String bookDetails;   // 存放从 booklist.txt 读取的每一条数据
      GoodBooks books = new GoodBooks();      // 依序取出“书名”、“作者”、“出版社”、“ISBN”、“售价”等数据
      while ( (bookDetails = br.readLine()) != null ) {
        StringTokenizer tokens = new StringTokenizer(bookDetails, "|");
        String name = tokens.nextToken();
        String author = tokens.nextToken();
        String publisher = tokens.nextToken();
        String isbn = tokens.nextToken();
        String price = tokens.nextToken();
        // 建立一个 Book 对象
        Book b = new Book(name, author, publisher, isbn, price);
         // 将 Book 对象加入 books 对象(books对象将包含多本书籍数据) 
        books.addBook(b);
      }
      // 将 books 对象存入 ServletContext 对象的属性(allBooks), 
      // 未来 ShowGoodBooks 这个 Servelt 将从 Servletcontext 对象
      // 内取出 allBooks 属性
      context.setAttribute("allBooks", books);
      context.log("Web 应用程序初始化成功完成!");
      is.close();
      br.close(); 
    } catch (Exception e) {
      context.log("Web 应用程序初始化发生问题!!", e);
    } 
  }
  public void contextDestroyed(ServletContextEvent sce) {}
}
package scwcd.lab04;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;public class ShowGoodBooks extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
         throws IOException {
    ServletContext context = getServletContext();
    
    // 从 ServletContext 对象取出 allBooks 属性
    // (参考 InitializeBookList.java 第 43 行)
    GoodBooks books = (GoodBooks) context.getAttribute("allBooks");
    Iterator items = books.getBookList();    response.setContentType("text/html;charset=GB2312");
    PrintWriter out = response.getWriter();    out.println("<HTML>");
    out.println("<HEAD>");
    out.println("<TITLE>Java 好书推荐</TITLE>");
    out.println("</HEAD>");
    out.println("<H2>Java 好书推荐</H2>");
    out.println("<TABLE border=1  WIDTD=100%");
    
    // 显示栏位名称
    out.println("<TR>");
    out.println("<TD bgcolor=#C0C0C0>书名</TD>");
    out.println("<TD bgcolor=#C0C0C0>作者</TD>");
    out.println("<TD bgcolor=#C0C0C0>出版社</TD>");
    out.println("<TD bgcolor=#C0C0C0>ISBN</TD>");
    out.println("<TD bgcolor=#C0C0C0>售价</TD>");
    out.println("</TR>");
    
    // 显示每一条书籍数据
    while ( items.hasNext() ) {
      Book book = (Book) items.next();
      out.println("<TR>");
      out.println("<TD>" + book.getName() + "</TD>");
      out.println("<TD>" + book.getAuthor() + "</TD>");
      out.println("<TD>" + book.getPublisher() + "</TD>");
      out.println("<TD>" + book.getIsbn() + "</TD>");
      out.println("<TD>" + book.getPrice() + "</TD>");
      out.println("</TR>");
    }
    out.println("</TABLE>");
    out.println("</BODY>");
    out.println("</HTML>");
  }
}当编译Book.java是可以通过,但编译GoodBooks.java时,提示
GoodBooks.java:13: cannot resolve symbol
symbol  : class Book
location: class scwcd.lab04.GoodBooks
  public void addBook(Book book) {
                      ^
1 error

解决方案 »

  1.   

    package scwcd.lab04;import java.util.*;
    你这里只是声明了这个Goodbook类是scwcd.lab04包和只是import 了java.util.*;
    这个包,而没有import  Book这个包,当然就找不到book这个类了,所以你应该用import scwcd.lab04.*来导入这个包,然后这样才可以调用book类。注意:不要以为两个同包的类就不用import就可以直接调用,这个错误的。解析器虽然是在同一个包中找到了你的book类,但是它不知道它是scwcd.lab04这个包,以为是默认包的,但是检测里面的代码时结果发现却是scwcd.lab04包,就和它认为的默认包有矛盾,所以报错,因此你需要申明包的import。