描述:小编用VSCode建立了一个JavaWeb工程WEB-INF下的classes下的类访问别的资源(主要是JSP中传入需要解析的xml文件,在java中对给入的文件使用DOM4j进行解析),需要访问根目录下的如xml文件夹中的xml文件
原理:WEB-INF安全性很高,直接从java中访问外面的资源很难访问而且基本上没有什么可移植性可言,所以我们可以在JSP中动态传入路径
方法:request.getServletContext().getRealPath("/")获取根目录,然后使用File.separator进行文件分隔提高可移植性,例如传入根目录下的xml文件夹下的:adminArea.xml
String path = request.getServletContext().getRealPath("/") + "xml" + File.separator + "adminArea.xml";
例如:现在我的WEB-INF下的classes中的AdminArea.class文件(Servlet编译java文件生成的class文件就是放在classes里面),然后需要访问根目录下xml文件中area.xml,此时如果我直接从java中拿该资源是没办法拿到的,所以我们需要将该文件传进去,传入的方式就是使用request的getServletContext()获取application对象,然后再调用getRealPath("/")获取虚拟路径对应的真实路径,此时传入的参数就是request.getServletContext().getRealPath("/") + "xml" + File.separator + "area.xml";
参考代码:
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> <%@ page import="java.io.*"%> <%@ page import="com.adminarea.AdminArea"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户注册</title> </head> <body> <% // 开始解析-传入需要解析的文件 String path = request.getServletContext().getRealPath("/") + "xml" + File.separator + "adminArea.xml"; AdminArea admin = new AdminArea(path); // 调用的java文件(可以是Servlet或者JavaBean都行) %> <%=admin.getProvince()%> </body> </html>