spring-boot 与 jsp 集成(使用 gradle)

spring-boot 与 jsp 集成(使用 gradle)

spring boot 默认采用 thymeleaf 模板引擎,其默认的配置就支持 thymeleaf 。

然后很多的工程以前就使用 jsp 来编写,切换到 thymeleaf 的代价太大,实在没有必要,在找了网上的一些资料后,做了一下 spring-boot 与 jsp 的集成配置。

整个配置的关键点有几个:

  1. 确定 jsp 目录
  2. 让 spring-boot 采用正确的 view 解析类
  3. 使用支持 jsp 的容器插件

如果以 war 方式打包,应用类需要继承 SpringBootServletInitializer ,才会被容器正确加载。

start.spring.io 下载一个支持 web 的项目骨架代码后,开始进行定制。

确定 jsp 目录

spring boot 默认的模板目录为 src/resources/templates ,而一般遗留项目(包括使用 maven)时,可能会用 WebContentsrc/webapp 目录作为资源目录,然后把 jsp 放到 WEB-INF/jsp 目录下以防止被直接读取。

假设现在放在 src/webapp/WEB-INF/jsp 目录下,因此,首先需要调整相应的配置,在 application.properties (或 application.yml),修改如下:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

这样就能指定从src/webapp 目录加载视图文件,并以 .jsp 作为后缀,这些配置会被 spring boot 中的配置属性 bean WebMvcProperties 接收。

WebMvcProperties 除了视图的前缀、后缀外,还包含日期格式之类的一些配置。

使用正确的 view 解析类

事实上,并不需要显式地配置视图解析类,spring boot 会自动找到合适的试图解析器和解析类。如果打开了 debug ,可见到加载了对应的 bean WebMvcAutoConfiguration

WebMvcAutoConfiguration 这个自动化配置的类中,会配置一个 InternalResourceViewResolver
的 bean :

@Bean
@ConditionalOnMissingBean
public InternalResourceViewResolver defaultViewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix(this.mvcProperties.getView().getPrefix());
    resolver.setSuffix(this.mvcProperties.getView().getSuffix());
    return resolver;
}

可见,在缺省情况下,就会创建一个默认的 view resolver 来进行视图的解析。 InternalResourceViewResolver 的构造函数,在发现 classpath 下存在 jstl 类库时,会自动以 JstlView 类作为视图。

public InternalResourceViewResolver() {
    Class<?> viewClass = requiredViewClass();
    if (InternalResourceView.class == viewClass && jstlPresent) {
        viewClass = JstlView.class;
    }
    setViewClass(viewClass);
}

采用支持 jsp 的容器

默认生成的项目结构中,会采用 tomcat 作为嵌入式的容器,但是并没有包含支持 jsp 的组件,因此,需要增加依赖:

runtime('org.apache.tomcat.embed:tomcat-embed-jasper')

如果使用到 jstl ,由于部分容器是不带 jstl 的,因此还需要增加 jstl 的依赖。

compile('javax.servlet:jstl')

运行

最后,汇总一下修改的内容:

  1. build.gradle

    增加 tomcat jasper 和 jstl

     compile('javax.servlet:jstl')
     runtime('org.apache.tomcat.embed:tomcat-embed-jasper')
  2. 修改 application.properties

    修改 prefix 和 suffix

     spring.mvc.view.prefix=/WEB-INF/jsp/
     spring.mvc.view.suffix=.jsp
  3. 编写 jsp 和 controller 类

    controller

     @Controller
     class IndexController {
         @GetMapping("/")
         fun index(): String {
             return "index"
         }
     }

    index.jsp

     <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
     <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
     <html>
     <head>
         <title>Index</title>
     </head>
     <body>
     <h1>Hello, world!</h1>
     </body>
     </html>
  4. 打包运行

转载于:https://www.cnblogs.com/fengyc/p/9621325.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个基于Spring框架的快速开发框架,它提供了自动配置和约定优于配置的原则,使得构建独立的、可执行的Java应用程序变得更加简单。下面是Spring Boot框架的基本结构: 1. 主要依赖:Spring Boot框架通过Maven或Gradle构建工具管理依赖。主要依赖包括spring-boot-starter-parent、spring-boot-starter-web、spring-boot-starter-data-jpa等,这些依赖会自动导入所需的库和配置。 2. 主要注解:Spring Boot使用注解来配置和启动应用程序。其中,@SpringBootApplication注解标记了主类,表示这是一个Spring Boot应用程序的入口点。其他常用注解包括@Controller、@RestController、@Service、@Repository等。 3. 主配置文件:Spring Boot使用application.properties或application.yml文件作为主配置文件,用于配置应用程序的属性。可以在配置文件中定义数据库连接、端口号、日志级别等信息。 4. 自动配置:Spring Boot通过自动配置机制来简化应用程序的配置。它会根据classpath中的依赖自动配置应用程序的各个模块,如Web模块、数据访问模块等。也可以通过@EnableAutoConfiguration注解手动启用或禁用自动配置。 5. 控制器类:在Spring Boot中,使用@Controller或@RestController注解来定义控制器类。控制器类处理HTTP请求,并返回相应的结果。 6. 服务类:通常,Spring Boot应用程序会使用@Service注解来定义服务类。服务类实现业务逻辑,协调不同的组件并提供相应的功能。 7. 数据访问类:Spring Boot支持多种数据访问技术,如JPA、Hibernate、MyBatis等。数据访问类用于访问数据库或其他数据源,并执行数据操作。 8. 页面模板:对于构建Web应用程序,Spring Boot支持多种页面模板技术,如Thymeleaf、Freemarker、JSP等。页面模板用于渲染动态内容。 这些是Spring Boot框架的基本结构和组件。使用Spring Boot框架可以快速构建独立的、可执行的Java应用程序,大大简化了开发过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值