[Java]项目入门
这篇简单介绍一些入门的有关项目和行业的知识,并带着实现一个小项目。便于已经编程入门的各位准备进阶到下一个阶段。
先大致地介绍,一个完整的项目(不看客户端、服务端的分类)基本可以划分为三部分:
1.前端。比如你现在看到的CSDN页面就是一个前端页面。前端的作用是负责与用户交互,即将项目的数据以人性化的形式展示给用户,并收集用户的各种操作信息和输入信息,返回给后端进行相应的事件流程。
2.后端。初学编程时你写的"print("Hello World")",那个就是后端部分,不过这个还不够准确。比如"int a = 0;b = a - 1;"这种有事件流程的,就是一个项目的后端部分。后端的作用是根据编程好的程序处理与其对应的数据和请求。
3.数据库。数据库就是字面意思,它存储数据的仓库。学习阶段哪怕是毕业设计,项目的工程量可能全用内存也足够,但正式的项目中,数据量会非常非常大,就像你现在浏览的CSDN,如此多篇文章,大量的文字和图片信息,显然内存是不可完成这些存储的。而且也不可能用内存,因为现在的内存就是设计给运行时使用的,不适合存储(感兴趣可以查询cpu和内存空间硬件层运行逻辑的资料)。
简介
前端
前端常见的有web页面。常见的分包有 css、js、image、video、WEB_INF等等。
css的专门存储css样式文件的包、js则是存储JavaScript脚本文件的包、image和video则是存储图片和视频,而WEB-INF则是存储不可直接访问的前端资源,有页面资源和配置信息(比如web.xml)。
下面是一个示例:

当然,这个不太规范,通常情况下css等资源会放在WEB_INF或用其他方式,避免被用户直接访问 。放在WEB-INF下的资源,用户只能通过页面引入或请求转发等方式来访问。
后端
后端常见的有使用Java、C++进行编写。
Java面向对象,是以C、C++为基础的语言,主要是用来写业务的。而C、C++则是面向过程,不像java那样,底层上没那么多弯弯绕绕。
同样的一个事件,C++处理完通常比Java快30%。所以Java一般用于各种项目中编写业务,而C++则是用于各种电子机器设备(比如洗衣机)的硬件编程,包括各种大型游戏,都是用C写的。
这里稍微提一嘴python,我的一名从业人员的导师(导师只是我对他的敬称)的说法是,python主要还是担任一种"插件"一样的角色,在爬虫、人工智能这些领域上很合适,但是总体的还是干不过Java和C++,如果是想进入这个行业,那么不要先学python。之所以提是因为我个人最近看到许多python培训课程,口号是学了...就...这种,怕有同志走了弯路。当然只是兴趣或者其他的,便不用担心了,注意法律就好。
然后介绍一下java后端的常见分包。java后端常见的分包有service、dao、util、config、entity、constant、exception。
service:存放各种业务代码,通常为service根据业务的种类划分,每个种类的业务开一个接口分装,然后在service下再开一个impl包,实现每个接口的方法。
dao:存放访问数据库的代码,Java用的连接数据库的技术是JDBC,获取连接的工具类不放在dao包而是放在util包下。与service包一样,包下会根据操作数据的相关内容分类成一个个接口,然后在dao包下再开一个impl包实现这些接口。
config:存放后端要使用的各种配置文件。比如.xml文件。
constant:存放各种常量、变量的包。这些一般是运行时才加载到内存中。
util:存放各种工具类的包。比如刚刚讲到的JDBC获取连接的工具类,另外像jdk里面的Math类,这些就是工具类,用于完成某种功能。
entity:存放各种实体类。这些类一般用来进行数据的封装,比如学生类、用户类,封装姓名、id、性别这些信息,来进行数据的传递(只在后端中使用,前端无法直接解析这些开发人员自定义的实体类)。
controller:与前端连接的包,通常存放各种servlet等请求响应类。在Tomcat服务器搭建的项目中又常命名为servlet包。

数据库
学习阶段基本上就是使用MySQL了。常见的数据库还有很多,功能最为强大的现在是Oracle数据库,当然,它是收费的,而且很贵(进入行业后正式的商业工程是肯定不能用破解版的,这属于侵权行为,也能查到的,当然这种侵权你不商用,也不会找你麻烦)。
还有很多:DB2、SQL Server、Sybase等等。
前端连接后端
前端连接后端常见的技术有AJAX、WebSocket等等。当然,这些是进阶一点的,Tomcat服务器提供的基础技术为Servlet。AJAX就是在servlet基础上异步交互的技术。使用详情可以看我的Servlet使用文章。
后端连接数据库
后端连接数据库,Java用的技术为JDBC。不管是哪个语言,一般该语言的开发公司会提供一个统一的数据库对接该编程语言的标准,由每个数据库的开发公司根据这个标准提供自己的数据库驱动。这篇文章我使用Java和JDBC,详情可以看我的文章JDBC使用。

项目入门
这里我们一步一步写一个简单的登录功能。
首先我们先编辑前端页面资源

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><link href="">
</head>
<body><div><a href="WEB-INF/jsp/login.jsp"><h1>点我进行登录</h1></a></div>
</body>
</html>
大家可以先试一试,然后就会发现,访问不了login.jsp,报404错误。 这是因为Tomcat是不允许用户通过URL直接访问WEB-INF下的任何资源的。我们想要访问,只能通过servlet转发或页面包含的形式来进行访问。这里我们使用请求转发,为了美观,我们使用Post请求。
为了易于理解,我这里改为使用form表单。其中action设置Servlet的URL,method设置请求方式。给表单添加一个按钮,将属性设置为submit,用于发出请求。
修改后的jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><link href="">
</head>
<body><div><form action="/toLogin" method="post"><button type="submit"><h1>点我进行登录</h1></button></form></div>
</body>
到了servlet这里,我们就可以直接使用路径来访问WEB-INF下的login.jsp了。
对应的Servlet文件:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/toLogin")
public class toLoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(req, resp);}
}
这个时候我们就可以成功打开login页面了。
前面提到过了,Servlet就已经是Java代码了,可以访问Java代码资源并与之互动。
转到登录页面之后,前端连后端的流程基本一致。我们直接从发出请求到Servlet后开始讲。
先给出项目完整的结构图:

完整的登录事件流程:
在LoginServlet处,我们访问service下的LoginImpl,调用其中的boolean login(String username,String password)方法。
然后LoginImpl调用dao包,传入参数username,查询数据库中的数据。
在dao包的LoginDaoImpl中调用相关方法访问数据库,如果存在用户名为username的用户,将该用户的信息打包返回LoginImpl。
LoginImpl进行业务判断,如果密码正确,则返回true给servlet,如果密码错误或者用户不存在,都返回false。
这是一个完整的登录流程。补充两点:
1.其中dao包中的SQL语句应该存放在/src/constant包里面,这里我写的时候忘记了,直接写在了dao包里面,这样的编程并不规范。
2. 对比用户信息,也就是判断密码是否正确,应当由service包来完成,dao包只用专注于自己的访问数据库就好。可能会有伙伴绝对多余,是因为这里只有一个登录的判断。实际中会访问的用户数据不止这一点,甚至用户的账户信息(账号、密码等)和个人信息(出生日期、姓名性别等)会专门分成两个表进行存储。
本文原意便是希望帮助后来的伙伴了解编程规范,所以进行了两点补充,当然本文也只做一个简单参考。往后的开发中会逐渐使用各种框架,由开源的,也有公司自己私有的,业务需求有时候分包也会有很多不同,但大体上都会遵循前端、后端、Dao包 三大块。
示例项目的完整文件下载回文章开头处。
相关文章:
[Java]项目入门
这篇简单介绍一些入门的有关项目和行业的知识,并带着实现一个小项目。便于已经编程入门的各位准备进阶到下一个阶段。 先大致地介绍,一个完整的项目(不看客户端、服务端的分类)基本可以划分为三部分: 1.前端。比如你现在看到的CSDN页面就是一…...
opencv Mat To Heif
高效率图像文件格式(英语:High Efficiency Image File Format, HEIF;也称高效图像文件格式)是一个用于单张图像或图像序列的文件格式。它由运动图像专家组(MPEG)开发,并在MPEG-H Part 12&#x…...
二刷代码随想录第24天
93. 复原 IP 地址 确定函数is_ip的实现细节,start不能超过end,没有0开头的非0数字,每个字符都在0-9之间,每段字符小于255在原字符串s上做操作会更简单一些 class Solution { public:vector<string> result;vector<string> rest…...
Java设计模式之状态模式架构高扩展的订单状态管理
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…...
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
目录 一、Yagmail简介 二、安装Yagmail 三、基本使用示例 1. 发送简单文本邮件 2. 发送HTML邮件 3. 发送带有附件的邮件 4. 多收件人处理 5. 自定义邮件头 四、高级功能 1. SMTP配置 2. 邮件模板 3. OAuth2认证 五、自动化邮件营销案例 六、错误处理和调试 七、…...
李宏毅深度学习-Pytorch Tutorial2
什么是张量? 张量(Tensor)是深度学习和机器学习中一个非常基础且重要的概念。在数学上,张量可以被看作是向量和矩阵的泛化。简单来说,张量是一种多维数组,它可以表示标量(0维)、向量…...
SaaS财务软件:赋能企业数字化转型
在数字化浪潮的推动下,企业财务管理正逐步迈向智能化、高效化的新阶段。在这个过程中,SaaS财务软件应运而生,成为许多企业的首选。以易舟云财务软件为例,这款软件不仅集成了众多先进的财务管理功能,而且在用户体验上做…...
FPGA实战篇(按键控制LDE实验)
1.按键简介 按键开关是一种电子开关,属于电子元器件类。我们的开发板上有两种按键开关:第一种是本实验所使用的轻触式按键开关,简称轻触开关。使用时以向开关的操作方向施加压力使内部电路闭合接通,当撤销压力时开关断开ÿ…...
在Ubuntu-22.04 [WSL2]中配置Docker
文章目录 0. 进入Ubuntu-22.041. 更新系统软件包2. 安装Docker相关依赖包3. 添加Docker官方GPG密钥4. 添加Docker软件源5. 安装Docker Engine5.1 更新软件包列表5.2 安装Docker相关软件包 6. 验证Docker安装是否成功6.1 查看Docker版本信息6.2 启动Docker6.3 配置镜像加速器6.4…...
ACM:均分纸牌
主要思路 整体思路概述: 本题旨在解决给定N堆纸牌(纸牌总数是N的倍数),通过按照特定移牌规则移动纸牌,找出用最少移动次数使每堆纸牌数量相等的方法。程序采用了一种逐步调整的思路,先计算出每堆纸牌应有的…...
ThreadFactory
ThreadFactory 是 Java 中一个用于创建线程的接口,它可以自定义线程的创建过程,例如线程的名称、优先级、是否为守护线程等。它是 java.util.concurrent 包的一部分,通常与线程池(ThreadPoolExecutor)一起使用。 线程…...
WEB开发: Node.js路由之由浅入深(一) - 全栈工程师入门
作为一个使用Node.js多年的开发者,我已经习惯于用Node.js写一些web应用来为工作服务,因为实现快速、部署简单、自定义强。今天我们一起来学习一个全栈工程师必备技能:web路由。(观看此文的前提是默认你已经装好nonde.js了…...
NES游戏机项目制作笔记(未完成)
24年12月1日晚记——在网上找项目学习的时候发现一个有意思的项目,准备靠这个应用一些STM32的高级功能。值得提醒的是——目的在于学习不可贪杯,注意效率 01 根据项目需求分析 为确保充分考虑每一个细节,并且让自己高效的完成项目制作&#…...
云服务器部署upload-labs-docker(文件上传靶场)环境 以及相关报错问题
环境的搭建 准备:云服务器(本地的linux服务器(版本最好不要是老的不然不兼容docker)) f8x配置docker环境: https://github.com/ffffffff0x/f8x 一键配置 docker拉取file-labs靶场 https://github.com…...
Elasticsearch入门之HTTP基础操作
RESTful REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在…...
maven聚合项目部署到tomcat上
目录 一.聚合项目 1.检查无误后将项目打包 2.将这四个拷贝到tomcat的webapp下 二.启动tomcat 1.双击startup.bat 2.页面访问http://localhost:8080 3.打开webapp文件夹,发现多了三个文件夹 4.点进去才有要访问的index页面 5.再进行访问 解决: …...
基于Matlab生育模型和年龄别死亡率的未来人口预测与结构动态分析
人口预测在社会经济发展、政策规划以及资源分配中扮演着至关重要的角色,特别是在全球人口老龄化、少子化趋势日益显著的背景下,对人口增长规律及结构变化的研究愈发重要。人口结构的变化不仅直接影响劳动力供给和经济增长潜力,还对医疗、教育…...
公共服务 kkFileView 4.1 文件预览 Docker 一键部署
官方文档 https://kkview.cn/zh-cn/docs/production.html 镜像导入 # 网络环境方便访问docker中央仓库 docker pull keking/kkfileview:4.1.0# 网络环境不方便访问docker中央仓库 wget https://kkview.cn/resource/kkFileView-4.1.0-docker.tar docker load -i kkFileView-4…...
福昕PDF低代码平台
福昕PDF低代码平台简介 福昕PDF 低代码平台是一款创新的工具,旨在简化PDF处理和管理的流程。通过这个平台,用户可以通过简单的拖拽界面上的按钮,轻松完成对Cloud API的调用工作流,而无需编写复杂的代码。这使得即使没有编程经验的…...
Ubuntu环境安装RabbitMQ
1.安装Erlang RabbitMq需要Erlang语⾔的⽀持,在安装rabbitMq之前需要安装erlang # 更新软件包 sudo apt-get update # 安装 erlang sudo apt-get install erlang 查看erlang版本 : erl 退出命令:halt(). 2. 安装RabbitMQ # 更新软件包 sudo apt-get update # 安装 …...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
