【问题标题】:Configure java spring boot to read JSP files配置java spring boot读取JSP文件
【发布时间】:2019-03-10 11:42:40
【问题描述】:

有人知道如何配置 java spring boot 来读取 JSP 文件吗?互联网上的方法对我不起作用。我已经在 porm.xml 中添加了 tomcat jasper 依赖。

我的 JSP 文件:home.jsp,

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
I love java
</body>
</html>

PORM.XML中添加了依赖

<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>            

我的控制器:HomeController.java

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HomeController {
    @RequestMapping("home")
    @ResponseBody
    public String home() {
        System.out.println("hi");
        return "home.jsp";
    }
}

请解释这里的问题是什么?我正在使用 STS IDE。添加 tomcat jasper 对我不起作用。

【问题讨论】:

    标签: java spring spring-boot jsp


    【解决方案1】:

    从您的控制器方法中删除 @ResponseBody

    @Controller
    public class HomeController {
    
        @RequestMapping("home")
        public String home() {
            System.out.println("hi");
            return "home.jsp";
        }
     }
    

    【讨论】:

    • 请问您能解释一下@ResponseBody 的作用吗?
    • @Mr.Semicolon @ResponseBody 使用返回值(在本例中为home.jsp)作为请求的响应。这意味着如果您打开 /home,您将看到 "home.jsp" 作为文本。这对于开发 REST 服务很有用。另一方面,如果不使用@ResponseBody,则返回值应该是一个视图(或模型+一个视图),这种情况下会解析具体的JSP。
    【解决方案2】:

    使用模型和视图返回jsp页面。

    在下面的代码中,List 是 jsp 页面的名称。

    @RequestMapping( value="/dataCreate", method = {RequestMethod.POST })
            public ModelAndView createTemplate(HttpServletRequest request,HttpServletResponse response)
            {
                MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
                MultipartFile cuscsvfile = multipartRequest.getFile("cuscsvfile");
                ModelAndView modelView=new ModelAndView("redirect:list");
                String templateName = request.getParameter("templateName");
                String msg = messageSource.getMessage("new.template.creation.success", new Object[]{templateName}, Locale.ENGLISH);
                modelView.addObject("msg", msg);
                //return "redirect:/list";
                return modelView;
            }
    

    【讨论】:

      【解决方案3】:

      更新 application.properties

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

      并返回不带扩展名的 jsp 名称,例如“home”而不是“home.jsp”

      【讨论】:

        【解决方案4】:

        删除 @ResponseBody 注释并使用以下值更新您的 application.properties 文件

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

        spring.mvc.view.suffix=.jsp

        【讨论】:

          【解决方案5】:

          试试看,不用.jsp也可以返回。

          @RequestMapping("home")
              public String home() {
                  System.out.println("hi");
                  return "home";
              }
          

          为此,我们必须在application.properties 文件中进行一些配置,

          spring.mvc.view.suffix=.jsp
          

          (但这不是下面问题的确切答案。这只是您如何修改代码的一个想法。)

          【讨论】:

          • 不!删除 .jsp 后发生 404 错误
          • 抱歉,不是 404 错误。它包括一个白标错误页面。看不懂这是什么意思
          猜你喜欢
          • 2023-03-18
          • 2018-04-28
          • 1970-01-01
          • 1970-01-01
          • 2017-10-23
          • 2023-01-10
          • 2021-11-27
          • 1970-01-01
          • 2018-01-31
          相关资源
          最近更新 更多