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