0

我是Spring的初学者,我正在学习我的项目。使用下面的代码,我可以查看index.jsp,但不能查看test.jsp。我使用Spring 4.0.1+ Tomcat 7.0.52 + STS 3.4.0。HTTP状态404 - 使用Spring + Tomcat

Webapp.java

package springweb; 

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

public class Webapp extends AbstractAnnotationConfigDispatcherServletInitializer { 
    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[0]; 
    } 

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

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

IndexController.java

package springweb.controller; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class IndexController { 
    private static final Logger logger = LoggerFactory.getLogger(IndexController.class); 
    @RequestMapping(value="/") 
    public String index() { 
     logger.info("Welcome Index!"); 
     return "index"; 
    } 
} 

TestController.java

package springweb.controller; 

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

@Controller 
public class TestController { 
    private static final Logger logger = LoggerFactory.getLogger(TestController.class); 
    @RequestMapping(value="/test/", method = RequestMethod.GET) 
    public String test() { 
     logger.info("Welcome test!"); 
     return "test"; 
    } 
} 

WebConfig.java

package springweb; 

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.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 
import org.springframework.web.servlet.view.JstlView; 

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages={"springweb.controller"}) 
public class WebConfig extends WebMvcConfigurerAdapter { 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 

    @Bean 
    public ViewResolver viewResolver() { 

     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setViewClass(JstlView.class); 
     viewResolver.setPrefix("/WEB-INF/jsp/"); 
     viewResolver.setSuffix(".jsp"); 
     return viewResolver; 
    } 
} 
+0

可能最后一个/在/测试/不正确 – Koitoer

+0

我改变了它/测试并浏览http:// localhost:8080/mte/test,仍然是相同的结果 - HTTP状态404 –

+0

您是否收到“Welcome Index!你的日志当你去索引? –

回答

0

100%免费XML的简单答案:

  1. 设置属性为DispatcherServlet的

    public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 
    
        @Override 
        protected Class<?>[] getRootConfigClasses() { 
         return new Class[] { RootConfig.class }; 
        } 
    
        @Override 
        protected Class<?>[] getServletConfigClasses() { 
         return new Class[] {AppConfig.class }; 
        } 
    
        @Override 
        protected String[] getServletMappings() { 
         return new String[] { "/" }; 
        } 
    
        //that's important!! 
        @Override 
        protected void customizeRegistration(ServletRegistration.Dynamic registration) { 
         boolean done = registration.setInitParameter("throwExceptionIfNoHandlerFound", "true"); // -> true 
         if(!done) throw new RuntimeException(); 
        } 
    
    } 
    
  2. 创建@ControllerAdvice:

    @ControllerAdvice 
    public class AdviceController { 
    
        @ExceptionHandler(NoHandlerFoundException.class) 
        public String handle(Exception ex) { 
         return "redirect:/404"; 
        } 
    
        @RequestMapping(value = {"/404"}, method = RequestMethod.GET) 
        public String NotFoudPage() { 
         return "404"; 
    
        } 
    
    } 
    

这一切