好的,我正在使用 spring MVC,jsp,基于 Java 的配置。其中index.jsp是我的登陆页面,位于WEB-INF/jsp/index.jsp内。我知道 WEB-INF 内的 jsp 文件无法直接通过 URL 访问。因此,我使用 @GetMapping("/") 设置控制器,返回字符串“index”,然后由 InternalResourceViewResolver 处理,前缀为“/WEB” -INF/jsp/”,后缀为“.jsp”。 当我运行我的应用程序时,“http://localhost:14639/project/”这是我的 URL,我得到 404 not found, “请求的资源[/project/]不可用”。我在控制器内有带有 @GetMapping("/") 映射的“Sysout”语句,它没有被调用,并且控制台上没有任何日志而不是 tomcat 启动。 上下文路径是“项目”。
package Configurations;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
@Configuration
@ComponentScan(basePackages="controller")
public class MainConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class<?>[] {javaBasedConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class<?>[] {WebConfig.class};
}
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[]{"/"};
}
}
这是我的 DispatcherServlet
package Configurations;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "controller.viewsController")
public class WebConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("/static/");
}
}
这是我的 WebConfigurations
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello world..</h1>
</body>
</html>
这是我的index.jsp
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class viewsController {
@GetMapping("/")
public String home() {
System.out.println("i am working..");
return "index"; // This maps to /WEB-INF/jsp/index.jsp
}
}
这是我的viewsController。
并且, 这是我的结构
好的,解决了。 我不知道如何,但在 tomcat 模块中自动创建了新的 Web 模块,可能是因为我使用“/project/signin”作为操作。 我从eclipse中删除了tomcat,重新读取,解决了