springboot.03.springboot集成jsp(代码片段)

潮汐先生 潮汐先生     2022-12-31     719

关键词:

前言

在SpringBoot中默认推荐使用的模板引擎是Thymeleaf,但是作为传统Web开发的王者jsp在现在的一些企业中仍然被广泛使用。所以对于在SpringBoot中如何使用jsp还是需要有所了解。

现在广泛被推崇的是前后端分离,大有替代传统web开发的趋势。而前后端分离模式中VUE对于前端至关重要。所以对于VUE的学习也是必须的。

准备工作

由于本次演示SpringBoot.03.SpringBoot集成jsp模板,我们需要jsp页面。这里我们来新建一个jsp模板。

依次选择File->settings->Editor->File and Code Templates,然后选中Files;在nameExtension中键入jsp,将以下内容填到文本框中

<%@ page pageEncoding="UTF-8" language="java" contentType="text/html; UTF-8" %>
<!doctype html>
<html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>这是jsp页面的标题</title>
  </head>
  
  <body>
      <h1>Hello jsp!</h1>
  </body>
</html>

最后点击Apply->OK;如下图所示:

jsp集成案例

集成步骤

1.新建Module

我们选择Spring Initializr的方式新建一个Module,按照下图填写信息后点击Next

Dependencies中选择Spring Web,点击Finish,如下图所示:

2.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/>
    </parent>

    <groupId>com.christy</groupId>
    <artifactId>springboot-03-jsp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-03-jsp</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <!-- scope为test说明该依赖只在测试时有用,打包时不会打进来 -->
            <scope>test</scope>
        </dependency>

        <!-- c标签库 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- 让内嵌tomcat具有解析jsp功能 -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- spring-boot-maven-plugin 该插件是SpringBoot官方集成的maven插件,
            除了能保证正确执行java -jar来启动项目
            另外还能是项目正常加载jsp页面
            -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3.Springboot03JspApplication.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Springboot03JspApplication 

    public static void main(String[] args) 
        SpringApplication.run(Springboot03JspApplication.class, args);
    

4.application.yml

server:
  port: 8803

# 配置视图解析器
spring:
  mvc:
    view:
      prefix: /
      suffix: .jsp

5.index.jsp

我们在webapp目录右键选择新建index.jsp页面,如下图所示:

修改jsp页面内容如下:

<%@ page pageEncoding="UTF-8" language="java" contentType="text/html; UTF-8" %>
<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>这是jsp页面的标题</title>
    </head>

    <body>
        <h1>Hello SpringBoot!</h1>
    </body>
</html>

6.JspController.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @Author Christy
 * @Date 2021/9/2 10:02
 * @Controller 这里不能使用@RestController注解,否则无法跳转页面只能输出字符串
 **/
@Controller
@RequestMapping("jsp")
public class JspController 

    private static final Logger log = LoggerFactory.getLogger(JspController.class);

    @RequestMapping("hello")
    public String sayHello()
        log.info("Hello Spring Boot!");
        // 由于我们配置了视图解析器,返回的index会被重定向为url地址:http://localhost:8803/index.jsp
        return "index";
    

7.测试

我们启动项目,浏览器访问http://localhost:8803/jsp/hello,结果如下:

一脸懵逼有没有?按理说配置啥的都没有错啊!为啥会404呢?

问题分析

之所以出现404原因就是项目并没有找到webapp这个目录,至于更深层次的原因我也不知道。如果哪位大牛能解释这个问题麻烦告知一下。

解决方案

1.springboot:run

在pom.xml文件中我们集成另外SpringBoot官方的maven插件,那么在右侧边栏maven中找到Plugins下的springboot:run命令运行项目。如下图所示:

项目重启后浏览器访问http://localhost:8803/jsp/hello,结果如下:

2.设置Working directory

我们选择Edit Configuration,在Working directory中选择MODULE_DIR。如下图所示:

项目再次重启后浏览器访问http://localhost:8803/jsp/hello,结果如下:

如果出现访问页面是变成了页面下载,说明jsp页面没有被正确编译和解析。请刷新一下maven重新加载一下依赖;

修改jsp无须重启应用

在实际开发过程中页面调试是非常繁琐的,在更改了相应程序之后需要同步刷新页面数据,这就需要频繁的重启应用。对于jsp的集成,SpringBoot提供了一种方法在更改程序或者数据后不需要重启应用,只需要重新刷新页面就可以了。

我们打开配置文件,加上以下代码,内容如下:

server:
  port: 8803
  servlet:
    jsp:
      init-parameters:
        development: true

# 配置视图解析器
spring:
  mvc:
    view:
      prefix: /     #这个代表jsp的根路径 需要在java包下新建webapp目录
      suffix: .jsp

我们重启应用,访问http://localhost:8803/jsp/hello,页面还是显示Hello SpringBoot!,然后我们在jsp页面中新增<h1>Hello Christy!</h1>,然后刷新页面。结果如下:

springboot.03.springboot集成jsp(代码片段)

SpringBoot.03.SpringBoot集成jsp前言准备工作jsp集成案例集成步骤1.新建Module2.pom.xml3.Springboot03JspApplication.java4.application.yml5.index.jsp6.JspController.java7.测试问题分析解决方案1.springboot:run2.设置Workingdirectory修改jsp无 查看详情

交叉验证与训练集验证集测试集

一、前言训练集、验证集和测试集这三个名词在机器学习领域极其常见,但很多人并不是特别清楚,尤其是后两个经常被人混用。在有监督(supervise)的机器学习中,数据集常被分成2~3个,即:训练集(trainset),验证集(validationset),... 查看详情

数据集拆分:训练集、验证集、测试集

参考技术AK折交叉验证是比较常用的拆分训练集、测试集,并用于模型训练、验证的方式。具体步骤如下--自助法抽样的核心理解就是:有放回的抽样。有多种方式可供选择对于分类为目的的有监督学习(例如癌症恶性、良性预测)... 查看详情

机器学习数据集划分-训练集,验证集,测试集

训练集作用:估计模型学习样本数据集,通过匹配一些参数来建立一个分类器。建立一种分类的方式,主要是用来训练模型的。验证集作用:确定网络结构或者控制模型复杂程度的参数,超参数对学习出来的模型,调整分类器的... 查看详情

数据集格式

数据集格式1.COCO数据集2.VOC数据集3.MOT数据集1.COCO数据集2.VOC数据集3.MOT数据集 查看详情

数据集格式

数据集格式1.COCO数据集2.VOC数据集3.MOT数据集1.COCO数据集2.VOC数据集3.MOT数据集 查看详情

如何将数据集拆分为训练集和验证集

】如何将数据集拆分为训练集和验证集【英文标题】:howtosplitdatasettotrainingsetandvalidationset[closed]【发布时间】:2016-09-1320:32:12【问题描述】:我们有一些数据集:从1月到6月,每天销售100件产品,我们的目标是预测7月份每天的销... 查看详情

如何将数据集划分为训练集和测试集?

】如何将数据集划分为训练集和测试集?【英文标题】:howtodividedatasetintotrainandtestset?【发布时间】:2017-09-3013:18:55【问题描述】:我尝试使用带有map-reduce框架的朴素贝叶斯分类算法对数据集进行分类。我的问题是如何将数据集... 查看详情

训练集验证集和测试集的意义(转)

...icle/details/78266558在有监督的机器学习中,经常会说到训练集(train)、验证集(validation)和测试集(test),这三个集合的区分可能会让人糊涂,特别是,有些读者搞不清楚验证集和测试集有什么区别。I.划分如果我们自己已经有... 查看详情

使用验证集、训练集和测试集之间的顺序

】使用验证集、训练集和测试集之间的顺序【英文标题】:Orderbetweenusingvalidation,trainingandtestsets【发布时间】:2019-06-0505:05:44【问题描述】:我正在尝试了解机器学习中模型评估和验证的过程。具体来说,必须以何种顺序以及如... 查看详情

分割训练集测试集验证集的两种方式(代码片段)

训练模型过程中,不可避免要对数据集进行切分,将数据集按比例分成训练集,测试集,验证集。作为一种常见的需求,稍微总结了一下两种实现方式。1.train_test_split平时最常见的切分数据集的方法是sklearn中... 查看详情

第三章共享程序集和强命名程序集

目录:3.1两种程序集,两种部署3.2为程序集分配强名称3.3全局程序集缓存3.4在生成的程序集中引用强命名程序集3.5强命名程序集能防篡改3.6延迟签名3.7私有部署强命名程序集3.8‘运行时"如何解析类型引用3.9高级管理控制(配置... 查看详情

r语言数据预处理把类型变量转化为因子变量,把数据集转化为h2o格式数据集划分(训练集测试集验证集)

R语言数据预处理、把类型变量转化为因子变量,把数据集转化为h2o格式、数据集划分(训练集、测试集、验证集)目录 查看详情

验证集与测试集有啥区别?为啥要分训练集、验证集和测试集?

参考技术A    测试集与验证集的存在主要是为了把调参与评估泛化能力分为两个相对独立的步骤,体现了正交化思想。    验证集一般用于进一步确定模型中的超参数(例如正则项系数、神经网络中... 查看详情

共享程序集和强命名程序集(上)

1.1  两种程序集,两种部署(待更新...)两种程序集:弱命名程序集,强命名程序集。两者结构完全相同。区别:强命名程序集使用发布者的公钥/私钥进行签名。部署:私有或者全局。1.2  为程序集分配强名称1.3&n... 查看详情

如何把数据集划分成训练集和测试集

...阳《机器学习》问题:对于一个只包含\(m\)个样例的数据集\(D=\(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\),如何适当处理,从\(D\)中产生训练集\(S\)和测试集\(T\)?下面介绍三种常见的做法:留出法交叉验证法自助法留出法(hold-out)留出法直接将... 查看详情

神经网络中的训练集、验证集和测试集有啥区别?

】神经网络中的训练集、验证集和测试集有啥区别?【英文标题】:What\'sisthedifferencebetweentrain,validationandtestset,inneuralnetworks?神经网络中的训练集、验证集和测试集有什么区别?【发布时间】:2011-02-2722:05:13【问题描述】:我正... 查看详情

深度学习如何分配训练集验证集测试集比例

一、小规模数据集对于传统机器学习阶段(数据集在万这个数量级),一般分配比例为训练集和测试集的比例为7:3或是8:2。为了进一步降低信息泄露同时更准确的反应模型的效能,更为常见的划分比例是训练集、... 查看详情