2017-09-27 75 views
1

我想用JAVA企業Java Beans和RESTful Web服務(JAX-RS)創建員工管理工具。僱員應用程序與Java EJB和JAX-RS和服務器面

的意圖是,你必須例如管理/ V1/EMP端點,您可以和名哨的新員工等

到目前爲止,這工作,我可以用SOAPUI發送POST請求爲例。

現在我想用Java服務器面和/或PrimeFaces創建一個UI。我已經看到,我可以創建託管的bean,並使用這個託管的bean來調用我的企業java bean(業務邏輯)上的方法。 迄今爲止這麼好。 但在我的應用程序現在有兩個我的web.xml的servlet這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
    <servlet> 
     <servlet-name>Resteasy</servlet-name> 
     <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Resteasy</servlet-name> 
     <url-pattern>/v1/*</url-pattern> 
    </servlet-mapping> 
     <welcome-file-list> 
    <welcome-file>index.xhtml</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 
    <context-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>org.se.bac.service.RESTApplication</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> 
    </listener> 
</web-app> 

而且這樣的作品,如果我叫資源像/ V1/EMP的RestEasy的servlet將處理該請求,如果我打電話jsf servlet工作的index.xhtml文件。

但我想要做的是,我想在資源上面建立一個圖形用戶界面 - 所以我想在瀏覽器中調用/ v1/emp,然後用戶應該看到例如列表或表單在xhtml文件中定義)

但是現在我得到一個json或xml表示(當然),如果我調用資源/ v1/emp並且讓我的列表在list.xhtml文件中定義,我需要調用list。在瀏覽器中的xhtml

我怎樣才能實現我的關注上面調用資源/ v1/emp並獲得UI xhtml頁面?

謝謝。

回答

0

這就是規則,使用由servlet容器路由請求到特定的servlet(source):

  1. 容器將嘗試找到請求的路徑的精確匹配的路徑該servlet。成功的匹配選擇servlet。
  2. 容器將遞歸地嘗試匹配最長的路徑前綴。這是通過一次將路徑樹降級到一個目錄來完成的,使用'/'字符作爲路徑分隔符。最長的匹配決定了所選的servlet。
  3. 如果URL路徑中的最後一個段包含擴展名(例如.jsp),那麼servlet容器將嘗試匹配處理擴展請求的servlet。擴展名被定義爲最後'。'字符後的最後一個段的一部分。
  4. 如果前三條規則都不導致servlet匹配,那麼容器將嘗試提供適合所請求資源的內容。如果爲應用程序定義了「默認」servlet,它將被使用。

因此,您可以爲您的API和您的頁面使用不同的URI。例如像這樣定義你的servlets:

... 
<servlet-mapping> 
    <servlet-name>Resteasy</servlet-name> 
    <url-pattern>/api/v1/*</url-pattern> 
</servlet-mapping> 
... 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/</url-pattern> 
    <url-pattern>/v1/*</url-pattern> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

所以這個想法是你需要分割請求。你需要更具體一點,因爲容器只使用請求的URL來定義誰來處理它。您也可以將Faces Servlet定義爲默認servlet,然後從您的index.xhtml始終具體指定使用擴展名的路由到其他頁面。

+0

你好, 感謝您的回答,這意味着我不應該直接從網頁瀏覽器像/ api/v1/emp調用資源,而只是調用實例index.html並提供一個帶有輸入字段的表單你可以在哪裏創建一個新員工。 並且在託管bean函數中 - 例如action =「#{dataBean.create(...)}」 - 接受在表單中輸入的參數並在函數內部調用 - 我不知道getRequestURL() (...)我的資源/ api/v1/emp 但不直接從瀏覽器? 它可能在一個應用程序中使用java服務器面和休息(JAX-RS)嗎? – Michael

+0

爲什麼你需要REST API?你有另一個客戶,如移動客戶端?從Web瀏覽器,如果faces servlet處理該請求,您將獲得'v1/emp'的頁面。從託管bean中,您不需要調用URL,您可以直接使用JAX-RS註釋注入您的休息控制器,並按原樣使用它。他們在同一個控制器中,所以沒有問題。 –

相關問題