java catch空指针异常处理_这种情况的 javaweb空指针异常如何解决?

一个javaweb项目,项目结构如下:

40cb93d8daa6315e6134d6eb8b6c409d.png

BaseDao中的数据库操作类:public class BaseDao {

private Connection conn=null;

private ResultSet rs=null;

private PreparedStatement presta=null;

private  Connection getConnection(){

//String className=ConfigManager.getInstance().getString("jdbc.driver_class");

String url=ConfigManager.getInstance().getString("jdbc.connection.url");

String username=ConfigManager.getInstance().getString("jdbc.connection.username");

String pwd=ConfigManager.getInstance().getString("jdbc.connection.password");

try {

conn=DriverManager.getConnection(url,username,pwd);

} catch (SQLException e) {

e.printStackTrace();

}

return conn;

}

/**

* @Description: 判断连接是否打开

* @param @return

* @return boolean

* @throws

* @author ReticentZ

* @date 2016年4月6日

*/

public int executeUpdate(String sql,Object []params){

int updateCount=0;

if(conn==null){

conn=getConnection();

}

try {

presta=conn.prepareStatement(sql);

if(params!=null && params.length>0){

for(int i=0;i

presta.setObject(i+1, params[i]);

}

}

updateCount=presta.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

}

return updateCount;

}

public ResultSet executeQuery(String sql,Object []params){

rs=null;

if(conn==null){

conn=getConnection();

}

System.out.println(conn);

try {

presta=conn.prepareStatement(sql);

if(params!=null && params.length>0){

for(int i=0;i

presta.setObject(i+1, params[i]);

}

}

rs=presta.executeQuery();

} catch (SQLException e) {

e.printStackTrace();

}

return rs;

}

public boolean closeResource(){

//按照先创建后释放的顺序释放

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(presta!=null){

try {

presta.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(conn!=null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

conn=null;

}

return true;

}

}

AlbumDao类:

AlbumDaoImpl继承了BaseDao数据库操作类和AlumDao接口,其中有一个函数是返回部分查询值(getHostAlbumList(),就是在前端页面调用这个函数时出了空指针!):public class AlbumDaoImpl extends BaseDao implements AlbumDao {

private ArrayList relist=new ArrayList();

public static void main(String[] args) {

AlbumDaoImpl test=new AlbumDaoImpl();

ArrayList list=new ArrayList();

list=test.getHostAlbumList();

for(Album e:list){

System.out.println(e.getGenreid()+"\t"+e.getArtist()+"\t"+e.getTitle());

}

}

@Override

public ArrayList getAlbumList() {

String sql="select * from album";

Object []params={};

ResultSet res=null;

res=this.executeQuery(sql,params);

//System.out.println(res);

try {

while(res.next()){

Album reAlbum=new Album();

//System.out.println(id+"\t"+artist+"\t"+title+"\t"+price+"\t"+dateReleased+"\t"+description);

reAlbum.setId(res.getInt("id"));

reAlbum.setArtist(res.getString("artist"));

reAlbum.setDateReleased(res.getDate("DateReleased"));

reAlbum.setDescription(res.getString("Description"));

reAlbum.setPrice(res.getDouble("Price"));

reAlbum.setGenreid(res.getInt("Genreid"));

reAlbum.setTitle(res.getString("Title"));

relist.add(reAlbum);

}

} catch (SQLException e) {

e.printStackTrace();

}

finally{

this.closeResource();

}

return relist;

}

@Override

public ArrayList getAlbumsByGenreId(int genreid) {

String sql="select * from album where Genreid=?";

Object []params={genreid};

ResultSet res=null;

res=this.executeQuery(sql,params);

//System.out.println(res);

try {

while(res.next()){

Album reAlbum=new Album();

//System.out.println(ids+"\t"+artist+"\t"+title+"\t"+price+"\t"+dateReleased+"\t"+description);

reAlbum.setId(res.getInt("id"));

reAlbum.setArtist(res.getString("artist"));

reAlbum.setDateReleased(res.getDate("DateReleased"));

reAlbum.setDescription(res.getString("Description"));

reAlbum.setPrice(res.getDouble("Price"));

reAlbum.setGenreid(res.getInt("Genreid"));

reAlbum.setTitle(res.getString("Title"));

relist.add(reAlbum);

}

} catch (SQLException e) {

e.printStackTrace();

}

finally{

this.closeResource();

}

return relist;

}

@Override

public ArrayList getAlbumsByArtist(String artist) {

String sql="select * from album where Artist=?";

Object []params={artist};

ResultSet res=null;

res=this.executeQuery(sql,params);

//System.out.println(res);

try {

while(res.next()){

Album reAlbum=new Album();

//System.out.println(ids+"\t"+artist+"\t"+title+"\t"+price+"\t"+dateReleased+"\t"+description);

reAlbum.setId(res.getInt("id"));

reAlbum.setArtist(res.getString("artist"));

reAlbum.setDateReleased(res.getDate("DateReleased"));

reAlbum.setDescription(res.getString("Description"));

reAlbum.setPrice(res.getDouble("Price"));

reAlbum.setGenreid(res.getInt("Genreid"));

reAlbum.setTitle(res.getString("Title"));

relist.add(reAlbum);

}

} catch (SQLException e) {

e.printStackTrace();

}

finally{

this.closeResource();

}

return relist;

}

@Override

public boolean addAlbums(Album newalbum) {

boolean reBool=false;

int updateCount=-1;

String sql="insert into album(id,genreid,artist,title,price,dateReleased,description) values(?,?,?,?,?,?,?)";

Object[] params={

newalbum.getId(),

newalbum.getGenreid(),

newalbum.getArtist(),

newalbum.getTitle(),

newalbum.getPrice(),

newalbum.getDateReleased(),

newalbum.getDescription()};

updateCount=this.executeUpdate(sql, params);

if(updateCount>0)

reBool=true;

return reBool;

}

@Override

public boolean deleteAlbums(int id) {

boolean reBool=false;

int updateCount=-1;

String sql="delete from album where id=?";

Object[] params={id};

updateCount=this.executeUpdate(sql, params);

if(updateCount>0)

reBool=true;

return reBool;

}

@Override

public boolean deleteAlbums(String artist) {

boolean reBool=false;

int updateCount=-1;

String sql="delete from album where Artist=?";

Object[] params={artist};

updateCount=this.executeUpdate(sql, params);

if(updateCount>0)

reBool=true;

return reBool;

}

@Override

public void updateAlbums(int id, Album album) {

String sql="update Album set genreid=?,artist=?,title=?,price=?,dateReleased=?,description=? where id=?";

Object []params={

album.getGenreid(),

album.getArtist(),

album.getTitle(),

album.getPrice(),

album.getDateReleased(),

album.getDescription(),

album.getId()

};

this.executeUpdate(sql, params);

}

@Override

public Album getAlbumsById(int id) {

String sql="select * from album where id=?";

Album reAlbum=new Album();

Object []params={id};

ResultSet res=null;

res=this.executeQuery(sql,params);

//System.out.println(res);

try {

while(res.next()){

//System.out.println(ids+"\t"+artist+"\t"+title+"\t"+price+"\t"+dateReleased+"\t"+description);

reAlbum.setId(res.getInt("id"));

reAlbum.setArtist(res.getString("artist"));

reAlbum.setDateReleased(res.getDate("DateReleased"));

reAlbum.setDescription(res.getString("Description"));

reAlbum.setPrice(res.getDouble("Price"));

reAlbum.setGenreid(res.getInt("Genreid"));

reAlbum.setTitle(res.getString("Title"));

}

} catch (SQLException e) {

e.printStackTrace();

}

finally{

this.closeResource();

}

return reAlbum;

}

@Override

public ArrayList getHostAlbumList() {

Album temp=new Album();

int id=0;

int []albumnum =new int[25];

for(int i=0;i<25;i++){

albumnum[i]=0;

}

int count=0;

while(count<9){

id=(int) (Math.random()*25);

if(id==0)continue;

if(albumnum[id]==0){

count++;

temp=this.getAlbumsById(id);

relist.add(temp);

System.out.println(temp.getId()+"\t"+temp.getTitle());

albumnum[id]=1;

}

}

return relist;

}

}AlbumService类:(就是AlbumDaoImpl的服务层)

public class AlbumServiceImpl implements AlbumService {

private ArrayList reList=new ArrayList();

private AlbumDao albumdao=new AlbumDaoImpl();

private Album al;

//public static void main(String[] args) {

//AlbumService albumService=new AlbumServiceImpl();

//ArrayList list=new ArrayList();

//list=albumService.getHostAlbumList();

//

//for(Album e:list){

//System.out.println(e.getTitle());

//}

//}

@Override

public ArrayList getAlbumList() {

reList=albumdao.getAlbumList();

return reList;

}

@Override

public ArrayList getAlbumsByGenreId(int genreid) {

reList=albumdao.getAlbumsByGenreId(genreid);

return reList;

}

@Override

public ArrayList getAlbumsByArtist(String artist) {

reList=albumdao.getAlbumsByArtist(artist);

return reList;

}

@Override

public boolean addAlbums(Album newalbum) {

boolean flag=false;

flag=albumdao.addAlbums(newalbum);

return flag;

}

@Override

public boolean deleteAlbums(int id) {

boolean flag=false;

flag=albumdao.deleteAlbums(id);

return flag;

}

@Override

public boolean deleteAlbums(String artist) {

boolean flag=false;

flag=albumdao.deleteAlbums(artist);

return flag;

}

@Override

public void updateAlbums(int id, Album album) {

albumdao.updateAlbums(id, album);

}

@Override

public Album getAlbumsById(int id) {

al=albumdao.getAlbumsById(id);

return al;

}

@Override

public ArrayList getHostAlbumList() {

reList=albumdao.getHostAlbumList();

return reList;

}

}

无论在AlbumDaoImpl和AlbumServiceImpl里这个getHostAlbumList()函数都是可以实现的,并且拿到数据的(后端测试图如下):

2690f8ad46496c046614dee3d4025cf7.png

c0c0a8e008d82ecc3e1b9443affab3d3.png

但是在前端的jsp页面中:

最新热销唱片

AlbumService albumService=new AlbumServiceImpl();

Album temp=new Album();

ArrayList list=new ArrayList();

list=albumService.getHostAlbumList();

for(Album e:list){

int id=e.getId();

String name=e.getTitle();

String picPath=String.valueOf(id)+".jpg";

%>

    

}

%>

执行的时候是空指针异常!异常信息如下:

控制台信息:

155c7541cd4cba26454f752d3b807e20.png

网页信息:

05401e9e79d9ee4395847efcf6aa8dac.png

不明白为什么在前端会有空指针异常,但是后端数据又可以取出来!!!而且引起空指针异常的路径问题,既然在后端都没事,为什么在前端就无法识别。难不成在前端还要加载mysql驱动= =||。

最近百度找到一个javaweb同为空指针问题的解决方案,贴出来大家参考下:空指针异常。但是我所使用的lib中并没有这两个jar包...

求各路大神指点!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java EE 项目的目录结构可以根据具体的需求进行灵活设计,但一般情况下,推荐使用以下的标准目录结构: ``` project ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ ├── controller │ │ │ ├── dao │ │ │ ├── entity │ │ │ ├── service │ │ │ └── util │ │ ├── resources │ │ │ ├── mapper │ │ │ └── db.properties │ │ └── webapp │ │ ├── WEB-INF │ │ │ ├── classes │ │ │ ├── lib │ │ │ └── web.xml │ │ ├── css │ │ ├── js │ │ ├── images │ │ └── index.jsp │ └── test │ ├── java │ └── resources ├── target ├── pom.xml └── README.md ``` 其中,各个目录的作用如下: - `src/main/java`:存放项目的 Java 源代码,按照包名分层,一般包括 `controller`、`dao`、`entity`、`service` 和 `util` 等包; - `src/main/resources`:存放项目的配置文件和资源文件,一般包括数据库连接配置文件 `db.properties`、MyBatis 的 mapper 文件等; - `src/main/webapp`:存放 Web 应用的 Web 资源,包括 JSP 页面、CSS 样式表、JavaScript 脚本等; - `src/test/java`:存放项目的测试代码; - `src/test/resources`:存放测试代码所需要的资源文件; - `target`:存放编译后的 .class 文件、打包后的 .war 文件等; - `pom.xml`:Maven 项目管理工具的配置文件; - `README.md`:项目说明文件。 以上是一种常见的 Java EE 项目目录结构,但并不是唯一的标准。在实际开发中,可以根据项目的具体需求进行合理的调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值