5

これは非常に簡単だと思いますが、これまでのところ、機能させることができませんでした。

私がやりたいことは、ルート パスを Spring MVC コントローラーにマップすることです。通常のでは、 " "Servletのマッピングを に追加するだけで、それをうまく拾うことができます。しかし、Spring MVC ではそれほど多くはありません。/web.xml

多くの組み合わせを試しましたが、どれもうまくいかないようです。次のものがうまくいくはずだと思います。

web.xml

<servlet-mapping>
    <servlet-name>myDispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

私のcontextConfigLocationファイルでは:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="alwaysUseFullPath" value="true"/>
    <property name="mappings">
        <util:map>
            <entry key="/" value-ref="rootController"/>
        </util:map>
    </property>
</bean>

<bean id="rootController" class="my.package.RootController">

それから明らかに、コントローラー自体のケースがあります。メソッドを実際のルートパスにマップする方法がわかりません。私の試みは次のようなものです:

public class RootController extends MultiActionController {

    @RequestMapping("/")
    public ModelAndView display(HttpServletRequest request, HttpServletResponse response) throws Exception {

        final Map<String, Object> model = new HashMap<String, Object>();
        model.put("someVariable", "Hello, MVC world.");
        return new ModelAndView("rootPage", model);
    }
}

私のアプリケーションが で実行されているとしましょう。http://localhost:8080/app/その正確な URL でメソッドを実行したいとしますdisplay。の後には何も入力したくありません/app/。実際、その後のいくつか/app/は他のコントローラーにマップされ、すべて正常に動作します (そして、それらは動作し続ける必要があります)。

ここで何が欠けていますか?なぜこれが単純に機能しないのですか?同じものを使用url-patternしてプレーンなServletインスタンスにマップすると、問題なく動作し、メソッドに到達しますdoGetが、Spring MVC では、これを機能させるための特定のブラック マジックが欠けているようです。

4

3 に答える 3

2

にマッピングする代わりに、ファイル/でウェルカム ページを宣言できます。web.xml

<welcome-file-list>
    <welcome-file>welcome.htm</welcome-file>
</welcome-file-list>

したがって、/パスは次のように処理され/welcome.htm、コントローラーが正しくマップされている場合は、他の構成を変更することなく、要求であるかのよう/welcome.htmに処理されます。//welcome.htm

于 2012-08-31T11:17:58.277 に答える
1

SimpleUrlHandlerMappingを削除して、次のことを行うことをお勧めします。

@Controller
@RequestMapping("/")
public class RootController
{
  @RequestMapping(method=RequestMethod.GET)
  public ModelAndView display(...)
  {
    ...
  }
}

これにより、希望する結果が得られるはずです。<mvc:annotation-driven/>また、でサーブレットコンテキストに追加して、 <context:component-scan base-package="some.package.path.to.controller" />Springにそのコントローラーを接続させます。

それ以外の場合は、SimpleUrlHandlerMappingを使用してURLを次のようにマップできます。

<property name="mappings">
    <value>
        /*=rootController
    </value>
<property>

このようにすると、rootController用に定義されたBeanを保持できます。

于 2012-08-30T17:36:00.830 に答える
0

Spring Webflow では、Boris Treukhov から web-file-list を使用するという提案があり、weblogic で機能するハックを発見しました。たとえば、welcome が flow.xml ファイルの場合は、次のようにします。 web.xml で URL パターンを \ から *.html に変更します。ダミー (空の) ファイルwelcome.htm を src\main\webapp\WEB-INF フォルダーに配置します。SimpleUrlHandlerMapping で、値 /welcome.htm=flowController をマップします。最後に、フローの場所のパス="welcome.xml" というレジストリを完成させます。リンクを参照してください: http://forum.spring.io/forum/spring-projects/web/50547-welcome-file-list-with-spring

于 2014-07-01T17:57:24.303 に答える