2016-07-17 16 views
0

最近、SpringMVCとmavenを学んでいますが、Spring in Actionの本がありますが、今質問があります。 "/"に対するデフォルトの要求は "home.jsp"にマップされている必要があります。また、書籍フォーラムで説明したのと同じ質問が表示されます。ここで https://forums.manning.com/posts/list/38046.page コードは次のとおりです。SpringMVC&Spring in Action:第5章でhome.jspにリダイレクトできません

package spittr.config; 

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 

public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{ 

    @Override 
    protected String[] getServletMappings(){ 
     return new String[]{ "/" }; 
    } 

    @Override 
    protected Class<?>[] getRootConfigClasses(){ 
     return new Class<?>[]{ RootConfig.class }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses(){ 
     return new Class<?>[]{ WebConfig.class }; 
    } 
} 

package spittr.config; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.ViewResolver; 
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 

@Configuration 
@EnableWebMvc 
@ComponentScan("spittr.web") 
public class WebConfig extends WebMvcConfigurerAdapter{ 

    @Bean 
    public ViewResolver viewResolver() { 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/WEB-INF/views/"); 
     resolver.setSuffix(".jsp"); 
     resolver.setExposeContextBeansAsAttributes(true); 
     return resolver; 
    } 

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer){ 
     configurer.enable(); 
    } 
} 

package spittr.config; 

import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.ComponentScan.Filter; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.FilterType; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 

@Configuration 
@ComponentScan(basePackages={"spitter"}, excludeFilters={ 
    @Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class) 
}) 
public class RootConfig { 

} 

package spittr.web; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
public class HomeController { 

    @RequestMapping(value="/", method=RequestMethod.GET) 
    public String home(){ 
     return "home"; 
    } 
} 

私はTomcatの7.0でこれを実行すると、それはhome.jspを表示する必要があります。ただし、それでもindex.jspが表示されます。

--------------------更新------------------------ -

次のテストクラスはコントローラクラスが正しいことを示し、このコントローラはhome.jspでリクエスト "/"に応答できることを示します。それで、どこが間違っていますか?

package spittr.web; 

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; 
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; 
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*; 
import org.junit.Test; 
import org.springframework.test.web.servlet.MockMvc; 

public class HomeControllerTest { 

    @Test 
    public void testHomePage() throws Exception{ 
     HomeController controller = new HomeController(); 
     MockMvc mockMvc = standaloneSetup(controller).build(); 
     mockMvc.perform(get("/")).andExpect(view().name("home")); 
    } 
} 
+0

ここからコードをダウンロードしてください。github.com/habuma/SpringInActionExamples動作します。 –

答えて

0

は、pathのようです。

まずあなたが

/WEB-INF/views/ 

フォルダの下に作成home.jsp見解を持っているあなたは、ディスパッチャservlet.Assumingにリダイレクトされているため、正確なURLパターンのためのweb.xmlファイル内のパスマッピングを確認してください。

+0

ありがとうございます。私はhome.jspを/ WEB-INF/views /フォルダの下に作成しました。サーブレット3.0環境ではweb.xmlは必要ないと思われます。私のコードの最初のクラスがディスパッチャサーブレットを自動的に作成してデプロイできますか?私は今このインターフェースについてはっきりしていない。もしそうなら、私のコードでHomeControllerクラスを使って、デフォルトのリクエスト "/"が "/home.jsp"にマップされます。 – xjpsjtu

1

更新またはあなたが

動的Webプロジェクトによって生成することができますweb.xmlファイルがない場合は、あなたのweb.xml

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

に追加 - >右クリック - >のJava EEのツール - > を生成しますデプロイメント記述子スタブ

また、あなたは私のMac上でのEclipse、Tomcatの9.0に取り組んでいる間、私は同じ問題を持っていたhome.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<c:redirect url="/home.jsp"/> 
0

にリダイレクトするindex.jspJSP redirect using JSTL librariesを行うことができます。私はどこに間違っていたかを(この小さなコード)見る時間を費やしてきました。

しかし、EclipseとTomcat 8.5および9.0を使用してWindowsマシン上で動作させることができました。

私は、これは、MavenプロジェクトとないのGradleでhttps://github.com/shortduck/ManningChapter5_SpringMVC

でGitHubの上にホストされているコードを持っています。また、HomeControllerの値がvalue = "/home"であることを確認してください。これは「/」と同様に機能します。値が「/」の場合は、インデックスを確認してください。jspやその他の「ホーム」ページはルートにありません。

私の次の目標は、このコードがMacで動作しない理由を知ることです。

関連する問題