最近有个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包,参照第二步添加相关依赖即可