2

Spring 3.1 を使用して、非常に古いサーブレット ベースのサイトを改修しています。一部の URL は廃止されました。私の上司は、リダイレクトを維持するためのネットワークの信頼性を信頼していないため、私自身のリダイレクトを古い URL から切り離して Web アプリケーションに入れるように頼まれました。

廃止された URL を処理するために、 LegacyServletControllerという名前のコントローラーを作成しました。誰かが URL の末尾にスラッシュを入力しない限り、うまく機能します。Controller メソッドは引き続きそれを取得しますが、新しい URL にリダイレクトしません。ロケーションバーに既にある URL に新しい URL を追加するだけです。

たとえば、これは廃止された URL です。

http://blah.blah.blah/acme/moreinfo/

にリダイレクトさせたい

http://blah.blah.blah/acme/home

ただし、上記のように廃止された URL の末尾にスラッシュがある場合、リダイレクトは次のようになります。

http://blah.blah.blah/acme/moreinfo/home

*-servlet.xml に別の URL ハンドラーが必要だと思いますが、Spring にはまだ慣れておらず、設定方法がわからないため、コントローラー関数は末尾のスラッシュの有無にかかわらず、廃止された URL を適切に処理します。

これは、レガシー URL を処理するために使用しているコントローラー クラスです。

import org.springframework.stereotype.Controller;
import org.springframework.validation.*;
import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;


import org.apache.log4j.Logger;

@Controller
public class LegacyServletController {

    private static final Logger logger = Logger.getLogger(LegacyServletController.class);

    // Redirect these legacy screns "home", the login screen via the logout process
    @RequestMapping({"moreinfo","other_dead_screen"})
    public String home() {
        logger.debug("started...");
        return "redirect:home";

    }// end home()  

}// end class LegacyServletController

ここに私の acme-servlet.xml があります:

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

  <context:component-scan base-package="com.acme.controller" />

  <mvc:resources mapping = "/**" location = "/,file:/apps1/bea/user_projects/domains/acme/common/,file:/c:/ftp/acme/"/>
  <mvc:annotation-driven/>

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

  <bean name="af" class="com.acme.controller.security.CustomAuthenticationFilter"/>

</beans>
4

2 に答える 2

4

return ステートメントは次のようになりますreturn "redirect:/home"。コントローラーは、ビュー リゾルバーの絶対パスを返す必要があります。

この質問の回答も役に立ちます: Spring MVC でのリダイレクト

于 2012-07-24T17:47:33.820 に答える
0

リダイレクトのフル パスを指定することをお勧めします。理想的には を返すことができますredirect:/home。これにより、Web アプリケーション ルートからの相対パスにリダイレクトされます。http://blah.blah.blah/acme/home

于 2012-07-24T17:11:24.293 に答える