【求助】一个关于JSP的问题

TPOF314 2012-08-16 08:16:09

....此处省略部分代码....
<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
<%@ page import="realEstate.*"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<jsp:useBean id="db" class="realEstate.DataSource" scope="session"/>
<jsp:useBean id="my_search" class="realEstate.Search" scope="session"/>
<jsp:setProperty name="my_search" property="*" />

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Search Result</title>
</head>
<body>
<%
ArrayList<Property> resultList = my_search.search(db);
%>
...此处省略部分代码....
</body>
</html>


上面是我一个作业的部分代码。中间<body>下面的那句出错了。
其中Property、Search和DataSource都是我自己写的类,放在一个叫realEstate的包里面。
search(DataSource db)是一个Search类里面的一个方法。不知道怎么回事,出错的那一句代码出现了NullPointerException错误。请教一下各位,有谁知道这是怎么回事?
...全文
98 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复


DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
FileInputStream fStream = new FileInputStream("/home/wesley/rent.xml");

还是用这样的吧Configuration().configure().buildSessionFactory();
新的貌似不稳定,有问题
TPOF314 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

71行出现空指针
这个问题对初学者蛮常见的
尤其是想在用同一个jsp文件同时发送和接收数据的时候

有几个地方楼主可以注意一下
1 在servlet里有没有设置request.setAttribute
2 javaBean文件有没有设置初始值(单纯的提取数据可能没事,但是如果牵扯到逻辑业务没有初始值很容易空指针)
3 如果楼主在javaBean文件里设置了有一个或多个参数的构造函数……
[/Quote]

谢谢了,第2点和第3点我都注意到了,也检查过了。其中第3点应该不是什么大问题,因为我的全部类都只有一个构造函数。
第二点,我已经在构造函数里面把初始值设过了,应该也不是什么大问题。
第一点有点不太明白。能帮我具体讲一下request.setAttribute的用处吗?是不是一开始要加这么两句:

<% request.setAttribute("db", db); %>
<% request.setAttribute("my_search", my_search); %>


我试了一下,貌似没什么用~~
TPOF314 2012-08-16
  • 打赏
  • 举报
回复
这是DataSource类


...前面import部分省略...
/**
* @author TPOF314
*/
public class DataSource {

private Document domTree;
private ArrayList<Property> properties;

public DataSource() throws ParseException {
try {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
FileInputStream fStream = new FileInputStream("/home/wesley/rent.xml");

domTree = (Document) builder.parse(fStream);
properties = new ArrayList<Property>();

// Fill data
Node root = domTree.getFirstChild();
NodeList children = root.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node propNode = children.item(i);
properties.add(DataSource.getProperty(propNode));
}

} catch (FileNotFoundException ex) {
Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParserConfigurationException ex) {
Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex);
} catch (SAXException ex) {
Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex);
}
}

private boolean checkSuburb(Property prop, String suburbs[]) {
for (int i=0; i<suburbs.length; i++) {
if (prop.getSuburb().equals(suburbs[i])) {
return true;
}
}
return false;
}

public ArrayList<Property> searchBySuburb(String suburb) {
System.out.println("Suburb: " + suburb);
if (suburb.equals("Any") || suburb.equals("")) {
return (ArrayList)properties.clone();
}
else {
ArrayList<Property> resultSet = new ArrayList<Property>();
String suburbs[] = suburb.split("; ");
for (int i=0; i<properties.size(); i++) {
if (checkSuburb(properties.get(i), suburbs)) {
resultSet.add(properties.get(i));
}
}
return resultSet;
}
}

public void filterByType(ArrayList<Property> propList, String type) {
if (!type.equals("Any")) {
int len = propList.size();
for (int i=len-1; i>=0; i--) {
Property prop = propList.get(i);
if (!prop.getType().equals(type)) {
propList.remove(i);
}
}
}
}

public void filterByBedroom(ArrayList<Property> propList, int bedroom) {
....中间代码和前面类似,省略....
}

public void filterByRent(ArrayList<Property> propList, int rent) {
....中间代码和前面类似,省略....
}

public void filterByDate(ArrayList<Property> propList) {
....中间代码和前面类似,省略....
}

public Document getDomTree() {
return this.domTree;
}

public ArrayList<Property> getProperty() {
return (ArrayList)this.properties.clone();
}

private static Property getProperty(Node node) throws ParseException {
....中间代码省略...;
}
}
biyoutzx 2012-08-16
  • 打赏
  • 举报
回复
71行出现空指针
这个问题对初学者蛮常见的
尤其是想在用同一个jsp文件同时发送和接收数据的时候

有几个地方楼主可以注意一下
1 在servlet里有没有设置request.setAttribute
2 javaBean文件有没有设置初始值(单纯的提取数据可能没事,但是如果牵扯到逻辑业务没有初始值很容易空指针
3 如果楼主在javaBean文件里设置了有一个或多个参数的构造函数,注意在调用的时候哪怕是写一个没有内容的构造函数也一定要补上,否则也容易出现错误

希望对你有所帮助
以上
  • 打赏
  • 举报
回复
DataSource.java类贴上来看看。
TPOF314 2012-08-16
  • 打赏
  • 举报
回复
我查了一下db和my_search,都不是空的.....
  • 打赏
  • 举报
回复
db为空吧,你打印下db看看有值没有?
angel 2012-08-16
  • 打赏
  • 举报
回复
DataSource.java:71
这个类的 71行出现空指针,你可以debug看下是什么参数为空
TPOF314 2012-08-16
  • 打赏
  • 举报
回复
java.lang.NullPointerException
realEstate.DataSource.searchBySuburb(DataSource.java:71)
realEstate.Search.search(Search.java:55)
org.apache.jsp.searchResult_jsp._jspService(searchResult_jsp.java:112)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

这些是错误提示~~
请各位高手过目。
TPOF314 2012-08-16
  • 打赏
  • 举报
回复
我自己找到原因了,是DataSource对象里面有一个String变量的值没有传进去,不过还是要谢谢各位帮忙!
TPOF314 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
还是用这样的吧Configuration().configure().buildSessionFactory();
新的貌似不稳定,有问题
[/Quote]

这个没什么关系。
Sun权威教程--《J2EE Tutorial中文版》 作者:Stephanie Bodoff,Dale Green,Kim Haase,Eric Jendrock,Monica Pawlan,Beth Stearns 翻译参与人员:sharetop,worldheart,zhaoy,bruce等 出版商:铁道出版社 简介:    或许你已经非常熟悉Java程序开发,但是现在,你应该进入更高一个层次,使用Java2平台企业版(J2EE)来创建企业级应用程序。《The J2EETM Tutorial 中文版》以丰富的实例提供独一无二的技术指导,对于每一位在J2EE平台上开发和部署应用程序的开发人员来说,都是一本案头必备的参考手册。   《The J2EETM Tutorial 中文版》的作者是Sun Microsystem公司Java开发小组资深的开发人员,与另一部取得空前成功的《The JavaTM Tutorial》一样,建立了与读者之间最为有效的交互途径。同时,在本书的编写过程中,也综合了大量来自于最终用户和系统设计师们的建议与反馈,保证了《The J2EETM Tutorial 中文版》能真正提供有价值的技术指导。你会发现书中使用了许多构思精巧的实例程序(包括源码)来描述J2EE关键的概念。此外,简明扼要的文字说明也有助于你快速掌握J2EE平台的多项技术,包括:   ☆ Enterprise JavaBean   ☆ Java Servlet   ☆ JavaServer Pages   ☆ Java Message Service (JMS,Java消息服务)   ☆ Java Naming and Directory Interface (JNDI,Java名字与目录接口)   ☆ XML   ☆ J2EE Connector Architecture (J2EE连接器架构)   ☆ JavaMail   ☆ JDBC   当你准备创建自己的大型企业级应用系统时,希望求助于无以伦比的技术指导、知识和经验时,你会发现在《The J2EETM Tutorial 中文版》一书中你能找到所有的一切。   Stephanie Bodoff, Dale Green, Kim Haase, 和Eric Jendrock是Sun Microsystem公司的专职作家,他们与Java开发人员团体(JDC)的Monica Pawlan一起编写了J2EE平台的联机文档。Beth Stearns是Computer Ease出版社的总裁。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧