什么是框架?为什么要学框架?

news2024/11/28 4:33:20

一、什么是框架

框架是整个或部分应用的可重用设计,是可定制化的应用骨架。它可以帮开发人员简化开发过程,提高开发效率。

项目里有一部分代码:和业务无关,而又不得不写的代码==>框架
项目里剩下的部分代码:实现业务功能需要的逻辑代码
简而言之,框架是一个应用系统的半成品,开发人员在框架的基础上,根据业务需求开发功能。即:别人搭台,你唱戏。

二、为什么要学框架

1. 学习框架相当于从 小作坊 工厂 的升级,小作坊什么都要自己做,工厂是组件式装配,特点就是高效。
2. 框架更加易用、简单且高效。

三、框架优点展示(SpringBoot VS Servlet)

使用 Spring Boot 项目演示框架相比于 Servlet 所具备的以下优点:
1. 无需配置 Tomcat ,点击 运行 按钮就可以运行项目, Spring Boot 内置了 Web 容器(可直接运行)。
2. 快速添加外部 jar 包。
3. 快速发布项目(使用 java -jar 方式就可以发布)。
4. 对象自动装配。
5. ......
使用 SpringBoot Servlet 对比 ,演示一个用户添加的案例,展示以上优点。

3.1 Servlet 项目开发

3.1.1 创建项目

3.1.2 添加引用

打开 https://mvnrepository.com 搜索 servlet 添加框架应用到 pom.xml 中,如下图所示:

 PS:其中还需要注意使用的版本号

 在项目中右键添加源代码文件夹,如下图所示:

  

3.1.3 添加业务代码

配置路由文件 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_3_1.xsd"
version="3.1"
metadata-complete="true">
<servlet>
<servlet-name>user</servlet-name>
<servlet-class>UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>user</servlet-name>
<url-pattern>/user</url-pattern>
</servlet-mapping>
</web-app>
添加实体类:
public class User {
private Integer id;
private String name;
private Integer age;
private String password;
// 其他属性...
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return String.format("{id:%d,name:%s,age:%d,password:%s}",
id,name,age,password);
}
}
添加控制器:
import java.io.IOException;
public class UserServlet extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) throws
javax.servlet.ServletException, IOException {
this.doGet(request,response);
}
protected void doGet(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) throws
javax.servlet.ServletException, IOException {
User user = new User();
user.setId(Integer.parseInt(request.getParameter("id")));
user.setName(request.getParameter("name"));
user.setAge(Integer.parseInt(request.getParameter("age")));
user.setPassword(request.getParameter("password"));
// 获取其他字段.....
System.out.println(user.toString());
response.setContentType("text/html");
response.getWriter().println(user.toString());
}
}

3.1.4 运行项目(配置tomcat)

  

3.1.5 Servlet 痛点分析
1. 添加外部 jar 不方便,容易出错,比如添加了一个不匹配的外部 jar 版本;
2. 运行和调试的时候需要配置 tomcat 不方便;
3. 发布不方便, servlet 项目必须依靠外置的 tomcat (外置的 web 容器)运行。
4. 路由配置不方便,一个访问地址对应一个 Servlet 类。
而以上痛点问题,都可以通过 JavaEE 进阶框架解决,接下来我们一起来看。

3.2 SpringBoot 项目开发

3.2.1 创建并添加引用

 选择 SpringBoot 版本和添加外部引用:

 3.2.2 添加代码并运行程序

用户实体:
import lombok.Data;
@Data
public class User {
private Integer id;
private String name;
private Integer age;
private String password;
}
添加控制器:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/user")
@RestController
public class UserController {
@RequestMapping("/add")
public String add(User user){
return user.toString();
}
}
点击调试按钮即可运行项目:
访问地址: http://localhost:8080/user/add?id=1&age=18&name=java&password=123
即可运行项目,如下图所示

3.2.3 发布程序

使用 jar -jar xxx.jar 直接发布程序:

3.2.4 SpringBoot VS Servlet

SpringBoot 相比于 Servlet 的优点总结:
1. 添加外部 jar 更容易,不易出错(版本问题无需关注);
2. 调试项目更加方便,无需配置 Tomcat
3. 发布项目更加方便,无需配置 Tomcat
4. 添加路由更加方便,无需每个访问地址都添加一个类。
现在我们已经知道了框架的优点了,哪怎么去学呢?

四、怎么学框架?

  • 先从基础框架 Spring 开始(工具箱)
  • Spring Boot 快速开发 Spring 脚手架
  • MyBatis 快速操作数据库
  • 其他:日志、事务、拦截器....
框架学习中需要注意什么呢?

四、框架学习中的难点

1. 配置比较多。
2. 需要大量的外部 jar 包,在下载时容易出错。
3. 会涉及简单的软件工程的设计思想(分层思想:前、后端的分层思想,及后端工程的分层思想)。
4. 知识点相对来说比之前的知识更加的分散,要仔细学习才能搞懂各个知识点的逻辑关系。
5. 要记的东西很多,所以要大量地重复练习才能记住,比如各种注解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习:Bert and its family

Bert 先用无监督的语料去训练通用模型&#xff0c;然后再针对小任务进行专项训练学习。 ELMoBertERNIEGroverBert&PALS Outline Pre-train Model 首先介绍预训练模型&#xff0c;预训练模型的作用是将一些token表示成一个vector 比如&#xff1a; Word2vecGlove 但是对于…

Qt Creator创建控制台项目显示中文乱码

今天在使用Qt Creator创建c项目的时候显示中文乱码&#xff0c;这里分享一下解决办法&#xff0c;主要是由于我们的电脑大部分是GBK编码格式的是&#xff0c;然后Qt默认创建的一般是utf-8编码类型的。编码类型不一致就会导致中文乱码的现象。 从控制台的属性可以看到我们的程序…

Observability:Synthetic monitoring - 动手实践

在我之前的如下文章里&#xff1a; Observability&#xff1a;Synthetic monitoring - 合成监测入门&#xff08;一&#xff09;&#xff08;二&#xff09; Observability&#xff1a;Synthetic monitoring - 创建浏览器监测&#xff0c;配置单独的浏览器监测器及项目 我详…

基于RASC的keil电子时钟制作(瑞萨RA)(3)----使用J-Link烧写程序到瑞萨芯片

基于RASC的keil电子时钟制作3_使用J-Link烧写程序到瑞萨芯片 概述硬件准备视频教程软件准备hex文件准备J-Link与瑞萨开发板进行SWD方式接线烧录 概述 这一节主要讲解如何使用J-Link对瑞萨RA芯片进行烧录。 硬件准备 首先需要准备一个开发板&#xff0c;这里我准备的是芯片型…

【Node.js 安装】Node.js安装与使用教程

Node.js 安装 Node.js 是什么那什么是运行时 如何安装 Node.jsNode 使用教程 Node.js 是什么 先说结论&#xff0c;Node.js 它是一套 JavaScript 运行环境&#xff0c;用来支持 JavaScript 代码的执行 JavaScript 诞生于 1995 年&#xff0c;几乎是和互联网同时出现&#xf…

leetcode-206.反转链表

leetcode-206.反转链表 文章目录 leetcode-206.反转链表一.题目描述二.代码提交三.易错点 一.题目描述 二.代码提交 代码 class Solution {public:ListNode *reverseList(ListNode *head) {ListNode *temp; // 保存cur的下一个节点ListNode *cur head;ListNode *pre nullptr…

scikit-learn集成学习代码批注及相关练习

一、代码批注 代码来自&#xff1a;https://scikit-learn.org/stable/auto_examples/ensemble/plot_adaboost_twoclass.html#sphx-glr-auto-examples-ensemble-plot-adaboost-twoclass-py import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import …

【stable diffusion】保姆级入门课程02-Stable diffusion(SD)图生图-基础图生图用法

目录 学前视频 0.本章素材 1.图生图是什么 2.图生图能做什么 3.如何使用图生图 4.功能区域 4.1.提示词区域 4.2.图片提示词反推区域 1.CLIP反推 2.DeepBooru 反推 4.3.图片上传区域 4.4.结果图区域 4.5.缩放模式 4.6.重绘幅度 7.结语 8.课后训练 学前视频 …

【Ranking】50 Matplotlib Visualizations, Python实现,源码可复现

详情请参考博客: Top 50 matplotlib Visualizations 因编译更新问题&#xff0c;本文将稍作更改&#xff0c;以便能够顺利运行。 1 Ordered Bar Chart 有序条形图有效地传达项目的排名顺序。但是&#xff0c;将图表上方的指标值相加&#xff0c;用户将从图表本身获得准确的信息…

制造业想要数字化转型应该从哪方面入手?

制造业可以通过关注以下几个关键领域来开启数字化转型之旅&#xff1a; 数据收集和分析&#xff1a;实施系统收集和分析来自各种来源&#xff08;例如机器、传感器和生产过程&#xff09;的数据至关重要。这些数据可以提供有关运营效率、质量控制和预测性维护的见解。 物联网&…

Flask Bootstrap 导航条

(43条消息) Flask 导航栏&#xff0c;模版渲染多页面_U盘失踪了的博客-CSDN博客 (43条消息) 学习记录&#xff1a;Bootstrap 导航条示例_bootstrap导航栏案例_U盘失踪了的博客-CSDN博客 1&#xff0c;引用Bootstrap css样式&#xff0c;导航栏页面跳转 2&#xff0c;页面两列…

【冒泡排序】模仿qsort的功能实现一个通用的冒泡排序

文章目录 前言曾经学的冒泡排序存在着一些局限性首先第一步&#xff1a;写一个main()函数&#xff0c;分装一个test1函数test1函数 用来描写类型的性状 在test1创建了bubble_int 函数&#xff0c;下一步就是实现它&#xff0c;分两步走步骤一&#xff1a;写函数参数步骤二&…

Matlab论文插图绘制模板第107期—标签散点图

在之前的文章中&#xff0c;分享了Matlab散点图绘制模板&#xff1a; 进一步&#xff0c;再来分享一种特殊的散点图&#xff1a;标签散点图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需…

内网穿透远程查看内网监控摄像头

内网穿透远程查看内网监控摄像头 在现代社会中&#xff0c;大家总是奔波于家和公司之间。大部分时间用于工作中&#xff0c;也就很难及时知晓家中的动态情况&#xff0c;对于家中有老人、小孩或宠物的&#xff08;甚至对居住环境安全不放心的&#xff09;&#xff0c;这已然是…

ubuntu下tmux安装

目录 0. 前言1. Tmux介绍2. 安装3. 验证安装 0. 前言 本节安装tmux终端复用工具&#xff0c;在Ubuntu中运行一些服务或脚本的时候往往不能退出终端&#xff0c;需要一直挂着。在有图形界面的linux中你还可以新开一个终端去做别的事&#xff0c;但是在无界面linux中&#xff0c…

re学习(22)伪造CTF(谜之操作)

思维导图&#xff1a;找flag关键之处 1.字符串 &#xff08;flag&#xff0c; sorry&#xff09; 2.导入函数&#xff1a;&#xff08;Import _scanf &#xff09; 其他函数&#xff08;敏感函数&#xff09; createfileA:将flag放在一个文件中 Createprocess&am…

基于HCL的​​​​​​​网络规划与部署综合实训报告

0、前言 本次实验是对之前有关网络规划与综合部署的综合实验&#xff0c;适合入门的同学们进行学习&#xff0c;该实验选择了使用华三模拟器进行&#xff0c;希望能够帮助大家了解相关的指令。 一、实训目的及意义 ① 掌握网络规划和设计的基本流程 从需求分析开始做起&#x…

4-2 3D images: Volumetric data Representing tabular data

本文所用到的资料下载地址 By stacking individual 2D slices into a 3D tensor, we can build volumetric data representing the 3D anatomy of a subject. We just have an extra dimension, depth, after the channel dimension, leading to a 5D tensor of shape N C D…

【MySQL进阶(三)】 InnoDB体系架构之内存池(buffer pool)

InnoDB体系架构之内存池 一、InnoDB 体系结构二、缓冲池 buffer pool内部结构free 链&#xff08;管理空闲缓冲页&#xff09;怎么知道数据页是否被缓存&#xff1f; flush 链表&#xff08;管理脏页&#xff09;1. 脏页2. 链表结构3. 刷盘时机 LRU 链表&#xff08;控制数据热…

blender 纹理材质

添加材质纹理需要哪五个节点&#xff1f; 映射节点&#xff1a;调整纹理的位置、大小、缩放&#xff1b; 纹理坐标&#xff1a;怎么映射&#xff0c;以什么方式去映射这张图&#xff0c;换句话说就是如何将 2D 的图片映射到 3D 的图像上&#xff1b;纹理坐标就是以什么坐标方式…