当前位置: 首页 > 知识库问答 >
问题:

在Spring MVC中显示JSP页面时出现问题

丘学海
2023-03-14

我在Spring MVC中显示jsp页面时遇到了问题。这是一个带有Gradle和IntelliJ CE的基本hello world Spring MVC:

我得到以下错误页面:

这是我的身材。格拉德尔:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.5.RELEASE")
    }
}


plugins {
    id 'java'
}

group 'com.helloct'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

bootJar {
    baseName = 'gs-serving-web-content'
    version =  '0.1.0'
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'    

    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.springframework.boot:spring-boot-devtools")

    compile("org.springframework.boot:spring-boot-starter")
    compile("org.springframework:spring-jdbc")
    compile("com.h2database:h2")

    compile("com.fasterxml.jackson.core:jackson-databind")

    compile('javax.servlet:jstl')
    compile('org.apache.tomcat.embed:tomcat-embed-jasper')    

    compile 'javax.servlet.jsp:javax.servlet.jsp-api'        

    testCompile("junit:junit")
}

视图解析器文件:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "hello")
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setViewClass(JstlView.class);
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

控制器页面:

@Controller
public class JSPController {
    @GetMapping("/jspPage")
    public String home(){
        return "jspPage";
    }
}

jsp页面位置:

application.properties文件内容:

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

使用默认模板引擎,页面显示正确,但使用jsp,它无法工作

日志错误:

https://hastebin.com/lijekesoti.apache

注意:我知道Thymleleaf是推荐的Spring模板,但出于某种原因,我想使用JSP

更新

在paulsm4答案的帮助下阅读这篇文章后,删除以下行:

compile("org.springframework.boot:spring-boot-starter-thymeleaf")

删除视图解析器文件解决了我的问题。

共有1个答案

庄高谊
2023-03-14

事实证明,让JSP与Spring Boot一起工作并非易事。结果还表明,Spring Boot 1之间有重大变化。x(大多数Spring Boot/JSP教程都是针对它编写的)和Spring Boot 2。x。

我发现这些资源很有用:

  • Navin Reddy:使用Spring Boot的Web应用程序
  • MK容:Spring Boot Hello World示例-JSP

我让JSP同时使用Spring Boot 1。x和2。x、 和Maven和Gradle在一起。我的项目在GitHub上:

  • https://github.com/paulsm4/HelloSpringBoot/tree/master/test7

以下是我需要做的重点:

>

  • 我用Eclipse STS创建了我的初学者项目。

    重要的是要指定“War”包装(相对于默认的“Jar”)

    我在我的构建中添加了以下依赖项。格雷德尔:

    dependencies {
      compile('org.springframework.boot:spring-boot-starter-web')
      compile('javax.servlet:jstl')
      compile('javax.servlet:javax.servlet-api')
      compile('org.apache.tomcat.embed:tomcat-embed-jasper')
      compile('org.webjars:bootstrap:4.1.0')
      testImplementation('org.springframework.boot:spring-boot-starter-test')
    

    事实证明,不需要指定“tomcat嵌入”(默认情况下,它包含在spring-boot-starter-web中)。

    但事实证明,除非显式地包含Tomcat嵌入jasper,否则嵌入式Tomcat不会处理JSP。

    不要指定“thymeleaf”依赖项-它会与“jasper”冲突。

    根据其他教程,我在我的应用程序中添加了这些行。属性:

    spring.mvc.view.prefix: /WEB-INF/jsp/
    spring.mvc.view.suffix: .jsp
    

    我添加了还将这些行添加到我的根类中:

    @SpringBootApplication
    public class Test7Application extends SpringBootServletInitializer {
       ...  
       @Override
       protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
          return application.sources(Test7Application.class);
       }
    
       public static void main(String[] args) {
          SpringApplication.run(Test7Application.class, args);
       }
    

    不幸的是,“其他教程”经常说创建文件夹。这行不通。

    相反,我进行了测试。jsp文件夹中的文件src/main/resources/META-INF/resources/WEB-INF/jsp

    这些链接解释了为什么:

    • Spring Boot JSP 404

    此时,我成功地使用Spring Boot显示了静态和. jsp页面。

    我希望这有帮助!

  •  类似资料:
    • 我正在为我的项目实现登录功能。在前端,我使用角度8。我已经以这种方式实现了Angular 8和Springboot在同一端口8090上运行。 我有路由作为 Java:我已经将其设置为允许所有 /login请求 Web安全配置 但是,当我呼吁localhost:8090/登录时,我面对的还是浏览器 此应用程序没有针对/错误的显式映射,因此您将其视为回退。 Wed Feb26 14:42:50IST

    • bean名称'user'的BindingResult和普通目标对象都不能作为请求属性使用 Apr 05 2019 9:18:13 AM org.apache.catalina.core.StandardWrapperValve调用严重:在路径[/DataVisualization]的上下文中servlet[SpringController]的servlet.service()引发异常[处理JSP

    • 我一直在尝试可视化地模拟交通问题,但由于某种原因,我在swing窗口中只得到了空白输出。我只看到一个灰色的屏幕,而不是一个不断移动的汽车画面。 我的绘画课如下所示: 在我的主函数中对类的调用如下: 然后,随着我模拟的每一次迭代,我打电话给 我错过了什么?

    • 我在获取下拉列表的值时遇到了麻烦,我有学生实体和部分实体,它们之间有一个关系船,在jsp中它就像而不是这个在jsp中,我需要获得特定的bean属性名称,如 学生示范班 我的道实现是这样的 像金丝马龙一样。 控制器就像 我对这个问题的最后润色是如何获得指定bean属性名的下拉值(这里我想获得bean属性名称,如)com.chan.Eschool.student.model.Section@26552

    • 本文向大家介绍Java +Tomcat + SpringMVC实现页面访问示例解析,包括了Java +Tomcat + SpringMVC实现页面访问示例解析的使用技巧和注意事项,需要的朋友参考一下 window7下Java环境安装记录:  一、安装Tomcat 1、下载tomcat 7.0,解压,无需安装,放置到目录:D:\apache-tomcat-7.0.90。 2、配置系统环境变量,CAT

    • 我已经在后端计算了表单提交总量,现在我需要在JSP页面上的“total submission”标记旁边显示它。我尝试了各种方法,但似乎都不管用。在jsp页面上显示长值的最佳方法是什么?