无法查看JSP内容,得到“意外错误(类型=未找到,状态= 404)”

时间:2019-09-10 11:08:38

标签: java spring maven jsp netbeans

我刚刚开始Spring Boot应用程序开发。我正在尝试显示由Netbeans 11.1创建的默认jsp文件的简单jsp页面。我在互联网上搜索了此错误,并在互联网上找到了到目前为止我尝试过的许多问题和答案。
大多数答案都说此错误是由与其他Java文件不在同一目录中的controller file引起的。但这不是我的情况。首先在下面检查我的文件结构。 enter image description here

我尝试直接从home.jsp文件夹而不是webapp文件夹和webapp/WEB-INF文件夹加载webapp/WEB-INF/jsp文件,因为我从Github的演示应用程序中看到了这种结构。

我在.pom文件中添加了jasper依赖项,该文件负责加载.jsp内容。

<dependency>
         <groupId>org.apache.tomcat.embed</groupId>
         <artifactId>tomcat-embed-jasper</artifactId>
         <scope>provided</scope>
         <!--<version>9.0.24</version>-->
</dependency>

这是我的AppContoller类代码

@Controller
public class HomeController {
    @RequestMapping("home")
    public String home(){
        System.out.println("HomeController is running!!!"); //showing this output
        return "home.jsp";
    }
}

注意::此类显示“ HomeController正在运行!”当我键入locathost:8080/home时输出这意味着控制器已正确配置,并且错误不是由于路径不同。

我的MyWebAppApplication类仅具有默认的main方法。 这就是我在浏览器中看到的。

  

白标错误页面
  此应用程序没有针对的明确映射    /错误,因此您将其视为备用。

     

2019年9月10日星期二15:38:44 PKT
  发生意外错误(type = Not   找到,状态为404)。 /home.jsp

如果有任何其他需要我提出的问题,请告诉我。

我正在使用

  • 窗口10
  • Netbeans 11.1
  • Java版本8
  • 使用Maven的Spring Boot
  • 嵌入式Tomcat服务器

2 个答案:

答案 0 :(得分:1)

您需要添加以下属性:

$0

spring.mvc.view.prefix=/WEB-INF/ spring.mvc.view.suffix=.jsp 替换为return "home.jsp";

还应该添加一些配置属性和依赖项:

return "home";

更新: 使用以下类来运行应用程序:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap</artifactId>
        <version>3.3.7</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jdt.core.compiler</groupId>
        <artifactId>ecj</artifactId>
        <version>4.6.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
</dependencies>

答案 1 :(得分:0)

默认情况下Netbeans 11.1生成这两行的jsp文件

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

此处前缀为f,而uri为http://java.sun.com/jsf/core。当我将此标签库替换为

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>   //here prefix is `c` 
                                                                  & uri is from jsp/jstl instead of jsf

然后注释掉默认jsp文件中的第二个taglib,它对我有用:)。
我以为这些依赖项可以完成工作,但是我们也必须在jsp页面中指定正确的tablib。

<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>

现在我还要在控制器中返回home,而不是i.bondarenko在他的回答中建议的home.jsp
希望这会帮助某人。