读书人

jsp 通过 javabean 链接 access 的相对

发布时间: 2012-03-16 16:34:56 作者: rapoo

jsp 通过 javabean 链接 access 的相对路径怎么设置呀??

在eclipse下我的工程名是Myweb,
Myweb/webcontent下放的是jsp文件,
Myweb/database下放的是access数据库文件


我在DBConnAccess()写的
try {
dbpath=URLDecoder.decode(this.getClass().getResource("/").getPath()
+"database/mymuesli.mdb ","gb2312");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


报错:


org.apache.jasper.JasperException: java.lang.NullPointerException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

急需解决

[解决办法]
你这样写需要把mdb文件放到Myweb/WEB-INF/classes/database/下
[解决办法]
补充一下,安全的做法是:
1、mdb文件放到classpath下(通常是WEB-INF/classes)
2、程序中用dbpath=URLDecoder.decode(this.getClass().getResource("/database/mymuesli.mdb").getPath(),"gb2312");

getResource("/")只能返回ClassPath中的一个路径(ClassPath是可以设置N多路径的),
通过隔天Resource("/")+相对路径,也是不能保证找到的。

[解决办法]
把mdb文件放到Myweb/WEB-INF/classes/database/下
[解决办法]

引用楼主 liujiaqiid 的帖子:

在eclipse下我的工程名是Myweb,
Myweb/webcontent下放的是jsp文件,
Myweb/database下放的是access数据库文件


我在DBConnAccess()写的
try {
dbpath=URLDecoder.decode(this.getClass().getResource("/").getPath()
+"database/mymuesli.mdb ","gb2312");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


报错:


[解决办法]
看不懂!我也是新手啊!
[解决办法]
System.out.println(this.getClass().getResource("/").getPath()+"database/mymuesli.mdb);

看你的输出路径是什么,然后将相应的文件,放到合适的目录。。。。
[解决办法]
额,能够把你的工程发布到独立容器下再测试吗?
或者根据错误提示,把你的数据库放到那个位置。
[解决办法]
用这种方法来吧,但这个要配置一下
accessdriver = "sun.jdbc.odbc.JdbcOdbcDriver";
accessURL = "jdbc:odbc:数据库名";

[解决办法]
因为这个问题涉及到机器环境,所以我没法告诉你放在哪里就一定可以,
用绝对路径肯定不是办法。

我再说一下java寻找资源的方式:
我们都知道java依赖于CLASSPATH这个参数的配置来加载类,那么通过getResource()方法加载一个资源也是遵循同样的道理,
CLASSPATH代表多个目录或者jar,
而getResource("/path/any.file")
这个方法的第一个“/”就代表CLASSPATH的所有目录,在CLASSPATH所指定的任意目录下,有path子目录下有any.file,
则返回这个资源(文件)的URL.

一般如果我们手工运行一个java main程序,我们通常自己设置classpath或者使用操作系统的环境变量设置classpath,
而在web容易中,以tomcat为例:
classpath之一在webapp/youProject/WEB-INF/classes目录下。


所以,我要求你的WAR包中,数据库文件放在 WEB-INF/classes/database/mymuesli.mdb
那么,你可以通过如下代码:
Java code
URL dbUrl=Class.class.getResource("/a.jpg");//("/database/mymuesli.mdb");         File dbFile=new File(dbUrl.getFile());         String dbpath = dbFile.getAbsolutePath(); 


[解决办法]
上面回复中的
getResource("/a.jpg");
是我自己测试的,
你换成
getResource("/database/mymuesli.mdb");
[解决办法]
顶 期待高手 关注中!
[解决办法]
好多高手啊!跟来学习学习!
[解决办法]
多摸索,多尝试,学会调试的方法!这样进步才快!
[解决办法]
我自己写的类在项目中用,可参考下.

Java code
package com.data;import java.sql.*;public class dataaccess{private String odbcQuery;private Connection odbcconn;private Statement odbcstmt;private String myquerystr;private ResultSet sqlRst;private String realpath;public dataaccess(){  odbcQuery=null;  odbcconn=null;  odbcstmt=null;  myquerystr=null;  sqlRst=null;  realpath=null;        try{     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");    }    catch(ClassNotFoundException e){        e.printStackTrace();    }}public dataaccess(String mysql){   this.myquerystr=mysql;}//设置SQL语句public void setSqlstr(String mysql){   this.myquerystr=mysql;}//设置数据库的物理路径public void setrealpath(String rpath){   this.realpath=rpath;}//初始化需要的数据public void initial(){    try{         String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+realpath;        this.odbcconn = DriverManager.getConnection(url);         this.odbcstmt = odbcconn.createStatement();         this.odbcQuery = this.myquerystr;    }catch (SQLException e)     {         e.printStackTrace();    } }//执行添加删除修改public void exeUpdate(){    try{        odbcstmt.executeUpdate(this.odbcQuery);        }catch(SQLException e){        e.printStackTrace();    }}//执行查询public ResultSet exeQuery(){    try{        return odbcstmt.executeQuery(this.odbcQuery);        }    catch(SQLException e)    {        return null;    }}public void Closedb(){                     try                     {                 if(sqlRst!=null) sqlRst.close();                       if(odbcstmt!=null) odbcstmt.close();                           if(odbcconn!=null) odbcconn.close();                     }                     catch(Exception e)                     {                             system.out.println(e.tostring());                     }   }   } 

读书人网 >Java Web开发

热点推荐