嗨,
我们在FacesServlet中声明Web.xml及其URL映射。据我理解,
FacesServlet在服务器启动时只加载了一次。只有当第一次从外部上下文访问JSP应用程序时,才使用URL映射。
JSF的一个新学习者问我这些问题,应用程序只使用这两件事一次。是真的吗?另外,还有其他方法不包括在web.xml中吗?
我该回答什么?
更新的
例如,我使用URL http://localhost:8080/webapp/index.jsf访问应用程序。当我们访问这个URL时,会呈现FacesServlet调用和视图。以下是我的问题:
在JSF中,我们从未见过更改地址栏中的
to-view-id>failure.jsp /to-view-id>
- 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?
发布于 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。
发布于 2011-01-27 15:38:58
是。加载应用程序容器时,将加载web.xml,并提取
特定的URL模式到servlet。当请求出现时,它从内存中检查要调用哪个servlet的模式,然后如果servlet已经加载,它将从内存中取出它,否则它将创建servlet的一个实例,并将根据请求类型调用doGet()或doPost()。
还有另一种方法可以通过注释从JAVAEE-6删除URL映射。
就像这样
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中的
给出了如下导航用例:
<to-view-id>failure.jsp </to-view-id>为什么我们不需要将视图名称命名为failure.jsf?我们只是在faces-config.xml中提供*.jsp。如何在内部处理?
是view identifier,而不是URL FacesServlet在调用导航用例时将加载该视图。
https://stackoverflow.com/questions/4818366
复制相似问题