Web Services 控制器返回字符串“login”,而不是重定向到springboot应用程序中的“login.jsp”

tvokkenx  于 2022-11-15  发布在  Spring
关注(0)|答案(1)|浏览(131)

你好,我正在尝试在Springboot中为登录页面构建一个Web服务。当我运行项目应用程序时,一切看起来都很好,但问题是,页面控制器不是重定向到“login.jsp”,而是返回字符串值“login”。知道我哪里做错了吗?
pom.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 https://maven.apache.org/xsd/maven- 
4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.6</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.micro</groupId>
<artifactId>login-mvc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>login-mvc</name>
<description>a micro service for login</description>
<properties>
    <java.version>11</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-web</artifactId>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>3.0-alpha-1</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina</artifactId>
        <version>10.0.10</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </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>
</dependencies>

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

应用程序属性

##port
server.port=9001

##DB Connection
spring.datasource.url= jdbc:mysql://localhost:3306/newdb?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

##MVC view
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix= .jsp
spring.mvc.static-path-pattern=/resources/**

主计长

package com.micro.services;

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

@RestController
public class LoginController {
     @RequestMapping("/login-page")
     public String checkMVC() {
        return "login";
     }
}

Spring启动应用程序:

package com.micro.services;

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

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

login.jsp

<!doctype html>
<html lang="en">
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" 
    rel="stylesheet" integrity="sha384- 
    1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

    <title>Login Page</title>
 </head>
<body>
    <h1>Hello Friends I am learning WebServices!!!</h1>
    <div>
        <form action="/login" method="post">
            <div><input type="text" name="userName" value=""></div>
            <div><input type="text" name="password" value=""></div>
            <div><input type="submit" name="login" value=""></div>
            <div><input type="button" name="Register" value=""></div>
        </form>
    </div>
    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" 
    integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" 
    crossorigin="anonymous"></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
   <!--
   <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" 
   integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" 
   crossorigin="anonymous"></script>
   <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" 
   integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" 
   crossorigin="anonymous"></script>
   -->
</body>
</html>

项目:file structure
浏览器:Output

mbyulnm0

mbyulnm01#

@RestController   <---------------
public class LoginController {
     @RequestMapping("/login-page")
     public String checkMVC() {
        return "login";
     }

我在代码中指出的问题是,您使用了@RestController,这意味着当您使用return "login"时,它会解析请求并给予一个响应作为实际的消息体。因此,在响应体中,它只写为String "login"
您需要的是@Controller,它将在Spring MVC的上下文中工作,当您执行return "login"时,它将默认搜索名称为login的页面以返回,因此它将把您的login.jsp转换为一些html代码,并将此页面作为响应返回给客户端。

Edit:您的项目还有另一个问题。正如Sping Boot 文档所指出的,当您将应用程序打包为jar时,呈现jsp视图时会出现问题。

检查this answer以了解如何配置它使其工作。

相关问题