我现在用Spring in Action学习SpringMVC和maven,但我现在有一个问题。 " /"的默认请求应该映射到" home.jsp"但不是。 您还可以看到书籍论坛中描述的相同问题。 https://forums.manning.com/posts/list/38046.page 以下是代码:
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 ------------------------- < / p>
以下测试类表明控制器类是正确的,并且该控制器可以响应请求&#34; /&#34;与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 :(得分:1)
更新或添加web.xml
<welcome-file-list>home.jsp</welcome-file-list>
如果您没有web.xml,可以通过
生成动态网络项目 - &gt; RightClick - &gt; Java EE工具 - &gt;生成 部署描述符存根。
您也可以index.jsp
中的JSP redirect using JSTL libraries重定向到home.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:redirect url="/home.jsp"/>
答案 1 :(得分:0)
似乎是path
问题。
首先检查web.xml
文件中的路径映射,找出要重定向到调度程序servlet的确切url-pattern。假设您在
home.jsp
个视图
/WEB-INF/views/
文件夹中。
答案 2 :(得分:0)
我在Mac上运行Eclipse,Tomcat 9.0时遇到了同样的问题。我花了好几个小时看到(这个小代码),我错了。
但是,我能够使用Eclipse和Tomcat 8.5和9.0在Windows机器上运行。
我在https://github.com/shortduck/ManningChapter5_SpringMVC
的GitHub上托管了代码这是一个Maven项目而不是Gradle。另请参阅HomeController
的值为value = "/home"
,此功能与/
&#39;也会工作。如果您有价值,那就是&{39; /
&#39;确保index.jsp或任何其他&#34; home&#34;页面不在根目录上。
我的下一个目标是找出为什么此代码无法在Mac上运行。