Springboot使用Jsp模板视图开发web应用(含问题分析)

最近有个springcloud项目,所有服务返回的信息是json字符串,现在需要对项目进行改造,使用jsp页面返回服务调用结果。开发工具为Idea。

先来看一下项目结构(只展示涉及到的部分,如果你的项目中没有对应文件夹,需要新建文件夹):

├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── demo
│   │   │               └── controller
│   │   │                    └── HelloController.java
│   │   │               └──DemoApplication
│   │   │              
│   │   ├── resources
│   │   │   └── application.properties
│   │   └── webapp
│   │   │    └── WEB-INF
│   │   │    │       └── jsp
│   │   │    │             └── page
│   │   │    │                     └── page2.jsp
│   │   │    │             └── page1.jsp
│   │   │    └── index.jsp
│   │   └──pom.xml

第一步:新建springboot项目

第二步:配置pom.xml文件
添加以下依赖

<!-- Compile -->
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-tomcat</artifactId>
 </dependency>
 <!-- Provided -->
 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
 </dependency>
 <!--jsp页面使用jstl标签-->
 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>jstl</artifactId>
 </dependency>
 <!--用于编译jsp-->
 <dependency>
     <groupId>org.apache.tomcat.embed</groupId>
     <artifactId>tomcat-embed-jasper</artifactId>
 </dependency>
 <dependency>
     <groupId>org.apache.tomcat</groupId>
     <artifactId>tomcat-jsp-api</artifactId>
 </dependency>

第三步:配置application.properties或application.yml文件(这两个文件作用相同,只是里面配置内容的格式有所差别)

在application.properties中加入以下配置:

#资源路径开头
spring.mvc.view.prefix=/WEB-INF/jsp/
#资源路径结尾
spring.mvc.view.suffix=.jsp

第四步:配置控制器Controller

HelloController.java内容如下:
注:之前的项目使用@RestController返回json,现在需要使用@Controller,有关这两个注解的区别,请点击这里

package com.example.demo.controller;

        import org.springframework.stereotype.Controller;
        import org.springframework.ui.Model;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.servlet.ModelAndView;
/**
 * @Description:
 * @Author: Eric
 * @Date: 18/11/2 14:36
 */
@Controller
public class HelloController {

	//形式一
    @RequestMapping(value={"/page1"})
    public String method1(){
        return "page1";
    }
    @RequestMapping(value={"/page2"})
    public String method2(){
        return "page/page2";
    }

	//形式二
    @RequestMapping("/page1m2")
    public ModelAndView method3(){
        // 页面位置 /WEB-INF/jsp/page1.jsp
        ModelAndView mav = new ModelAndView("page1");
        mav.addObject("page1","This is page1 ---ModelAndView");
        return mav;
    }

	//形式三
    @RequestMapping("/page1m3")
    public String method4(Model model){
        // 页面位置 /WEB-INF/jsp/page1.jsp
        model.addAttribute("page1","This is page1 ---Model ");
        return "page1";
    }
}

第五步:设置webapp目录为web资源文件目录:
ctrl+alt+shift+s打开下面内容,按流程操作
在这里插入图片描述

第六步:配置springboot启动类和jsp页面
(1)springboot启动类:DemoApplication.java

package com.example.demo;

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

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

(2)jsp页面:
page1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${page1}
</body>
</html>

page2.jsp

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    ${page2}
    </body>
    </html>

第七步:启动项目
启动方式一:
在这里插入图片描述

启动方式二:
在这里插入图片描述

遇到的问题:

1、采用启动方式一启动项目后,后端服务向前台返回jsp页面或*通过url访问项目内静态资源(带文件类型后缀)*时,提示以下信息:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sat Nov 03 17:41:59 CST 2018
There was an unexpected error (type=Not Found, status=404).
/WEB-INF/jsp/page1.jsp

解决方式:
检查资源路径,如果发现资源路径错误,则修改访问路径;
如果资源路径正确,则采用启动方式二启动项目,具体原因未知,推测与Idea有关。

2、后端服务向前台返回jsp页面*或 通过url访问项目内静态资源(不带文件类型后缀)时,提示以下信息:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sat Nov 03 17:41:59 CST 2018
There was an unexpected error (type=Not Found, status=404).
No message available

解决方式:
检查资源路径,如果发现资源路径错误,则修改访问路径;
如果资源路径正确,检查application.properties文件是否配置了spring.mvc.view.suffix=.jsp

3、访问jsp页面但是却变成下载该页面

解决方式:
缺少jsp解析的jar包,参照第二步添加相关依赖即可

猜你喜欢

转载自blog.csdn.net/qq_39387856/article/details/83689177
今日推荐