2012-08-06 114 views
2

我的抗戰是結構如下:如何將原始Java servlet映射到web.xml中的HTML文件?

my-web-app.war/ 
    views/ 
     index.html 
     blah.html 
    META-INF/ 
     MANIFEST.MF 
    WEB-INF/ 
     web.xml 
     lib/ 
      <!-- Dependencies --> 
     classes/ 
      org.me.mywebapp.controllers/ 
       MyController.class 
      <!-- Other packages/classes as well --> 

我想配置web.xml,這樣,當戰爭本地部署它的index.html頁面可以通過進入http://localhost/my-web-app/index.html訪問。

這是我到目前爲止有:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> 

    <!-- The display name of this web application --> 
    <display-name>My Web App</display-name> 

    <listener> 
     <listener-class> 
      org.me.mywebapp.context.ContextImpl 
     </listener-class> 
    </listener> 
</web-app> 

如何配置這個網址來查看映射?提前致謝!

回答

6

你可以映射你的servlet這樣

<servlet> 
    <servlet-name>controller</servlet-name> 
    <servlet-class>org.me.mywebapp.controllers.MyController</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>controller</servlet-name> 
    <url-pattern>index.html</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>controller2</servlet-name> 
    <servlet-class>org.me.mywebapp.controllers.OtherController</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>controller2</servlet-name> 
    <url-pattern>blah.html</url-pattern> 
</servlet-mapping> 

如果你想顯示視圖/ blah.html爲/blah.html,在控制器你只是把請求發送到apropriate的意見/ * .html或jsp或任何你想要的。

編輯:根據你的要求: 您可以調度的servlet像這裏面的要求到另外一個頁面:

RequestDispatcher dispatcher = 
     getServletContext().getRequestDispatcher("/views/blah.html"); 
dispatcher.forward(request, response); 

雖然上面的代碼工作,你或許應該內實現更「複雜」的方法每個servlet決定你將分派哪個視圖,特別是如果你的應用程序有很多控制器,視圖等等。嘗試閱讀更多關於MVC實現的內容,如果你還沒有做過。

+0

感謝這樣一個偉大的答案@pater(+1)! - 你可以提供一個例子,說明你在「將控制權發送給相應的視圖/ *。html ... *」的控制器中的含義是什麼?我一直使用像Spring這樣的servlet框架,所以這些「原始servlet」的東西讓我有點困惑。再次感謝! – IAmYourFaja 2012-08-06 12:59:23

+0

@ 4herpsand7derpsago:檢查答案編輯部分 – pater 2012-08-06 13:08:46

-1

您可以通過在Filter中重寫URL來完成此操作。

就像它是由最像Struts,Spring MVC的,掛毯,檢票等框架

1

您可以使用過濾器的路由具體要求view路徑的實現。請參閱響應:https://stackoverflow.com/a/3593513/221951然後,您決定是否將請求傳遞給servlet。

您可以阿洛斯嘗試使用Tuckey URL重寫過濾器http://tuckey.org/urlrewrite/

+0

@ 4herpsand7derpsago:檢查上面的鏈接,它會引導你http://stackoverflow.com/questions/3541077/design-patterns-web-based-applications/3542297#3542297這解釋了你需要的所有東西。 piotr:+1用於引用適當的現有答案 – pater 2012-08-06 13:13:27

相關問題