SpringBoot官方不推荐使用JSP来开发web页面,而是推荐如Thymeleaf,FreeMarker等模板引擎来开发,但是绝大部分做java的程序员还是习惯jsp;所以,本文先讲解SpringBoot如何支持jsp开发,后面再讲如何支持Thymeleaf。
整合jsp还是比较简单的,具体实践步骤如下:
1.pom.xml
我们先引入支持jsp的必要依赖:
<!--jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.28</version>
</dependency>
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!--jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
2.写页面
鉴于大多数学习SpringBoot的程序员都是有spring开发经验的,一般习惯的包结构都是:
- main
- webapp
- WEB-INF
- jsp
- index2.jsp
而我们SpringBoot项目结构目前不是这样的,所以我们也在项目下建一个这样的结构(此步骤不是必须的,后面会配视图路径前缀,你建的结构,只要前缀配完可以读到就可以了,这里这么写只是因为大部分人习惯这么写。):
然后写一个简单的页面,后面做访问测试用。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" %>
<div class="sm">
<form method="POST" enctype="multipart/form-data" action="/upload/uploadBlog">
<p>文件:<input type="file" name="file"/></p>
<p><input type="submit" value="上传" /></p>
</form>
</div>
3.配置视图
在application.properties中配置一下视图,如果你的包结构不是上面这样的,那你可以按照自己的结构配置即可,这里配置的是文件的前缀路径和文件后缀。
#jsp视图跳转
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
这样,当我们返回index2时,框架自动会去寻找/WEB-INF/jsp/index2.jsp这个文件的,他会自动组合前缀和后缀。注意:
/WEB-INF/jsp/
这后面是需要斜杠的,不然会组合成:/WEB-INF/jspindex2.jsp,会报错的。
4.写接口
注意,这个类的注解,不要再加@RestController,加完这个类所有的接口返回都自动成了json格式了,我们这里用@Controller就好。
package com.java4all.controller;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
/**
* Author: momo
* Date: 2018/3/30
* Description:
*/
@Controller
@RequestMapping("web")
public class WebController {
private final org.slf4j.Logger logger = LoggerFactory.getLogger("");
@RequestMapping(value = "index",method = RequestMethod.GET)
public String index(MultipartFile file){
return "index2";
}
}
5.ServletInitlalizer
ServletInitlalizer初始化,这个需要我们自己写一下,这样程序启动时会自动启动和加载servlet容器。
package com.java4all;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* Author: momo
* Date: 2018/3/30
* Description:
*/
public class ServletInitlalizer extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return super.configure(builder);
}
}
6.访问接口
我们去浏览器访问接口:http://localhost:8088/web/index
会得到如下结果:
本案例在github地址:https://github.com/lightClouds917/tmall/tree/dev