首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FacesServlet与Web.xml中的URL映射

FacesServlet与Web.xml中的URL映射
EN

Stack Overflow用户
提问于 2011-01-27 15:35:07
回答 2查看 8.9K关注 0票数 3

嗨,

我们在FacesServlet中声明Web.xml及其URL映射。据我理解,

FacesServlet在服务器启动时只加载了一次。只有当第一次从外部上下文访问JSP应用程序时,才使用URL映射。

JSF的一个新学习者问我这些问题,应用程序只使用这两件事一次。是真的吗?另外,还有其他方法不包括在web.xml中吗?

我该回答什么?

更新的

例如,我使用URL http://localhost:8080/webapp/index.jsf访问应用程序。当我们访问这个URL时,会呈现FacesServlet调用和视图。以下是我的问题:

在JSF中,我们从未见过更改地址栏中的

  • 。在这种情况下,它是如何使用Facs-config.xml中相同的URL?
  • 处理新请求的,我们给导航用例如下:

to-view-id>failure.jsp /to-view-id>

代码语言:javascript
复制
- Why we need not give the view name as failure.jsf? We are just giving the \*.jsp in the `faces-config.xml`. How it is handled internally?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-27 15:37:43

FacesServlet在服务器启动时只加载了一次。

对,是这样。

只有当第一次从外部上下文访问

应用程序时才使用JSP映射。

不正确。它已经在每个传入的HttpServletRequest上进行了测试。否则容器如何知道要调用哪个servlet?

还有其他方法不包括在web.xml中吗?

如果您使用的是支持Servlet3.0的Servlet容器,也可以通过@WebServlet注释来完成。但是,JSF2.0被设计为向后兼容Servlet2.5,因此它不附带该注释,您需要在web.xml中显式声明它。

另请参阅:

根据新的问题系列更新(每个问题都属于自己的问题,但ala)

中,我们从未见过更改地址栏中的URL。在这种情况下,它是如何使用相同的URL处理新请求的?

只有在RequestDispatcher#forward()转发的情况下才会发生这种情况。在转发过程中,request容器基本上重用了视图(/页面)的相同 HTTP请求/响应。它不强制/指示网页浏览器发送全新的请求。另一方面,HttpServletResponse#sendRedirect()将指示客户机( webbrowser)发出新的 GET请求,从而改变。通过将<redirect/>添加到<navigation-case>中,您可以在JSF sice中强制这样做。注意,由于这会导致新请求,初始请求的所有请求作用域bean都将丢失。

为什么我们不需要将视图名称命名为failure.jsf?我们只是在faces-config.xml中提供*.jsp。如何在内部处理?

FacesServlet知道自己的url-pattern

票数 3
EN

Stack Overflow用户

发布于 2011-01-27 15:38:58

是。加载应用程序容器时,将加载web.xml,并提取

特定的URL模式到servlet。当请求出现时,它从内存中检查要调用哪个servlet的模式,然后如果servlet已经加载,它将从内存中取出它,否则它将创建servlet的一个实例,并将根据请求类型调用doGet()doPost()

还有另一种方法可以通过注释从JAVAEE-6删除URL映射。

就像这样

代码语言:javascript
复制
import javax.servlet.annotation.InitParam;
import javax.servlet.annotation.WebServlet;

@WebServlet(
    name = "SimpleServlet", 
    urlPatterns = {"/login"}, 
    initParams = {
        @InitParam(name = "param1", value = "value1"),
        @InitParam(name = "param2", value = "value2")}
)
public class SimpleServlet {
}

faces-config.xml中的

给出了如下导航用例:

代码语言:javascript
复制
<to-view-id>failure.jsp </to-view-id>

为什么我们不需要将视图名称命名为failure.jsf?我们只是在faces-config.xml中提供*.jsp。如何在内部处理?

view identifier,而不是URL FacesServlet在调用导航用例时将加载该视图。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4818366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档