Java EE + JSF url映射

时间:2014-11-27 23:08:43

标签: jsf java-ee mapping

我无法在互联网上找到使用JSF +托管bean在Java EE中映射URL的任何好的解释(是的 - 我知道,有一千万个教程,但在使用HelloWorld页面审阅了第一百万后,我辞职了其余的......)。

在阅读Java EE + JSF之前,我正在使用Spring + JSP项目,其中URL映射是在控制器中使用注释@ GET / @ POST等进行的,使用url作为属性 - 非常简单的解决方案,每个URL使用一个方法使用方法将资源放入响应页面。 (我不知道它是如何在后台制作的 - 我是初学者,但解决方案非常简单:))

现在我读了一本关于Java EE的书,有一些关于web.xml文件中的映射的内容,但目前还不清楚。我觉得,还有其他想法 - 需要渲染的JSF页面是连接到托管bean以获取所需的值。但是如何在这里完成映射?

它可能不干净,所以我会用我的样品解释。

我有以下项目结构

structure

我想,页面customerdetails.xhtml和customers.xhtml可以分别使用url localhost:8080 / P1WSClient / customerdetails.xhtml和customers.xhtml阅读。

我已完成以下web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Customers servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Customers servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

好的,它正在发挥作用。但是,例如,当我想要将页面客户加载到默认位置localhost:8080/P1WSClient/,或者加载到位置localhost:8080/P1WSClient/something1/something2/mypage.html上的客户端时,如何制作?

其他猜测 - 为什么在开头url模式是'/ faces / * .jsp'和'/ faces / index / hxtml'?并且索引正在加载默认URL。我不明白!

其他猜测 - 这里有什么东西 - 每个页面一个ManagedBean,或者每个实体或者...... ??

我找不到任何好的示例或教程,这可以解释许多页面和许多网址结构的网址映射。如果有人可以解释Java EE项目中的映射机制,请在此处添加。任何映射图都可以通过与托管bean和app内部的jsp连接来识别: - )

2 个答案:

答案 0 :(得分:1)

如果要更改默认页面(在localhost:8080/P1WSClient/处看到),请更改web.xml中的欢迎文件选项

<welcome-file-list>
    <welcome-file>customers.xhtml</welcome-file>
</welcome-file-list>

如果要访问某个目录下的页面,请在网页文件夹中创建文件夹。

localhost:8080/P1WSClient/something1/something2/mypage.html

-Web页面
--something1
---- something2
------- mypage.xhtml

答案 1 :(得分:1)

JSF请求转到JSF servlet,后者负责定位XHTML文件,处理它并执行“工作”。

有时,servlet会映射到以.xhtml结尾的所有网址,有时只会映射到子目录中的.xhtml网址。当然,只会处理映射的请求(如果已将servlet映射到/faces/*.xhtml并且您收到/myFiles/index.xhtml请求,则容器将返回index.xhtml作为静态资源。如您所知,它可以是任何路径,faces更常见。

我不确定如果URL没有指定一个文件,你是否可以“重定向到某个文件”。我会尝试Filter

对于托管bean,它取决于。通常我使用一个用于数据,一个用于每个页面的控制器(数据通常为@ViewScoped,控制器大多数时间为@RequestScoped),以及复合组件需要时的其他bean。