- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在四处查看,但找不到有关 FacesServlet 如何将 URL 解析为 Web 应用程序文件结构中的真实文件的解释。在 servlet 的上下文中,我的理解是 URL 只是您希望客户端使用的虚构名称。然后,在 web.xml 中,您将特定的 servlet 映射到 URL 模式,但 servlet 的真实名称/位置对外界是隐藏的……这是一般的 servlet。
特别是对于 JSF 2,我们处理 FacesServlet,这引出了我的第一个问题:FacesServlet 是我需要在我的应用程序中提供映射详细信息的唯一 servlet(也是我唯一需要的 servlet,句号)? 答案似乎是"is",但如果存在并非如此的情况,请举例说明。
通过阅读其他关于 SO 的问题,我了解到并非所有请求都需要通过 FacesServlet,因此请求基本上分为 A) 对不应由 FacesServlet 处理的静态内容的请求,以及 B) 请求FacesServlet 需要处理的动态内容。 那么,静态内容是如何获取的呢?只是收到一个传入请求,其中的 URL 与 FacesServlet 的 URL 模式不匹配,但与应用文件结构中的真实文件位置匹配?
最后,我的主要问题是:当收到与 FacesServlet 的 URL 模式匹配的请求时,FacesServlet 如何知道要呈现哪个 View 文件 (.xhtml)?使用我需要遵循的 JSF 2 才能使其工作?如果不是,那么我不明白,因为,就像我在上面提到的“通用”servlet 的情况一样,URL 可以包含一个与真实文件名无关的名称,只要它映射到web.xml 文件中的正确 servlet。我觉得我在这里遗漏了一些明显(且重要)的东西。我唯一能想到的是 URL 应该与真实文件位置匹配,或者有另一个映射表或将 URL 与 View 文件相关联的东西。
顺便看了下this question ,这是相关的,但没有任何答案。
谢谢!
最佳答案
servlet specification 中概述了提供静态内容的最简单方法, 第 10.5 节:
A Web application exists as a structured hierarchy of directories. The root of thishierarchy serves as the document root for files that are part of the application. Forexample, for a Web application with the context path /catalog in a Web container,the index.html file at the base of the Web application hierarchy or in a JAR fileinside WEB-INF/lib that includes the index.html under META-INF/resourcesdirectory can be served to satisfy a request from /catalog/index.html. If anindex.html is present both in the root context and in the META-INF/resourcesdirectory of a JAR file in the WEB-INF/lib directory of the application, then the filethat is available in the root context MUST be used. The rules for matching URLs tocontext path are laid out in Chapter 12, “Mapping Requests to Servlets”.
和
A special directory exists within the application hierarchy named “WEB-INF”. Thisdirectory contains all things related to the application that aren’t in the documentroot of the application. Most of the WEB-INF node is not part of the public documenttree of the application. Except for static resources and JSPs packaged in the META-INF/resources of a JAR file that resides in the WEB-INF/lib directory, no otherfiles contained in the WEB-INF directory may be served directly to a client by thecontainer.
也就是说,要提供静态内容,将内容保存在 Web 应用程序的适当目录中就足够了。
Servlet 映射是对这个“隐式”servlet 的补充。因此,大多数 JSF 应用程序只声明 FacesServlet。 IIRC,在最近的 JSF 实现中,如果省略了 servlet 的声明,它甚至会声明自己,因此您甚至不必显式声明它。
FacesServlet 如何定位要使用的 View 的定义在 JSF specification 中定义。 ,特别是第 7.6.2 节:
The terms view identifier and viewId are used interchangeably below and mean the context relative path to the web application resource that produces the view, such as a JSP page or a Facelets page. In the JSP case, this is a context relative path to the jsp page representing the view, such as /foo.jsp. In the Facelets case, this is a context relative path to the XHTML page representing the view, such as /foo.xhtml.
JSF implementations must provide a default ViewHandler implementation, along with a default ViewDeclarationLanguageFactory implementation that vends ViewDeclarationLanguageimplementations designed to support the rendering of JSP pages containing JSF components and Facelets pages containing JSF components.
默认实现在下面的 7.6.2.1 节中指定。我保留你的完整报价单。要点是,如果 Faces Servlet 使用前缀映射(例如 /faces/**
)进行映射,则 viewId 是前缀后面的 URL 部分,如果 Faces Servlet 使用后缀映射(例如 *.jsf
),viewId 是 URL 中跟随上下文路径的部分,替换了文件扩展名。例如,如果 servlet 映射到 *.jsf
,则对 URL http://host/context/admin/userlist.jsf
的请求将读取 View 定义来自 Web 应用程序目录中的文件 admin/userlist.xhtml
。
关于jakarta-ee - FacesServlet 如何根据 URL 知道要呈现哪个 facelet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15864497/
我想了解为什么一些 Jakarta EE 规范是空的。 例如 Jakarta Annotations规范由免责声明和快速描述(3 行)组成,但是有 Javadoc . 当 JCP 负责 J2EE 规范
我正在研究 OpenNTF 项目“XPages Jakarta EE Support”。 我正在尝试为 Person 对象上的 CRUD 操作设置 REST API。我设法创建 GET 和 POST
我正在研究 OpenNTF 项目“XPages Jakarta EE Support”。 我正在尝试为 Person 对象上的 CRUD 操作设置 REST API。我设法创建 GET 和 POST
我正在采用 Jakarta EE 9 并使用 EJB 和 WEB 模块开发一个 EE 应用程序。 EJB 已经完成并部署在 Glassfish 6(Jakarta EE 9 的 RI 实现)上。现在,
OpenLiberty(v20.0.0.2-beta 或其他版本)中是否有办法将 jakarta ee 9(通过 webProfile-9.0 或 jakartaee-9.0 或任何仅 jakarta
在使用Spring Boot 3.0.7并试图保持更新时,我遇到了这个错误,不知道它是什么意思。。加载的依赖项是Spring Security 6.0.9,问题存在于使用Java 17或19的情况下(
有没有办法在 JPA 实体监听器中检查当前事务是否已提交,如下所示? @ApplicationScoped public class EntityListener { @Inject
以下代码使用 javamail api 通过 gmail smtp 服务器发送邮件和附件。 public void doSendGmail(){ from = txtFrom.getT
大家好我有一个应用程序(spring+hibernate)需要同时发送数千封电子邮件我被告知这里最好的解决方案是有一个邮件服务器我不知道从哪里开始,或者是否有更好的框架或服务所以请大家给我一些信息,从
我正在尝试从 Java 邮件的文件夹中删除/删除消息(在我将其复制到另一个文件夹之后),这是我的代码: Flags deleted = new Flags("DELETED"); folder.se
某些页面可以接收称为“P1”的特定请求参数: page.do?P1=value1 现在,一个scriptlet正在测试request参数的存在,如果P1为“value1”,则会在页面上呈现一些信息。
我有一段非常类似于此http://java.sun.com/developer/onlineTraining/JavaMail/contents.html#JavaMailFetching的代码 我的
我在NetBeans中创建了一个Java Web应用程序项目,并在其中创建了一个启动bean: package malibu.util; import javax.annotation.PostCon
我有两个不同的项目:A 和 B。 B 包含一个拦截器,我想在项目 A 以及将来的项目 C 和 D 中使用它。 我在两个项目中都使用 jboss-javaee-6.0 版本 3.0.3.Final(这意
我一直在阅读 “Java 事务” ,我一直困惑它是什么?什么是有用的? 最佳答案 你可以谷歌搜索并找到这样的页面:http://www.java-tips.org/java-ee-tips/enter
这个问题在这里已经有了答案: What exactly is Java EE? (5 个回答) Difference between an application server and a servl
Web 应用程序的用户界面通常包含用于执行 CRUD 操作的各种按钮。在执行以下操作时,按钮标签的建议命名约定是什么? 用户创建(添加用户...或添加用户或添加用户) 事件创建(添加事件...或添加事
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我对java网页环境很陌生。最近尝试用Java开发一个电子商务平台。 因此,我使用 j_security_check 基于表单作为我的身份验证工具。身份验证完成后,成功重定向到所需页面。 但是,由于我
什么时候 我通过无状态服务从数据库中获取实体, 然后在另一个 bean 和 中修改它 然后想通过无状态服务将其保存到数据库中, 我注意到实体已分离。我认为因为无状态服务的持久化上下文,实体从被夺取到存
我是一名优秀的程序员,十分优秀!