环境Window Xp+j2sdk1.4.2_12+Tomcat5.0.28+Eclipse3.1.2
插件:lomboz-wtp-emf-gef-jem-3.1.2  org.objectweb.lomboz_3.1.0.N20050106 TomcatPlugin 3.2b3
工作目录在D:\Java\WorkSpace,D盘是NTFS格式代码如下:
<%@ page language="java" contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*"%>
<html>
<head>
<title>jsp文件操作</title>
</head>
<body>
<center>
<%
String path= request.getRealPath("/");
//String path=request.getContextPath();
String tmp_path = path+"tmp";
File fp1 = new File(tmp_path);
fp1.mkdir();//这一步就报错了,不知道是不是NTFS权限的问题!
File fp2 = new File(tmp_path,"a.txt");
fp2.createNewFile();
%>
</center>
</body>
</html>错误:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: access denied (java.io.FilePermission D:\Java\WorkSpace\lesson25\tmp write)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
sun.reflect.GeneratedMethodAccessor144.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:239)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:268)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:157)
root cause java.security.AccessControlException: access denied (java.io.FilePermission D:\Java\WorkSpace\lesson25\tmp write)
java.security.AccessControlContext.checkPermission(AccessControlContext.java:269)
java.security.AccessController.checkPermission(AccessController.java:401)
java.lang.SecurityManager.checkPermission(SecurityManager.java:524)
java.lang.SecurityManager.checkWrite(SecurityManager.java:954)
java.io.File.mkdir(File.java:1097)
org.apache.jsp.Sample1_jsp._jspService(Sample1_jsp.java:56)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
sun.reflect.GeneratedMethodAccessor144.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:239)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:268)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:157)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.

解决方案 »

  1.   

    检查一下catalina.bat文件中-Djava.security.policy中所定义的policy文件是否设置了该目录的访问权限。
    如果没有发现这个policy文件定义,自己写一个如下(security.policy)   grant  {  
      permission  java.security.AllPermission;  
      };  然后将该文件定义为你的-Djava.security.policy,这个配置文件有安全隐患,如果你想定义的更详细一点,可以查相应的文档解决
      

  2.   

    如果是权限问题,应该如何设置呢?
    Windows Xp下NTFS格式硬盘,好像不能设置权限啊!那如果网站上传到服务器(linux或者Windows Service 2003)都有权限问题啊,难道就不需要用java创建文件夹或者文件吗?
      

  3.   

    我在windows系统下貌似没问题。不是ntfs格式。
      

  4.   

    我根据三楼的提示,找到了C:\Tomcat 5.0\bin\startup.bat,有这么段代码,意思大概就是没有定义CATALINA_HOME就gotoHome,我想我可能是因为没有定义这个CATALINA_HOME,然后我就定义了一个环境变量,问题就解决了!set CURRENT_DIR=%cd%
    if not "%CATALINA_HOME%" == "" goto gotHome
    set CATALINA_HOME=%CURRENT_DIR%
    if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
    cd ..
    set CATALINA_HOME=%cd%
    cd %CURRENT_DIR%
    问题已经解决,就是创建一个环境变量:
    CATALINA_HOME=C:\Tomcat 5.0\bin
    呵呵,7楼的方法虽然似乎不行,但是教了我一个Windows小技巧!