Velocity模板引擎如何用于Java Web应用程序中的视图?

Velocity模板引擎如何用于Java Web应用程序中的视图?,java,html,jsp,servlets,velocity,Java,Html,Jsp,Servlets,Velocity,当您拥有此示例代码时: RequestDispatcher requestDispatcher = request.getRequestDispatcher("index.jsp"); requestDispatcher.forward(request, response); 您有一个简单的index.jsp文件,Tomcat会发现这是一个jsp文件,它将被翻译成一个Java类,然后编译,然后执行。。这一切都很好 在本页中,这里有一个简单的示例/教程,展示了如何使用velocity模板引擎渲

当您拥有此示例代码时:

RequestDispatcher requestDispatcher =  request.getRequestDispatcher("index.jsp");
requestDispatcher.forward(request, response);
您有一个简单的
index.jsp
文件,Tomcat会发现这是一个jsp文件,它将被翻译成一个Java类,然后编译,然后执行。。这一切都很好

在本页中,这里有一个简单的示例/教程,展示了如何使用velocity模板引擎渲染使用velocity模板语言的视图

有一件事我不明白,容器(或jvm?)知道它应该在哪一步使用Velocity模板引擎来解释
.vm
文件,并正确处理该文件?它如何知道它不是JSP文件?仅通过JSP文件中的扩展名


我不是问如何将请求转发到
.vm
文件。我询问Velocity引擎何时以及如何使用我们在请求对象中提供的数据对象从
.vm
文件创建HTML。为什么.vm文件不像jsp文件那样被翻译成Java类?Tomcat如何决定尝试翻译成
\u jsp.class
文件而使用Velocity模板引擎不是正确的做法

它是一个
org.apache.velocity.tools.view.servlet.VelocityViewServlet
,在映射到它的
*.vm
文件上调用。第一个servlet充当控制器并分派给第二个servlet以呈现视图。

是的,扩展很重要,用于确定要做什么,但没有任何自动操作。在您链接到的同一个示例中,您可以看到web.xml中的配置,该配置将所有以.vm结尾的URL(即模式为*.vm)绑定到Velocity servlet,后者是处理模板的servlet。然后,通过指定*.vm URL,使用RequestDispatcher将请求从“主”servlet手动转发到Velocity servlet