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/下
[解决办法]
[解决办法]
看不懂!我也是新手啊!
[解决办法]
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()); } } }