目前我有段代码:
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<jsp:directive.page import="java.util.HashSet" />
<jsp:directive.page import="com.shop.dao.UserDAO" />
<jsp:directive.page import="java.util.Iterator" />
<jsp:directive.page import="java.util.Set;" /><html>
<head>
<title>My JSP 'index.jsp' starting page</title> </head> <body>
<%
UserDAO uu = new UserDAO();
Set set = uu.getAllUsers();
Iterator it = set.iterator();
while (it.hasNext()) {
out.print(it.next());
}
//out.print("dfdfdff");
%>
</body>
</html>
运行出来的结果竟然是报错 其中UserDAO 是在java项目下编写好的 也测试过 代码没有问题 就放在jsp上就出现问题 请大家帮我看看!!错误信息如下:HTTP Status 500 - 
________________________________________
type Exception report
message 
description The server encountered an internal error () that prevented it from fulfilling this request.
exception 
org.apache.jasper.JasperException: Exception in JSP: /index.jsp:4744: 
45:  <%
46:  UserDAO uu = new UserDAO();
47:  Set set = uu.getAllUsers();
48:  Iterator it = set.iterator();
49:  while (it.hasNext()) {
50:  out.print(it.next());
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause 
java.lang.NullPointerException
com.shop.dao.UserDAO.getAllUsers(UserDAO.java:150)
org.apache.jsp.index_jsp._jspService(index_jsp.java:96)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.

解决方案 »

  1.   

    个人认为这个问题真是你的UserDao抛出的异常!能把你的UserDao代码贴出来吗?
      

  2.   

    没有问题(我自己写了一个测试类,测试下来没有问题) 
     
    package com.shop.dao;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.HashSet;
    import java.util.Set;import com.shop.domain.User;// 负责对 User类所有对象的 增删改查
    public class UserDAO {
    public void insertUser(User u){
    // 负责将 User 插入数据库
    Connection con = null;
    PreparedStatement pstmt = null;
    try {
    Class.forName(DBHelp.DriverName);
     con = 
    DriverManager.getConnection(DBHelp.Url,DBHelp.UName,DBHelp.PWD);
    String sql = "insert into users(username,password) values(?,?)";
     pstmt= con.prepareStatement(sql);
    pstmt.setString(1,u.getUsername());
    pstmt.setString(2,u.getPassword());
    pstmt.execute();

    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    finally{
    try {
    pstmt.close();
    con.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }


    }
    public void updateUser(User u){
    // 负责将 User 更新到数据库
    Connection con = null;
    PreparedStatement pstmt = null;
    try {
    Class.forName(DBHelp.DriverName);
     con = 
    DriverManager.getConnection(DBHelp.Url,DBHelp.UName,DBHelp.PWD);
    String sql = "update users set username=?,password=? where uid=?";
     pstmt= con.prepareStatement(sql);
    pstmt.setString(1,u.getUsername());
    pstmt.setString(2,u.getPassword());
    pstmt.setInt(3,u.getUid());
    pstmt.execute();

    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    finally{
    try {
    pstmt.close();
    con.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    }
    public void deleteUser(User u){
    // 负责将 User 从数据库删除
    Connection con = null;
    PreparedStatement pstmt = null;
    try {
    Class.forName(DBHelp.DriverName);
     con = 
    DriverManager.getConnection(DBHelp.Url,DBHelp.UName,DBHelp.PWD);
    String sql = "delete from users where uid=?";
     pstmt= con.prepareStatement(sql);
    pstmt.setInt(1,u.getUid());
    pstmt.execute();

    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    finally{
    try {
    pstmt.close();
    con.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    }

    public  Set<User> getAllUsers(){
    // 得到所有的 User
    Connection con = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    Set<User> set = null;
    try {
    Class.forName(DBHelp.DriverName);
     con = 
    DriverManager.getConnection(DBHelp.Url,DBHelp.UName,DBHelp.PWD);
    String sql = "select * from users";
     pstmt= con.prepareStatement(sql);
     rs= pstmt.executeQuery();

    // 查询结果为null,直接返回
    if(rs==null)
    return null;
    set = new HashSet<User>();
    User user =null;
    while(rs.next()){
    user = new User();
    user.setUid(rs.getInt("uid"));
    user.setUsername(rs.getString("username"));
    user.setPassword(rs.getString("password"));
    set.add(user);
    }

    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    finally{
    try {
    rs.close();
    pstmt.close();
    con.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    return set;
    }

    public  Set getUserOfUsername(String username){
    // 根据用户名,得到对应的用户
    Connection con = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    Set<User> set = null;
    try {
    Class.forName(DBHelp.DriverName);
     con = 
    DriverManager.getConnection(DBHelp.Url,DBHelp.UName,DBHelp.PWD);
    String sql = "select * from users where username=?";
     pstmt= con.prepareStatement(sql);
     pstmt.setString(1, username);
     rs= pstmt.executeQuery();

    // 查询结果为null,直接返回
    if(rs==null)
    return null;
    set = new HashSet<User>();
    User user =null;
    while(rs.next()){
    user = new User();
    user.setUid(rs.getInt("uid"));
    user.setUsername(rs.getString("username"));
    user.setPassword(rs.getString("password"));
    set.add(user);
    }

    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    finally{
    try {
    rs.close();
    pstmt.close();
    con.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    return set;
    }

    }
      

  3.   

    java.lang.NullPointerException 
    空指针异常 楼主自己检查一下 
      

  4.   

    47: Set set = uu.getAllUsers(); com.shop.dao.UserDAO.getAllUsers(UserDAO.java:150) 150行是哪一行呢?呃贴代码请使用“插入源代码”的方式
      

  5.   

    你在jsp页面头部加上导入User类所在的包路径
    因为你的47行代码中返回的是<User>类型你试试
      

  6.   

    要纠正楼主一下,html页面肯定做不了这么复杂的操作,很显然这是一个jsp页面
      

  7.   

      没错  这是一个jsp 页面 。 我把泛型去掉 也是一样报错。 另外我还做了一个光连接mysql的test , 在控制台上运行好的 但是在 jsp 页面里面就出现异常了 请问这是什么情况??  谢谢!!!