(8)SpringBoot整合JSP

2022-05-07 16:20:48 浏览数 (1)

   摘要:SpringBoot官方不推荐使用JSP来开发web页面,而是推荐如Thymeleaf,FreeMarker等模板引擎来开发,但是绝大部分做java的程序员还是习惯jsp;所以,本文先讲解SpringBoot如何支持jsp开发,后面再讲如何支持Thymeleaf。 整合jsp还是比较简单的,具体实践步骤如下:

1.pom.xml

我们先引入支持jsp的必要依赖:

代码语言:javascript复制
        <!--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项目结构目前不是这样的,所以我们也在项目下建一个这样的结构(此步骤不是必须的,后面会配视图路径前缀,你建的结构,只要前缀配完可以读到就可以了,这里这么写只是因为大部分人习惯这么写。):

然后写一个简单的页面,后面做访问测试用。

代码语言:javascript复制
<%@ 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中配置一下视图,如果你的包结构不是上面这样的,那你可以按照自己的结构配置即可,这里配置的是文件的前缀路径和文件后缀。

代码语言:javascript复制
#jsp视图跳转
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

这样,当我们返回index2时,框架自动会去寻找/WEB-INF/jsp/index2.jsp这个文件的,他会自动组合前缀和后缀。注意:

代码语言:javascript复制
/WEB-INF/jsp/

这后面是需要斜杠的,不然会组合成:/WEB-INF/jspindex2.jsp,会报错的。

4.写接口

注意,这个类的注解,不要再加@RestController,加完这个类所有的接口返回都自动成了json格式了,我们这里用@Controller就好。

代码语言:javascript复制
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容器。

代码语言:javascript复制
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

0 人点赞