2

Spring MVC は初めてで、実際のフローがどのように機能するかを知りたいです。

Spring MVC の例はほとんど見つかりませんでしたが、通常、すべての例に追加のリダイレクトがあります。つまり、web.xml では、welcome-file タグが、ドメインにマップされているログイン フォーム (たとえば) へのリダイレクトを基本的に行う jsp ファイルにコントロールを送信します。

このリンクの例に従ってい ます http://www.dzone.com/tutorials/java/spring/spring-simple-form-controller-1.html

web.xml

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>redirect.jsp</welcome-file>
    </welcome-file-list>

リダイレクト.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<% response.sendRedirect("userRegistration.htm"); %>

したがって、このリダイレクトを回避するために、マッピングを変更しました。 ケース 1

web.xml

<servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
</servlet-mapping>

mvc-dispatcher-servlet.xml

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>WEB-INF/jsp/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
    <props>
        <prop key="/">show</prop>
    </props>
</property>
</bean>

<bean id="show" class="com.jft.common.controller.HelloWorldController">

HelloWorldController.java

public HelloWorldController(){
    setCommandClass(Contact.class);
    setCommandName("customerForm");
    setFormView("index");
}

この場合、機能しておらず、ログに次のように表示されます。

No mapping found for HTTP request with URI [/HelloWorldMVC/WEB-INF/jsp/index.jsp] in DispatcherServlet with name 'mvc-dispatcher'

さて、その追加のリダイレクトを追加して、次のようにファイルを変更すると

ケース 2

web.xml

<welcome-file-list>
    <welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>

リダイレクト.jsp

<% response.sendRedirect("register.html"); %> in redirect

ディスパッチャーサーブレットxmlファイルを次のようにします

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>WEB-INF/jsp/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
    <props>
        <prop key="/register.html">show</prop>
    </props>
</property>
</bean>

<bean id="show" class="com.jft.common.controller.HelloWorldController">

見せる

この場合、すべてが機能します。

前のケースで何が起こっているのか、formView 名を再度見つけた後、ディスパッチャ サーブレット内で /HelloWorldMVC/WEB-INF/jsp/index.jsp のマッピングを見つけます。

ケース1では、私が得ているのは、

ディスパッチャ サーブレットの URL パターンを /* のままにしたので、最初のリクエストは "localhost:8080/HelloWorldMVC/" になります。インターセプトされ、その show のマッピングがあり、コントローラーに移動してページ、つまり「インデックス」を取得し、プレフィックスとサフィックスを適用した後、「/HelloWorldMVC/WEB-INF/jsp/index.jsp」になりました。このリクエストのマッピングを検索していますが、私の質問は、なぜ再度検索しているのかということです。リダイレクト方法を通過すると発生しません。

4

3 に答える 3

0

「index.jsp」のマッピングを追加

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
    <props>
        <prop key="/index.jsp">show</prop>
    </props>
</property>
</bean>

web.xml で、ディスパッチャ サーブレットを定義しました

<servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
</servlet-mapping>

つまり、Spring ディスパッチャー サーブレットにすべてのリクエストを送信
simpleUrlMapping(ディスパッチャー サーブレットがマッピングを見つけるのに役立ちます)、マッピングの代わりに特定のマッピングを提供する必要があり/ます。つまり、すべてのリクエストをマッピングします。

于 2012-10-10T08:38:23.473 に答える
0

**

次の拡張子でページを呼び出します

**

<a href="finalPage.htm">Demo</a>

web.xml にマップされているように

<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>

コントローラ

@RequestMapping(value = "finalPage.htm", method = RequestMethod.GET)
public String finalPage() 
{
   return "final";
}
于 2014-11-22T05:31:40.253 に答える
0

redirect.jsp の最初のケースでは、リクエストを「userRegistration.htm」にリダイレクトしているため、SimpleUrlMapping を定義したときに Spring はキー「userRegistration.htm」からマッピングを見つけようとしますが、「userRegistration.htm」という名前のマッピングは見つかりません。キー「/」を指定したとおり。このキーの値を「userRegistration.htm」に変更すると機能します

2 番目のケースでは、リダイレクト ページを「register.html」に変更しました。この key="register.html" に言及したように、Spring はファイル内のキー マッピングを見つけることができます。したがって、キーをコントローラーにマップし、正常に実行されます。

これが明確であることを願っています。

于 2012-10-10T10:45:52.823 に答える