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

Spring不断返回字符串,而不是jsp/html内容

滑乐逸
2023-03-14

我试图理解整个Spring框架。据我所知,相对较新的使用gradle的技术使得很多教程和在线帖子过时了?

我遇到的主要问题是,当我尝试显示jsp或html页面时,网页正文显示文本:“filename.jsp”。

该项目由New-创建

文件夹结构:

测试

--Spring元件(由STS创建)

--src/main/java-TEST-TestApplication。java(由STS创建)——测试。控制器——JSP控制器。爪哇语

--sec/main/resources--应用程序。属性(由STS创建,空文件)

--src/main/webapp(**我创建了这个目录,但这是必需的吗?)
--WEB-INF
--home.jsp
--home.html
--web.xml(**下面的附加问题)

测试应用。Java语言

package TEST;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication 
public class TestApplication {

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

家jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Test</title>
</head>
<body>

    <h1>Test 1</h1>

    <form>
        First name:<br> <input type="text" name="firstname"> <br>
        Last name:<br> <input type="text" name="lastname">
    </form>

</body>
</html>

JSP控制器。Java语言

package TEST.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class JSPController {

    @RequestMapping(value = "/jsp", method = RequestMethod.GET)
    public String home(){
        return "/webapp/WEB-INF/home.jsp";
    }   

}

网状物xml

//empty file right now

建筑格拉德尔

buildscript {
    ext {
        springBootVersion = '1.2.5.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
        classpath("io.spring.gradle:dependency-management-plugin:0.5.1.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot' 
apply plugin: 'io.spring.dependency-management' 

jar {
    baseName = 'TEST'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}


dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test") 
}


eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

当我http://localhost:8080/jsp时,html页面的正文是: /webapp/WEB-INF/home.jsp

因此jsp根本没有显示。我试过html,有或没有方法=RequestMethod。获取/发布。什么都不管用。

**另外一个问题:有很多在线帖子/教程。xml文件,例如web。xml。据我所知,这些不再需要,因为spring gradle生成了一个。xml自动从@符号?

共有2个答案

孙泳
2023-03-14

将@Controller更改为@RestController后,您必须添加此依赖项:

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

到您的pom。xml文件,如本链接中所述:https://www.yawintutor.com/warn-3200-path-with-web-inf-or-meta-inf/

屠锐
2023-03-14

这是因为您使用的是注释RestController,而不是控制器。

更改类注释

@RestController
public class JSPController {
  ...
}

收件人:

@Controller
public class JSPController {
  ...
}

当您使用RestController注释类时,默认情况下,使用RequestMapping注释的所有方法都采用ResponseBody语义。换句话说,您的方法home是序列化字符串webapp/WEB-INF/home。jsp作为JSON,而不是将其值映射到视图。

 类似资料:
  • 我试图运行Spring启动应用程序,这将返回我静态文件夹上的超文本标记语言静态文件,问题是:每次我加载页面:127.0.0.1我得到字符串"bakara",而不是超文本标记语言文件bakara.html.,当我加载127.0.0.1/bakara.html我得到bakara.html文件 pom.xml: 应用属性: HomeController.java: 项目结构:

  • 假设我有一个属性如下所示: 并在test.component.html中添加一行:

  • 以下endpoint以字符串形式返回用户名。 我如何构造它以返回一个json对象,该对象包含一个键,该键的值为该字符串(例如,{“user”:“joeuser”})?

  • 问题内容: 我正在尝试使用Python 3的内置JSON模块进行一些简单的JSON解析,并且从阅读有关SO和谷歌搜索的其他问题来看,这似乎应该非常简单。但是,我想我得到的是返回的字符串,而不是预期的字典。 首先,这是我尝试从中获取值的JSON。这只是Twitter API的一些输出 我将此字符串分配给名为json_string的变量,如下所示: 然后,当我尝试从“杰森”字典中获取特定密钥时: 我收

  • Spring WebFlux的新手,尝试在一个endpoint中返回字符串数组,出于某种原因,它返回了JSON数组的一个串联字符串istead。 用一些类包装它可以解决问题,但想知道如何实际返回字符串数组?返回例如数组

  • 我正在学习如何使用Spring靴和胸腺嘧啶。我有一个问题,我在表单列表中提供一个特定对象的列表到一个Thymeleaf页面。当用户选择值并发布结果时,结果是所选对象的字符串,并且与我想要存储值的对象不兼容。 这可能听起来像一口,所以下面是代码。 输入:一个类将一组成分传递给表单,这个类在一个类成分列表中传递给表单(过滤对此无关紧要--插入一个列表作为model属性的值,键是一种成分类型) Thym