SpringBoot 中如何使用JSP页面开发?

前言

我们学校的计算机科学与技术、软件工程,作为一个培养IT技术人才的专业,依旧开着古老的JSP课程,倒也并不是课程跟不上IT时代,是IT行业发展太快了。
SpringBoot诞生于2014年,那个时候SSH框架如日中流,就在SpringBoot飞速发展的几年中,SSM逐渐取代了SSH以至于现在仍有很多企业使用SSM,但这一切都赶不上SpringBoot发展的浪潮,时间点说来也巧,大概在2018年,我进入大学的那年,SpringBoot纵身一跃名冠前列,直接超过了SSM。
说到JSP,它对服务器的依赖只增不减,这种连体开发或许在早些年还能独挡一面,但放在现在真是想让人跑路。
在这里插入图片描述

看了看手中的JSP教材,还有未完成的大作业,干吧,不就是在SpringBoot中来使用JSP开发页面吗。

tip:本文操作在IDEA中实现

正文 SpringBoot 中如何使用JSP页面开发

依赖引入与加载

引入POM

  • 在SpringBoot中,我们直接引入pom依赖就可以了。由于JSP是动态网页,光有SpringBoot自带的Tomcat是无法完成解析的,所以我们必须引入tomcat-embed-jasper这一项,而servlet由于SpringBoot已经提供,我们可以忽略,这个地方其实是有一点小小的影响的,我在文章后面会提到。对于jstl的引入作用是让项目能够使用JSP页面编程,这个也是必加项。
		<!--对jsp的支持-->
        <!--引入springBoot 内嵌的Tomcat对JSP的解析包-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <!--jsp-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <!--jstl-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

创建webapp

  • 如果了解SSM或的应该接触过webapp文件夹,它在ssm有jsp开发的应用中经常见到,就算是SpringBoot也不能例外。我们直接在SpringBoot项目中的main文件夹(与resources/java同级的目录)创建webapp文件夹。
    在这里插入图片描述

  • 创建文件夹后还不能直接作为jsp的开发文件夹使用,如果你同样使用IDEA开发工具,请将webapp添设置为web模块,信息参考如下图在这里插入图片描述

  • 然后就是webapp文件夹里的内容了,其中的web.xml是必须的,这里参考代码,可以根据实际使用修改

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--错误跳转页面-->
    <error-page>
        <exception-type>com.cloud.lost.common.config.exception.CloudException</exception-type>
        <location>/WEB-INF/error/404.jsp</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/error/404.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/WEB-INF/error/500.jsp</location>
    </error-page>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.ico</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.gif</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>
</web-app>

配置解析器

  • 需要注意的是,在SpringBoot中使用JSP还需要在application.yml配置文件中添加解析配置,让SpringBoot能够解析到jsp页面。
spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp
      suffix: .jsp

业务实现

新建JSP页面

  • 因为我配置的jsp文件路径在/WEB-INF/jsp,所以我们在里面添加jsp文件即可,这里我创建了一些页面,作为测试我就不贴页面代码了,主要看看Controller的编写。比如下面的代码实现的是当你访问localhos项目主页时将会访问到(/user/login/index)WEB-INF目录下的jsp/user/login/index.jsp页面。
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 * @author Long
 */
@Controller
@RequestMapping("/")
public class IndexController {
    @RequestMapping("/")
    public ModelAndView index(){
        return new ModelAndView("/user/login/index");
    }
}
  • 测试结果
    在这里插入图片描述

ModelAndView的使用

数据携带
  • 这里我并不想单独拿出来说的,但是鉴于其传递数据与页面控制的特性,就算是JSP,我们也能用ModelAndView达到数据与页面的解耦效果。
  • 例如在下面的代码中,我们同样是完成了向/user/login/index页面的跳转,同时还携带了一个数据,这个数据的key是name,值是张三,这样我们就可以在页面中渲染出来我们想要的效果,这一点与其他的模板引擎倒是非常相似。
		ModelAndView modelAndView = new ModelAndView("/user/login/index");
        modelAndView.addObject("name", "张三");
        return modelAndView;
数据获取
  • 获取数据,我们使用JSP的EL功能,即${},它与很多的模板引擎都很相似,例如下面的代码在页面中,如果跳转时通过ModelAndView携带了数据,我们就能根据key拿到数据并渲染到页面上
<span>${name}</span>
  • 至此,我们便能在SpringBoot中使用JSP页面进行开发了,仿佛又回到了从前后端程序员为项目时生产拖家带口的时代了。

其他问题

  • 后来开发中,因为业务需求,需要在项目中集成QQ登录的功能,但是集成在SpringBoot与JSP项目中会出现异常,这个异常并不是人为的,有可能是Tomcat冲突,但在我写这篇博客时我仍然没有找到问题所在。
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
虽然Spring Boot官方不推荐使用JSP作为视图层技术,但如果你仍然想使用JSP,你可以按照以下步骤进行开发: 1. 在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> ``` 2. 在application.properties文件添加以下配置: ```properties spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp ``` 3. 在src/main/webapp/WEB-INF目录下创建jsp文件夹,并编写JSP页面。 4. 在Controller使用`@RequestMapping`注解来映射请求,并返回JSP视图名称。 ```java @Controller public class UserController { @RequestMapping("/user") public String user(Model model) { User user = new User(); user.setName("Tom"); user.setAge(18); model.addAttribute(user); return "user"; } } ``` 5. 在JSP页面使用JSTL标签来渲染数据。 ```jsp <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>User Info</title> </head> <body> <h1>User Info</h1> <c:out value="${user.name}"/> is <c:out value="${user.age}"/> years old. </body> </html> ``` 这样就可以使用Spring Boot开发JSP了。但是需要注意的是,由于JSP不是Spring Boot官方推荐的视图层技术,可能会存在一些问题。如果你遇到了问题,建议使用Thymeleaf或者Freemarker等官方推荐的视图层技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值