SpringBoot接手JSP项目–【JSB项目实战】

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: SpringBoot接手JSP项目–【JSB项目实战】CSDN 转过来的,所以格式与内容有些许错误请见谅

SpringBoot系列文章目录

SpringBoot知识范围-学习步骤【JSB系列之000】


SpringBoot技术很多很多

本文讲的是属于mybatis 分支下,企业实用的技术,分页技术
在这里插入图片描述

工作之初,面临JSP的老项目我要怎么办

现在不管是培训的还是在学校的学习的,还是自己通过视频学习的!
好象基本上全是统一流springBoot 了吧?然后,实习期就接手这样的东西,你只会springBoot 呀。

  • 选择1 :此处不留爷,自有留爷处
  • 选择2: 拿起你的笔记本,拯救这个公司,获得升职加薪秘籍一份
  • 选择3: 回家躺平,继续打游戏闯关

在这里插入图片描述

环境及工具:

本系列环境

环境 win7/win11
工具 idea 2017.1/idea 2018.2
jdk 1.8
数据库 mysql5.5
maven 3.2.1
项目导入方式 maven 导入
数据库前端工具 mysql-front (navicat 也可以)

==说明一下==。这样的项目因为使用了JSP页面,所以还是需要商业版的(非社区版)
功能不同,IDEA商业版是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,主要功能为:智能代码助手、代码自动提示、重构、J2EE支持;idea社区版的主要功能为:Ant、JUnit、CVS整合、代码审查、 GUI设计。

数据库前端工具:mysql-front (navicat 也可以)
主要是这些跟PHPStudy 2018 整合了,所以有的时候懒的打开navicat
关于环境的重要性,直接看上面的《SpringBoot 的项目编译即报错处理--JSB系列之001

项目里可能要用到的技术

JSP

这是一个好技术。JSP(全称Java Server Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
1997 年,Sun 公司推出了 Servlet。
由于当时的 Java Web 层体系结构中只有 Servlet,所以接收用户请求、处理业务逻辑、生成 HTML 代码等都在 Servlet 中完成。Servlet 不能像 PHP、ASP 等语言镶嵌 HTML 代码,因此输出 HTML 比较困难,且部署过程复杂。为了克服 Servlet 的这些弱点,1999 年初,Sun 公司推出了 JSP。
统治JAVA开发领域20余年,就是到了今天,在各大高校仍然随处可见!

jstl

JSP1.2不支持EL,但可以使用外部的JSTL标签以便使用EL。
JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
JSTL的优点如下:
1、简化了JSP和Web应用程序的开发。
2、在应用程序服务器之间提供了一致的接口,最大限度地提高了·Web应用在各应用服务器之间的移植。
3、允许JSP设计工具与Web应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。
4、以一种统一的方式减少了JSP中的Scriptlets代码数量,可以达到程序中没有任何Scriptlest代码。
IT技术发展如此迅猛的今天,2023年,各大高校里还有JSP课程,还有使用JSTL,就可见生命力多强,设计的多先进了。

其它的必要知识

  • 网页三剑客,这个不用说了
  • JAVA,你总得会idea吧
  • maven 这个也是必须的

JAVA方面的知识真的挺多,多了解了解之前的知识与设计,这对于你在这个行业有着巨大的好处,不断的从前人的思想里汲取营养。这才是走向大牛的正确道路

上代码

说了这么多了,还是上点正菜。
还是要先看整体代码结构。
在这里插入图片描述

这一次要先上页面了。

WEB 层

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<%--判断是否有错误消息--%>
<c:if test="${msg!=null}">
    <script>
        alert("${msg}");
    </script>
</c:if>
<!DOCTYPE html>
<html>
<head>
    <title>**信息管理系统</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="${ctx}/static/css/style.css" rel='stylesheet' type='text/css'/>
    <%--设置ico图标--%>
    <link rel="shortcut icon" href="${ctx}/favicon.png" type="image/x-icon"/>
    <link rel="icon" href="${ctx}/favicon.png" type="image/gif">
</head>
<body style="background: url('${ctx}/uploads/bg55.jpeg');background-position: center center;background-size: cover;">
<div class="main">
    <div class="login">
        <h1>管理员登录</h1>
        <div class="inset">
            <!--start-main-->
            <form action="${ctx}/admininfo/login" method="post">
                <div>
                    <h2>**信息管理系统</h2>
                    <span><input type="text" placeholder="请输入用户名" value="admin" name="username" class="textbox"></span>
                </div>
                <div>
                    <span><input type="password" placeholder="请输入密码" value="123456" name="password"
                                 class="password"></span>
                </div>
                <div>
                    <span>
                        <a href="${ctx}/index">返回首页</a>
                    </span>
                </div>
                <div class="sign">
                    <input type="submit" value="登录" class="submit"/>
                </div>
            </form>
        </div>
    </div>
    <!--//end-main-->
</div>


</body>
</html>
AI 代码解读

要注意的是这里

form action="${ctx}/admininfo/login" method="post"
AI 代码解读

登陆的后台

Controller代码

在这里插入图片描述
为了更清晰的看到关系。这里还是放一张图片好了。
看这里。不是那小姑娘的虎牙,是这个类的映射地址。
这里的知识点可以参见:《SpringBoot 的项目helloworld--JSB系列之002
这样就可以清楚的看到,springBoot 的这部分:页面=》后台,跟springMVC 无差别,就是正常的取request。

Controller 调service Mapper啥的就不用多说了,这个要是不知道的话,那就需要看《JSB系列》了。

后台进JSP页面

这一次要先看controller类

package com.code.controller;

import com.baomidou.mybatisplus.plugins.Page;
import com.code.entity.Userinfo;
import com.code.mapper.UserinfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

/**
 * 后台userinfo表的管理操作(用户管理)
 */
@Controller
@RequestMapping("/userinfo")
public class UserinfoController {

    @Autowired   //注入对象
    private UserinfoMapper userinfoMapper;

    @RequestMapping("/add")
    public String toAdd(Model model) {
        return "userinfo/userinfoAdd";
    }

    @RequestMapping("/insert") //插入数据
    public String save(Userinfo userinfo) {
        userinfoMapper.insert(userinfo);
        return "redirect:list";
    }

    @RequestMapping("/update") //修改数据
    public String update(Userinfo userinfo) {
        userinfoMapper.updateById(userinfo);
        return "redirect:list";
    }

    @RequestMapping("/delete") //删除数据
    public String save(int id) {
        userinfoMapper.deleteById(id);
        return "redirect:list";
    }

    @RequestMapping("/edit") //编辑数据
    public String edit(int id, Model model) {
        Userinfo userinfo = userinfoMapper.selectById(id);
        model.addAttribute("userinfo", userinfo);
        return "userinfo/userinfoUpdate";
    }

    @RequestMapping("/detail") //编辑数据
    public String detail(int id, Model model) {
        Userinfo userinfo = userinfoMapper.selectById(id);
        model.addAttribute("userinfo", userinfo);
        return "userinfo/userinfoDetail";
    }

    /**
     * @param keyword  搜索关键词
     * @param p        页面            默认第1页
     * @param pageSize 每页显示条数 默认每页10条
     * @param model
     * @return
     */
    @RequestMapping("/list") //分页查询数据
    public String list(String keyword, Integer p, Integer pageSize, Model model) {

        p = null == p ? 1 : p; //默认显示第一页
        pageSize = null == pageSize ? 10 : pageSize; //默认每页显示10条
        Page<Userinfo> sortPage = new Page<Userinfo>(p, pageSize);//参数一是当前页,参数二是每页个数
        List<Userinfo> userinfoList = userinfoMapper.selectPage(sortPage, null);
        long total = sortPage.getTotal(); //总页数
        int current = sortPage.getCurrent();
        long pages = sortPage.getPages();
        model.addAttribute("userinfoList", userinfoList);   //绑定接受参数
        model.addAttribute("cp", current);   //当前页
        model.addAttribute("tp", pages);   //总页数
        model.addAttribute("total", total);   //总条数
        model.addAttribute("pageListURL", "userinfo/list");   //总条数
        return "userinfo/userinfoList";
    }
}
AI 代码解读

要注意的

@RequestMapping("/insert") //插入数据
public String save(Userinfo userinfo) {
    userinfoMapper.insert(userinfo);
    return "redirect:list";
}
AI 代码解读

@RequestMapping("/update") //修改数据

public String update(Userinfo userinfo) {
    userinfoMapper.updateById(userinfo);
    return "redirect:list";
}

AI 代码解读

@RequestMapping("/delete") //删除数据

public String save(int id) {
    userinfoMapper.deleteById(id);
    return "redirect:list";
}
AI 代码解读

还是上代码,这样方便的看到对应的关系
在这里插入图片描述
可以看出来,这就是纯的JSP的页面。
就是用form提交,没有ajax ,没有jquery ,当然更不可能VUE了。

再看用户信息的,(编辑功能也如此)
在这里插入图片描述
把后台的controller 与JSP的放一起,这样看起来就更明显了。
在这里插入图片描述
虽然看上去有点生涩,但是,熟练了之后就好了。
妥妥的就是JSP ( jstl + EL 表达式)“老牛” 吃SpringBoot 的“嫩草”
当然了,要是能深研一下官方的SpringMVC 的流程图就更清楚了。
在这里插入图片描述
在这里插入图片描述

当然了,还有列表,但是这里又用到了另一个“新功能” 就是mybatis 分页技术,与页面的分页技术。
这个跟ajax 与,jquery的方式还有点不一样,所以这里不深入讨论了,这个功能留作下期了。

再看一下项目的application的代码(没有使用 yml)

#运行端口号
server.port=8889
#配置项目路径
server.servlet.context-path=/mgPerson
#数据库连接配置信息  Ctrl+/ 注释
#mysql8驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mysql5驱动   记得把连接地址换成本机ip地址
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jsbperson_db?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=123456
#mybatis配置
mybatis.type-aliases-package=com.code.entity
#mybatis.mapper-locations=classpath*:mapper/*.xml
mybatis-plus.mapper-locations=classpath*:mapper/*.xml
#jsp视图解析器
spring.mvc.view.prefix=/view/
spring.mvc.view.suffix=.jsp
#文件上传的配置
spring.servlet.multipart.max-file-size=120MB
spring.servlet.multipart.max-request-size=120MB
#开启日志调试
#logging.level.root=debug
#显示mybatis日志
logging.level.com.code.mapper=debug
AI 代码解读

这里有一个重点

jsp视图解析器

spring.mvc.view.prefix=/view/
spring.mvc.view.suffix=.jsp
下面是一个其它人的springMVC 的项目。当然了也是老项目,历史的遗留产物。

通过application.properties定制InternalResourceViewResolver初始化
在返回视图名称之后,会以前缀prefix和后缀suffix以及视图名称组成全路径定位视图
比如控制器返回的是food/details就会找到/WEB-INF/jsp/food/details.jsp作为视图

在webapp/WEB-INF/jsp/food目录下添加jsp页面(JSP视图)
视图解析器定位到视图后,视图的作用是将数据模型(Model)渲染,响应用户请求

最后的展示

用idea 直接运行。
为什么这个项目可以这么随意?因为他没有token ,没有 spring security 呀,所以肯定可以直接访问后台了。有如罗大佑老师唱的“穿过你的黑发的我的手”
就是这么的随意,漂亮,任性。
在这里插入图片描述
项目效果:
主页这里换了一个页面,
在这里插入图片描述
后台的管理登陆界面
在这里插入图片描述
后台的主界面(各增删改查功能OK)
在这里插入图片描述

好,一步成功点亮,关电,拉闸,领盒饭!走人。

总结

提示:IT是一个要多动手的职业,一定要多练不要贪快:
这里就可以看出来,理解了JAVAWEB,经历了SpringMVC 的人拿到SpringBoot 更像是如虎添翼,兰博拿到了火箭筒。
所以,程序猿与学员纯在着本质的差别。那么如何提高呢?当然要多读别人的成功项目了。
GITEE上面存在着大量的springboot的项目,英文没有问题的话,可以去github。

配套资源

SpringBoot接手JSP项目--【JSB项目实战】
https://download.csdn.net/download/dearmite/88131591
如果有问题,留言评论区吧

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
Spring Boot 便利店销售系统项目分包设计解析
本文深入解析了基于Spring Boot的便利店销售系统分包设计,通过清晰的分层架构(表现层、业务逻辑层、数据访问层等)和模块化设计,提升了代码的可维护性、复用性和扩展性。具体分包结构包括`controller`、`service`、`repository`、`entity`、`dto`、`config`和`util`等模块,职责分明,便于团队协作与功能迭代。该设计为复杂企业级应用开发提供了实践参考。
134 0
在SpringBoot项目中使用Netty实现远程调用
本文介绍了使用Netty解决网络连接性能问题的方法,重点讲解了Netty的NIO特性及其在SpringBoot中的应用。Netty作为高效的NIO框架,支持非阻塞IO,能通过单线程管理多个客户端连接,简化TCP/UDP套接字服务器开发。文章详细展示了Netty在SpringBoot中实现远程调用的过程,包括服务端与客户端代码实现、依赖配置及测试验证。通过示例代码,如`NettyServer`、`NettyClientUtil`等,清晰说明了Netty的工作原理和实际应用,解决了半包等问题,并提供了完整的测试结果。
109 3
深入理解 Spring Boot 项目中的分页与排序功能
本文深入讲解了在Spring Boot项目中实现分页与排序功能的完整流程。通过实际案例,从Service层接口设计到Mapper层SQL动态生成,再到Controller层参数传递及前端页面交互,逐一剖析每个环节的核心逻辑与实现细节。重点包括分页计算、排序参数校验、动态SQL处理以及前后端联动,确保数据展示高效且安全。适合希望掌握分页排序实现原理的开发者参考学习。
145 4
两种Spring Boot 项目启动自动执行方法的实现方式
在Spring Boot项目启动后执行特定代码的实际应用场景中,可通过实现`ApplicationRunner`或`CommandLineRunner`接口完成初始化操作,如系统常量或配置加载。两者均支持通过`@Order`注解控制执行顺序,值越小优先级越高。区别在于参数接收方式:`CommandLineRunner`使用字符串数组,而`ApplicationRunner`采用`ApplicationArguments`对象。注意,`@Order`仅影响Bean执行顺序,不影响加载顺序。
133 2
Spring Boot 项目中触发 Circular View Path 错误的原理与解决方案
在Spring Boot开发中,**Circular View Path**错误常因视图解析与Controller路径重名引发。当视图名称(如`login`)与请求路径相同,Spring MVC无法区分,导致无限循环调用。解决方法包括:1) 明确指定视图路径,避免重名;2) 将视图文件移至子目录;3) 确保Spring Security配置与Controller路径一致。通过合理设定视图和路径,可有效避免该问题,确保系统稳定运行。
181 0
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
111 0
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
在微服务架构中,随着业务复杂度增加,项目可能需要调用多个微服务。为避免使用`@Value`注解逐一引入配置的繁琐,可通过定义配置类(如`MicroServiceUrl`)并结合`@ConfigurationProperties`注解实现批量管理。此方法需在配置文件中设置微服务地址(如订单、用户、购物车服务),并通过`@Component`将配置类纳入Spring容器。最后,在Controller中通过`@Resource`注入配置类即可便捷使用,提升代码可维护性。
63 0
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
601 1
保姆级教程——将springboot项目部署到阿里云服务器包含环境配置(小白包会)
本文档详细介绍了将SpringBoot项目部署到阿里云服务器的步骤。首先,通过Xshell连接服务器,使用公网IP地址。接着,下载JDK的Linux版本,使用XFTP上传并解压,配置环境变量。然后,安装MySQL 5.7,包括下载YUM源、安装、启动服务以及修改root密码和开启远程访问。最后,将SpringBoot项目打包成jar,上传至服务器,使用`java -jar`命令运行,通过`nohup`确保服务持续运行。配置安全组以允许远程访问。
2034 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等