JSP Spring Boot :页面未找到(404)

nuypyhwy  于 2022-12-16  发布在  Spring
关注(0)|答案(5)|浏览(256)

我试图创建一个新的项目与Spring Boot 。但我得到下面描述的错误。我已经添加了我的代码。

错误

404页面未找到
这是我的项目结构的链接。Structure image link

聚合物.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wc</groupId>
    <artifactId>wc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>wc</name>
    <description>Work configurator project</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>`

登录名.jsp仅包含hello
登录控制器类

@Controller
public class LoginController {
@RequestMapping(value = {"/","/login"},method = RequestMethod.GET)
public ModelAndView getLoginPage(){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("login");
    return modelAndView;
    }
}

Wc应用程序类

@SpringBootApplication
public class WcApplication {

    public static void main(String[] args) {
        SpringApplication.run(WcApplication.class, args);
    }
}

为什么我得到这个,如何解决这个问题?谢谢

7kjnsjlb

7kjnsjlb1#

我想您已经错过了ViewResolver配置类。

@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter
{
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        registry.viewResolver(resolver);
    }
}

尝试上述配置,它应该调用login.jsp页面。

更新

由于您已在application.properties中正确添加了resolver。我认为问题出在文件夹WEB-INF上。此文件夹受到外部访问的保护,.jsp文件不应位于此文件夹中。它适用于web.xml等不应暴露给客户端的文件。
只需将其重命名为view(或其他名称)并将application.properties更改为-

spring.mvc.view.prefix=/view/jsp/
spring.mvc.view.suffix=.jsp

这肯定能成功。

w6mmgewl

w6mmgewl2#

在我的例子中,我在Spring Boot 时正确设置了所有内容。jspssrc/main/webapp/WEB-INF/jsp中,index.htmlsrc/main/resources/static/index.html中的欢迎页面。尽管我很努力地尝试,jsp页面还是没有被呈现。我总是得到404的返回。
但是当我改变构建过程来创建一个战争场而不是jar文件时,它工作得很好。
只是在build.gradle文件中进行了如下附加行更改

apply plugin: "war"

在那之后,当以Java-jar demo.war的身份进行战争时,一切都到位并开始工作。

rmbxnbpk

rmbxnbpk3#

我刚刚遇到了同样的问题。项目结构是正确的,一切看起来都很好。我对application.properties spring. mvc. view. prefix做了一个小的更改。我将“/WEB-INF/jsp/”更改为“WEB-INF/jsp/”,一切都正常工作。我认为在generatetarget和war中,它是根目录,所以额外的/作为前缀会引起一些混乱

fcy6dtqo

fcy6dtqo4#

这是一个层次结构问题,WEB-INF应该在webapp文件夹下。

yourMainPackage/src/main/webapp/WEB_INF

(note为了让它与springboot默认配置一起工作,webapp/应该在main/下,而不是在resources下)

e4eetjau

e4eetjau5#

我也面临着同样的问题,我花了很长时间才弄清楚有三个条件。
1.)在应用程序属性中,您需要具有以下视图解析器Map(您也可以使用基于java的Map):

logging.level.web=DEBUG
spring.mvc.view.prefix=/WEB-INF/pages/
spring.mvc.view.suffix=.jsp

Note: you have to create "WEB-INF" folder by yourself as in my case "webapp" 
   folder was empty. DEBUG property is not necessary just keep it as it will 
   help you find the root cause from logs.

2.)不得不把 Package 做成“战争”而不是jar。

<packaging>war</packaging>


3.)确保您已经添加了Tomcat碧玉依赖项,以便在运行时编译JSP页面。

<dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>

希望能有所帮助,并随时纠正我。

相关问题