在window下开发的Java程序作为WEB的服务器,windows在采用Tomcat5.5.9运行没有问题,但是在Linux9下运行出现以下问题(jdk1.5和1.4下均存在)
java.lang.IllegalArgumentException: URI has an authority component
at java.io.File.<init>(File.java:340)
at com.putian.sso.logic.group.GroupVlan.verdictTime(GroupVlan.java:121)
at com.putian.sso.logic.group.GroupVlan.getInstance(GroupVlan.java:53)
at com.putian.sso.client.prelogin.UserGroupAction.execute(UserGroupAction.java:120)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:307)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:385)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:748)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:678)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:871)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
该问题的出现是在读取文件的位置上,代码是通过生成URL再转换为URI,最后用File来读取,通过分析排除掉文件权限等问题,后来发现Java本身URI的在windows系统和linux系统下存在区别。具体正确的代码如下:
URL url = new URL("file://" + realPath); //for Linux
URL url = new URL("
file:///" + realPath); //for Windows