SpringMVC &Spring in Action:无法重定向到第 5 章中的 home.jsp [英] SpringMVC & Spring in Action: can't redirect to home.jsp in chapter 5

查看:36
本文介绍了SpringMVC &Spring in Action:无法重定向到第 5 章中的 home.jsp的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这些天我正在通过 Spring in Action 一书学习 SpringMVC 和 maven,但我现在有一个问题.对/"的默认请求应该映射到home.jsp"而不是.您还可以在书籍论坛中看到相同的问题.https://forums.manning.com/posts/list/38046.page代码如下:

I'm learning SpringMVC and maven these days with the book Spring in Action but i have a question now. The default request to "/" should be mapped to "home.jsp" but not. You can also see the same question described in the book forum. https://forums.manning.com/posts/list/38046.page Here are the codes:

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.

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

-------------------- update -------------------------

下面的测试类表明控制器类是正确的,这个控制器可以用home.jsp响应请求/".那么,哪里错了?

The following test class indicates the controller class is right and this controller can response to the request "/" with home.jsp. So, where is wrong?

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"));   
    }
}

推荐答案

更新或添加您的 web.xml

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

如果你没有 web.xml 你可以通过

If you do not have web.xml you can generate by

动态 Web 项目 –> 右键单击​​ –> Java EE 工具 –> 生成部署描述符存根.

Dynamic Web Project –> RightClick –> Java EE Tools –> Generate Deployment Descriptor Stub.

您也可以在 index.jsp 中使用 JSTL 库进行 JSP 重定向 重定向到 home.jsp

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

这篇关于SpringMVC &amp;Spring in Action:无法重定向到第 5 章中的 home.jsp的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆