2014-01-31 65 views
1

就像我对Spring所做的一样,我从来没有对Spring MVC做过任何事情,并且想要试验一下,看看它和Grails和Rails更好的对比。我有一个简单的应用程序,只有一个JSP和一个控制器端点,但我一直无法获得Spring MVC来解析我的JSP路径。InternalResourceViewResolver未解决

这里是的web.xmlWEB-INF

<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>/</url-pattern> 
</servlet-mapping> 

这里是调度-servlet.xml中在WEB-INF:

<beans...>  
    <context:component-scan base-package="com.springapp"/> 
    <context:property-placeholder location="classpath*:my.properties"/> 
    <mvc:resources mapping="/webjars/**" location="/webjars/"/> 

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

    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
     <property name="messageConverters"> 
      <list> 
       <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> 
      </list> 
     </property> 
    </bean> 
</beans> 

而我的一个控制器在com.springapp包中:

@Controller 
@RequestMapping("/") 
public class MyController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String printWelcome(ModelMap model, HttpServletRequest request) { 
     return "hello"; 
    } 
} 

同时,有一个文件叫做hello.jsp in WEB-INF/jsp

当我在我的应用程序中导航到“/”时,我得到一个404,当我想我会得到hello.jsp

我也有一个集成测试,通过一个404失败确认了同样的问题:

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration("file:src/main/webapp/WEB-INF/dispatcher-servlet.xml") 
public class AppIT { 
    private MockMvc mockMvc; 

    @SuppressWarnings("SpringJavaAutowiringInspection") 
    @Autowired 
    protected WebApplicationContext wac; 

    @Before 
    public void setup() { 
     this.mockMvc = webAppContextSetup(this.wac).build(); 
    } 

    @Test 
    public void testMVC() throws Exception { 
     mockMvc.perform(get("/")) 
       .andExpect(status().isOk()) 
       .andExpect(view().name("hello")); 
    } 
} 

我相信我缺少明显的东西,所以我很想在Spring MVC的专家告诉我是什么是。

回答

2

您必须将<mvc:annotation-driven/>添加到您的弹簧配置中,这会告知Spring MVC拾取注释,例如@RequestMapping

有关annotation-driven的更多信息,请参阅documentation

+0

你这次得到了我! –

+0

@SotiriosDelimanolis哈哈,你让我最后35次! –

+0

有趣的是,这可以让我的手动请求通过,但我的测试仍然失败。当然,仍然是积极的。有什么想法吗?我的测试形式是否不正确? – Vidya