0

JavaEEアプリケーション用の単純なフロントコントローラーを作成しました。このコントローラーは、すべてのURLをインターセプトして、適切なクラスの対応するメソッドにリダイレクトします。

一般的なURLは次のようになります:http://domain.tld/appName/Controller/method

現在、Tomcatで3つの問題に直面しています。

  1. ベースURLhttp://domain.tld/appName/ (末尾のスラッシュの有無にかかわらず)にアクセスしようとすると、フロントコントローラーが呼び出されず、404が返されます。
  2. 次のようなURLにアクセスしようとすると、domain.tld / appName / Controller / method /(終了スラッシュに注意)ポイント番号1と同じものになります。ただし、終了スラッシュがないと正常に機能します。
  3. 最後に、すべてのリクエストがフロントコントローラーにルーティングされているため、web.xmlで、デフォルトのサーブレットに提供されるすべての静的ファイルを定義する必要があります。制約が少なく醜い解決策がいいでしょう。

これが私のweb.xmlです:

<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <servlet>
        <servlet-name>FrontController</servlet-name>
        <servlet-class>controllers.FrontController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FrontController</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
</web-app>
4

2 に答える 2

2

web.xml最初のサーブレットの前に、これをファイルに追加します。

<welcome-file-list>
    <welcome-file>FrontController</welcome-file>
</welcome-file-list>
于 2012-05-06T16:30:48.827 に答える
0

コメントで述べたように、私のFrontControllerはちょっと醜いものでした。それを適切に書き直すと、同じweb.xmlでうまくいきました。

于 2013-05-16T15:50:17.787 に答える