java - getServletContext().getRealPath ("/")返回错误路径

标签 java eclipse servlets velocity

背景: 我想通过使用 Velocity 和 servlet 来学习 Web 开发。我使用 getServletContext().getRealPath("/") 查找 WEB-INF 的路径以及存储在/WEB-INF/templates/中的 .vm 文件;

但是返回的路径是:

E:\javaWorkSpcae\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\NewVelocity\templates\

我想要的是:

E:\javaWorkSpcae\NewVelocity\WebContent\WEB-INF\templates\hello.vm

我使用velocity-tools-1.4、tomcat1.7、jdk1.7

我使用的代码是:

package velocityHandler;

import java.util.Properties;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.servlet.VelocityViewServlet;

 public class HelloHandler extends VelocityViewServlet{
      private static final long serialVersionUID = 1L;
       private VelocityEngine velo;  

    @Override
    public void init() throws ServletException{  

           //velocity引擎对象                  
       velo = new VelocityEngine(); 

       //设置vm模板的装载路径
       Properties prop = new Properties();
       String path = this.getServletContext().getRealPath("/");
       prop.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path + "templates");

       System.out.println(path + "templates/");

       try {
          //初始化设置,下面用到getTemplate("*.vm")输出时
          //一定要调用velo对象去做,即velo.getTemplate("*.vm")
          velo.init(prop);
         } catch (Exception e1) {
          e1.printStackTrace();
         }
    }

    @SuppressWarnings("unchecked")
    @Override
    protected Template handleRequest(HttpServletRequest request,
                    HttpServletResponse response, Context ctx) throws Exception{

            String p1 = "Hoffman";
            String p2 = "Song";
            @SuppressWarnings("rawtypes")
            Vector personList = new Vector();
            personList.addElement(p1);
            personList.addElement(p2);
            ctx.put("theList", personList); //将模板数据 list放置到上下文环境context中

            Template template = velo.getTemplate("hello.vm");
            return template;
    }
}

谁可以给我一个关于 servlet 和速度的简单信息,我在互联网上找不到好的例子。

最佳答案

getServletContext().getRealPath("/") 将为您提供应用程序部署位置的根目录,对于 eclipse 中的 tomcat 服务器,这将是您获得的路径,因为您的 eclipse tomcat服务器在该路径指示的目录中运行。

您要求的路径“/”是您在浏览器中键入“applicationpath/”时获得的路径。

关于java - getServletContext().getRealPath ("/")返回错误路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29840876/

相关文章:

java - 如何在 jni 中为以嵌套对象作为参数的方法指定方法签名

java - 适合存储java项目信息的数据结构

java - 将 Egit 和 GitLab 用于多个项目

java - 在 HttpClient 类中同步请求和响应

java - 找到不支持的主体 key 类型(8)

java - 如何在 Android 中通过反射实例化一个监听器

java - 我如何知道我正在运行哪个版本的 RichFaces?

java - 从非 servlet 类读取 web-inf 下的文件

java - Java servlet 中的属性文件调用

java - 如何创建多 war war 模块?