Java 从JSP中的类内调用application.getRealPath()

Java 从JSP中的类内调用application.getRealPath(),java,jsp,Java,Jsp,我正在用JSP编写一个类,从XML文件中检索一组配置值。我的计划是使用一个类“XMLConfig”加载文件中的值,然后使用访问方法获取config对象中的值 我的问题是,我似乎无法从类内调用application.getRealPath(),因为eclipse告诉我“应用程序无法解决”。我怀疑我必须将“应用程序”更改为其他内容,但我不确定是什么 我的课程代码: <%! //Config object public class XMLConfig { public boolean loa

我正在用JSP编写一个类,从XML文件中检索一组配置值。我的计划是使用一个类“XMLConfig”加载文件中的值,然后使用访问方法获取config对象中的值

我的问题是,我似乎无法从类内调用application.getRealPath(),因为eclipse告诉我“应用程序无法解决”。我怀疑我必须将“应用程序”更改为其他内容,但我不确定是什么

我的课程代码:

<%!
//Config object
public class XMLConfig {

 public boolean loadConfigFile(String strName) {
  String XMLfileName = application.getRealPath(strName);
  try {
   DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
   Document doc = null;
   doc = db.parse(XMLFileName);
  }catch(Exception e)
  {
   System.out.println(e.getMessage());
   return false;
  }
  return true;

 }
}
%>

应用程序不是全局变量。如果要在方法中使用它,则需要将其作为参数传递


不确定为什么要在jsp中定义类,而不是仅仅创建一个“普通”java类。

应用程序不是一个全局变量。如果要在方法中使用它,则需要将其作为参数传递


不知道为什么要在jsp中定义类,而不仅仅是创建一个“普通”java类。

这是一个servlet而不是jsp的工作。创建一个
扩展的类
,并实现
doGet()
方法,如下所示:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String strName = getOrDefineItSomehow();
    Document doc = loadConfigFile(getServletContext().getRealPath(strName));
    // Do whatever you want with it and then display JSP page.
    request.getRequestDispatcher("/WEB-INF/config.jsp").forward(request, response);
}
将此servlet映射到
web.xml
url模式上,例如
/config
,并通过调用它。它将在
doGet()
中运行代码

另见:

这是一个servlet作业,而不是JSP作业。创建一个
扩展的类
,并实现
doGet()
方法,如下所示:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String strName = getOrDefineItSomehow();
    Document doc = loadConfigFile(getServletContext().getRealPath(strName));
    // Do whatever you want with it and then display JSP page.
    request.getRequestDispatcher("/WEB-INF/config.jsp").forward(request, response);
}
将此servlet映射到
web.xml
url模式上,例如
/config
,并通过调用它。它将在
doGet()
中运行代码

另见:

在JSP中定义类是一种糟糕的做法。我强烈建议您将其重写为servlet。我无法使此代码高亮显示正常工作。有人帮我一下吗?也不推荐使用
getRealPath()
,因为根据servlet容器的不同,您的webapp可能无法实际映射到文件系统上的真实路径。我明白了,您能推荐一个可行的替代方案吗?另外,纯粹出于兴趣,为什么application.getRealPath()在类声明之外工作,而不是在类声明内部工作?因为应用程序对象是在JSP上下文中提供的,所以我们的类是一个子上下文。您可以通过将应用程序对象作为参数传递给
loadConfigFile()
方法来“修复”此问题。(顺便说一句,
getRealPath()
也出现在
ServletContext
接口中。)在JSP中定义类是错误的做法。我强烈建议您将其重写为servlet。我无法使此代码高亮显示正常工作。有人帮我一下吗?也不推荐使用
getRealPath()
,因为根据servlet容器的不同,您的webapp可能无法实际映射到文件系统上的真实路径。我明白了,您能推荐一个可行的替代方案吗?另外,纯粹出于兴趣,为什么application.getRealPath()在类声明之外工作,而不是在类声明内部工作?因为应用程序对象是在JSP上下文中提供的,所以我们的类是一个子上下文。您可以通过将应用程序对象作为参数传递给
loadConfigFile()
方法来“修复”此问题。(顺便说一句,
getRealPath()
也出现在
ServletContext
界面中。)感谢您的提示。我阅读了有关导入自己的java类的内容,现在将该类放在一个单独的.java文件中。getRealPath()问题不再是一个真正的问题,但这非常有用。谢谢你的提示。我阅读了有关导入自己的java类的内容,现在将该类放在一个单独的.java文件中。getRealPath()问题不再是一个真正的问题,但这非常有用。