`
leng_cn
  • 浏览: 301845 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过JSP获取CLASS目录文件列表的问题:)

阅读更多

近一个周研究一个开源的项目opencustomer(http://sourceforge.net/forum/forum.php),下载部署,确怎么都不成功,发生错误如下:

24 May 2007 15:17:46 - org.apache.slide.common.Domain - INFO - Namespace configu 
ration complete 
ERROR [24.05.07 15:17:52]| 6599 a].[localhost].[/opencustomer]: StandardWrappe 
r.Throwable 
java.lang.NullPointerException 
at org.opencustomer.framework.util.LocaleUtility.load(LocaleUtility.java 
:88) 
at org.opencustomer.webapp.struts.ActionServlet.init(ActionServlet.java: 
162) 
at javax.servlet.GenericServlet.init(GenericServlet.java:211) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper. 
java:1105) 
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:93 
2) 
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContex 
t.java:3951) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4 
225) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase 
.java:759) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:73 
9) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524) 
 
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.jav 
a:904) 
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j 
ava:867) 
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474 

at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122) 
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java 
:310) 
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl 
eSupport.java:119) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021) 
 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013) 
 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442 

at org.apache.catalina.core.StandardService.start(StandardService.java:4 
50) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709 

at org.apache.catalina.startup.Catalina.start(Catalina.java:551) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432) 
ERROR [24.05.07 15:17:52]| 6609 a].[localhost].[/opencustomer]: Servlet /openc 
ustomer threw load() exception 
java.lang.NullPointerException 
at org.opencustomer.framework.util.LocaleUtility.load(LocaleUtility.java 
:88) 
at org.opencustomer.webapp.struts.ActionServlet.init(ActionServlet.java: 
162) 
at javax.servlet.GenericServlet.init(GenericServlet.java:211) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper. 
java:1105) 
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:93 
2) 
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContex 
t.java:3951) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4 
225) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase 
.java:759) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:73 
9) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524) 
 
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.jav 
a:904) 
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j 
ava:867) 
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474 

at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122) 
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java 
:310) 
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl 
eSupport.java:119) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021) 
 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013) 
 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442 

at org.apache.catalina.core.StandardService.start(StandardService.java:4 
50) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709 

at org.apache.catalina.startup.Catalina.start(Catalina.java:551) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)<!---->
把我郁闷坏了,经过不断研究,发生是当TOMCAT在启动这个项目时,需要加载classes目录下的一些配置文件,而这个空指标的错误是找不到配置文件

原始代码在获取classes用的方法如下:

 File defaultLocale = new File(LocaleUtility.class.getClassLoader().getResource(name+ending).getFile());
  File[] localeFiles = defaultLocale.getParentFile().listFiles(new FileFilter() { //运行到此时,就报了空指针,因为listFiles
返回的localeFiles是空值,可是我输出了defaultLocale的文件都是正确的,路径也没错,可为什么就是不能列出这个文件正面的目录了??
。。。。。。。。
}

代码是没有问题的,想来想去一直以为是安全问题,到处找寻答案,走错了道,后来写了一段测试代码,输入整个类的路径看看

System.out.println(Test.class.getClassLoader().getResource("")); System.out.println(ClassLoader.getSystemResource(""));
 System.out.println(Test.class.getResource(""));
System.out.println(Test.class.getResource("/"));
System.out.println(new File("").getAbsolutePath());
System.out.println(System.getProperty("user.dir"));

结果是:

file:/d:/Tomcat%205.5/webapps/opencustomer/WEB-INF/classes/
file:/d:/Tomcat%205.5/webapps/opencustomer/WEB-INF/classes/
null
file:/d:/Tomcat%205.5/webapps/opencustomer/WEB-INF/classes/org/opencustomer/fram
ework/util/
file:/d:/Tomcat%205.5/webapps/opencustomer/WEB-INF/classes/
d:\Tomcat 5.5
d:\Tomcat 5.5

看到有什么不同了吗???对了,就是最后两个输出的路径和前面几个的输出路径完全不一样

file:/d:/Tomcat%205.5/webapps  和 d:\Tomcat 5.5

问题就出在这里,也就是说在加载时,寻找类的路径错了,于是改代码为下面的

 File defaultLocale = new File(path);//new File(LocaleUtility.class.getClassLoader().getResource(name+ending).getFile());
        File[] localeFiles = defaultLocale.getParentFile().listFiles(new FileFilter() {

OK,问题解决,哈哈,高兴之余贴了出来,供大家参考,虽然很简单,也能给一些新手一些帮助,希望遇到困难时能够多看看源码,多写些测试的东西,多输出并比较,还请高手不要见笑,哈哈

分享到:
评论

相关推荐

    JAVA类,JSP,Servlet获取工程路径.txt

    在Java Web开发过程中,经常需要获取项目的根目录或某个特定资源文件的绝对路径。这些路径信息对于加载资源文件、处理文件上传下载等功能至关重要。本文将详细介绍在Eclipse环境中通过JSP、Servlet以及Java类获取...

    通过文件流读取本地图片显示在JSP页面方法

    ### 通过文件流读取本地图片显示在JSP页面的方法详解 #### 一、概述 在Web开发中,经常会遇到需要将本地存储的图片显示在前端界面的需求。本文将详细介绍如何利用Java中的文件流技术来实现这一功能。具体来说,...

    jsp 应用获取表单元素

    JSP获取表单数据的方法:\n\n - 使用request对象:在JSP中,HttpServletRequest对象可以获取客户端发送的所有请求数据,包括表单数据。例如,对于一个名为"user"的文本框,我们可以通过request.getParameter("user...

    java遍历文件目录生成树结构txt文件

    它提供了许多方法,如`list()`、`listFiles()`等,可以用来获取指定目录下的文件或子目录列表。在`Dir.java`中,开发者可能使用了`listFiles()`方法递归地遍历每个子目录,并构建出一个树形结构。 遍历文件目录的...

    java+jsp+servlet 文件下载

    上述代码中,`fileURL`应当是通过其他方式获取的实际文件路径或名称,然后通过`href`属性设置为包含文件名的请求路径,从而触发服务器端的文件下载处理。 #### 后台处理逻辑 服务器端采用Servlet技术进行文件下载...

    jsp+struts文件上传

    然后,解析请求并获取上传的文件: ```java import org.apache.struts.upload.FormFile; public class UploadAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, ...

    Java Web程序设计任务驱动教程课后习题参考答案 - 蓝敏、周伟敏、杨茜

    * JSP 文件被 JSP 引擎进行转换后,又被编译成了 Class 文件,最终由服务器通过执行这个文件来对客户端的请求进行响应 JSP 语法 * page 指令中的 import 属性可多次出现 * taglib 指令用于引入 JSP 页面中需要使用...

    JspSmartUpload实现多文件上传

    它提供了一系列的API,使得开发者可以方便地获取上传文件的信息,如文件名、大小、类型等,并能控制文件的存储位置和重命名规则。 **2. 工作原理** 当用户在表单中选择文件并提交时,JspSmartUpload会在服务器端...

    jsp servlet 上传文件显示进度

    在IT行业中,JSP(JavaServer Pages)和Servlet是用于...总的来说,通过结合JSP、Servlet和AJAX技术,我们可以构建出一个优雅的文件上传系统,它不仅可以处理文件上传,还能提供实时的进度反馈,极大地提升了用户体验。

    jsp页面实现文件上传下载

    文件下载可以通过创建一个JSP页面或者Servlet实现。以下是一个简单的JSP示例: ```jsp String filename = request.getParameter("filename"); File file = new File(uploadPath + filename); response.set...

    java jsp实现文件上传

    选择文件: 上传文件" name="submit"&gt; ``` 2. 编写Servlet: 我们需要创建一个Servlet来处理文件上传。在Servlet中,我们将使用Apache Commons FileUpload库来解析多部分请求并获取文件。首先,确保在项目中...

    jsp servlet 上传文件

    通过上述步骤,你可以构建一个基本的JSP和Servlet合作的文件上传系统,尤其是针对图片文件的上传。在实际项目中,你可能需要进一步完善功能,如添加进度条显示、多文件上传支持等,以提高用户体验。

    jsp页面中获取servlet请求中的参数的办法详解

    在`bbs.jsp`中,我们直接通过`request.getAttribute("id")`获取之前在Servlet中设置的`id`值,并将其输出到页面上。 值得注意的是,`doPost`方法在这里没有特殊实现,仅仅调用了`doGet`。这是因为GET和POST请求的...

    使用jsp上传文件到服务器的具体方法

    选择文件: 上传" /&gt; ``` 注意`enctype="multipart/form-data"`,这是必需的,因为它允许表单发送二进制数据,比如文件。 3. **在JSP页面中实例化SmartUpload**:在处理表单提交的JSP页面(如`upload.jsp`)...

    jsp上传文件教程

    JSP本身并不直接处理文件上传,而是通过Servlet来完成。在Servlet中,我们需要使用第三方库,如Apache Commons FileUpload,来解析多部分请求。 首先,添加Apache Commons FileUpload和IO库到项目依赖中。 ```...

    简单的jsp文件上传

    在文件上传的场景中,JSP将作为用户交互的界面,接收用户通过表单提交的文件。 在JSP中处理文件上传,通常会用到Servlet,因为JSP本身并不直接支持文件上传,而是通过HTTP请求来传递数据。Servlet是Java EE中的一个...

    jsp上传文件所需jar包.zip

    Apache Commons FileUpload库通过解析HTTP请求中的`multipart/form-data`格式,可以方便地获取到上传文件的信息,包括文件名、文件类型、文件大小等。同时,该库还提供了处理大文件上传的能力,可以避免一次性加载...

    jsp页面下实现文件上传接收的

    这段代码创建了`ServletFileUpload`实例,解析请求,并将每个文件项写入服务器的“uploadFolder”目录。 4. **错误处理与反馈**:在实际应用中,应处理可能出现的异常,例如文件大小限制、文件类型检查等。同时,向...

    Jsp中的文件下载 自己写的 有详解

    通常是将jar文件放在WEB-INF/lib目录下,然后在JSP页面中通过`&lt;jsp:useBean&gt;`标签导入SmartUpload类。 ```jsp &lt;jsp:useBean id="smart" class="com.jspsmart.upload.SmartUpload" /&gt; ``` 2. 初始化SmartUpload对象...

    JAVA中获取各种路径

    通过调用`getServletContext().getRealPath()`可以获取服务器上文件或目录的实际物理路径,如`D:\resin\webapps\TEST\test.jsp`,这对于读取文件或进行文件系统操作非常必要。 #### (5) 获取页面的父目录绝对路径:...

Global site tag (gtag.js) - Google Analytics