我正在尝试使用Spring MVC创建一个简单的站点,基本思路是为每个页面创建单独的控制器。
sitename.com
必须由WelcomeController
@Controller
public class WelcomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index(Model model) {
System.out.println("----This line is executed on tomcat7 console---");
return "index";
}
}
以下是Spring MVC配置
@Configuration
@EnableWebMvc
@ComponentScan(basePackages={"com.mvc.spring4"})
public class MyAppConfig {
@Bean
public ViewResolver jspViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(JstlView.class);
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
}
和
public class ServletInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[0];
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{MyAppConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/*"};
}
}
存在文件/WEB-INF/jsp/index.jsp,但是我收到404错误
这是tomcat7的控制台输出
2016-01-13 14:47:01 DEBUG o.s.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcher' processing GET request for [/Spring4MVC]
2016-01-13 14:47:01 DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Looking up handler method for path /
2016-01-13 14:47:01 DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Returning handler method [public java.lang.String com.mvc.spring4.WelcomeController.index(org.springframework.ui.Model)]
2016-01-13 14:47:01 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'welcomeController'
2016-01-13 14:47:01 DEBUG o.s.web.servlet.DispatcherServlet - Last-Modified value for [/Spring4MVC] is: -1
----This line is executed on tomcat7 console---
2016-01-13 14:47:01 DEBUG o.s.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name 'index'; URL [/WEB-INF/jsp/index.jsp]] in DispatcherServlet with name 'dispatcher'
2016-01-13 14:47:01 DEBUG o.s.web.servlet.view.JstlView - Forwarding to resource [/WEB-INF/jsp/index.jsp] in InternalResourceView 'index'
2016-01-13 14:47:01 DEBUG o.s.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcher' processing GET request for [/Spring4MVC/WEB-INF/jsp/index.jsp]
2016-01-13 14:47:01 DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Looking up handler method for path /WEB-INF/jsp/index.jsp
2016-01-13 14:47:01 DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Did not find handler method for [/WEB-INF/jsp/index.jsp]
2016-01-13 14:47:01 WARN o.s.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/Spring4MVC/WEB-INF/jsp/index.jsp] in DispatcherServlet with name 'dispatcher'
2016-01-13 14:47:01 DEBUG o.s.web.servlet.DispatcherServlet - Successfully completed request
2016-01-13 14:47:01 DEBUG o.s.web.servlet.DispatcherServlet - Successfully completed request
阅读许多博客,每个人都说不应该使用/
,因为它会截取所有的电话,那么当只输入网站名称时如何才能显示第一页?
[我的解决方案] 然后通过错误和试验找到适用于我的案例的设置,
WelcomeController
方法,WelcomeController
),例如sitename.com/adjahdkahXepowe sitename.com/about
和sitename.com/about/development
这是更改(而不是/ *,使用/)
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
我的问题是,只有在浏览器中输入网站名称时,才能为欢迎屏幕创建默认控制器的正确方法。
e.g: sitename.com
答案 0 :(得分:0)
为了确保我们在这里谈论同样的事情,让我们同意sitename.com是您的Web应用程序的根URL。这意味着,您的Web服务器将以某种方式确保将对sitename.com的任何请求重定向到您的servlet。
如果是这样,您当前的方法是正确的。
您可能希望查看STS中提供的spring-MVC项目模板(请参阅https://spring.io/tools/sts)。除了你使用.xml进行注释和该模板的作者之外,它还有很好的相关性。
不要担心默认的控制器。您的'/'网址无需专用控制器。您也可以为应用程序的所有页面创建一个或多或少静态的Controller,例如法律声明页面,页面,联系页面等。
根据项目的大小,最好将URL分布在多个控制器上,以便保持清晰的视图。另一方面,我不会为每个URI创建一个。
关于servlet映射的问题'/'vs'/ *'请参阅Difference between / and /* in servlet mapping url pattern。像往常一样,BalusC解释完整而简单。