当前位置: 首页 > news >正文

[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]项目入门

这篇简单介绍一些入门的有关项目和行业的知识&#xff0c;并带着实现一个小项目。便于已经编程入门的各位准备进阶到下一个阶段。 先大致地介绍&#xff0c;一个完整的项目(不看客户端、服务端的分类)基本可以划分为三部分&#xff1a; 1.前端。比如你现在看到的CSDN页面就是一…...

opencv Mat To Heif

高效率图像文件格式&#xff08;英语&#xff1a;High Efficiency Image File Format, HEIF&#xff1b;也称高效图像文件格式&#xff09;是一个用于单张图像或图像序列的文件格式。它由运动图像专家组&#xff08;MPEG&#xff09;开发&#xff0c;并在MPEG-H Part 12&#x…...

二刷代码随想录第24天

93. 复原 IP 地址 确定函数is_ip的实现细节&#xff0c;start不能超过end&#xff0c;没有0开头的非0数字&#xff0c;每个字符都在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

什么是张量&#xff1f; 张量&#xff08;Tensor&#xff09;是深度学习和机器学习中一个非常基础且重要的概念。在数学上&#xff0c;张量可以被看作是向量和矩阵的泛化。简单来说&#xff0c;张量是一种多维数组&#xff0c;它可以表示标量&#xff08;0维&#xff09;、向量…...

SaaS财务软件:赋能企业数字化转型

在数字化浪潮的推动下&#xff0c;企业财务管理正逐步迈向智能化、高效化的新阶段。在这个过程中&#xff0c;SaaS财务软件应运而生&#xff0c;成为许多企业的首选。以易舟云财务软件为例&#xff0c;这款软件不仅集成了众多先进的财务管理功能&#xff0c;而且在用户体验上做…...

FPGA实战篇(按键控制LDE实验)

1.按键简介 按键开关是一种电子开关&#xff0c;属于电子元器件类。我们的开发板上有两种按键开关&#xff1a;第一种是本实验所使用的轻触式按键开关&#xff0c;简称轻触开关。使用时以向开关的操作方向施加压力使内部电路闭合接通&#xff0c;当撤销压力时开关断开&#xff…...

在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:均分纸牌

主要思路 整体思路概述&#xff1a; 本题旨在解决给定N堆纸牌&#xff08;纸牌总数是N的倍数&#xff09;&#xff0c;通过按照特定移牌规则移动纸牌&#xff0c;找出用最少移动次数使每堆纸牌数量相等的方法。程序采用了一种逐步调整的思路&#xff0c;先计算出每堆纸牌应有的…...

ThreadFactory

ThreadFactory 是 Java 中一个用于创建线程的接口&#xff0c;它可以自定义线程的创建过程&#xff0c;例如线程的名称、优先级、是否为守护线程等。它是 java.util.concurrent 包的一部分&#xff0c;通常与线程池&#xff08;ThreadPoolExecutor&#xff09;一起使用。 线程…...

WEB开发: Node.js路由之由浅入深(一) - 全栈工程师入门

作为一个使用Node.js多年的开发者&#xff0c;我已经习惯于用Node.js写一些web应用来为工作服务&#xff0c;因为实现快速、部署简单、自定义强。今天我们一起来学习一个全栈工程师必备技能&#xff1a;web路由。&#xff08;观看此文的前提是默认你已经装好nonde.js了&#xf…...

NES游戏机项目制作笔记(未完成)

24年12月1日晚记——在网上找项目学习的时候发现一个有意思的项目&#xff0c;准备靠这个应用一些STM32的高级功能。值得提醒的是——目的在于学习不可贪杯&#xff0c;注意效率 01 根据项目需求分析 为确保充分考虑每一个细节&#xff0c;并且让自己高效的完成项目制作&#…...

云服务器部署upload-labs-docker(文件上传靶场)环境 以及相关报错问题

环境的搭建 准备&#xff1a;云服务器&#xff08;本地的linux服务器&#xff08;版本最好不要是老的不然不兼容docker&#xff09;&#xff09; f8x配置docker环境&#xff1a; https://github.com/ffffffff0x/f8x 一键配置 docker拉取file-labs靶场 https://github.com…...

Elasticsearch入门之HTTP基础操作

RESTful REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是&#xff0c;客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在…...

maven聚合项目部署到tomcat上

目录 一.聚合项目 1.检查无误后将项目打包 2.将这四个拷贝到tomcat的webapp下 二.启动tomcat 1.双击startup.bat 2.页面访问http://localhost:8080 3.打开webapp文件夹&#xff0c;发现多了三个文件夹 4.点进去才有要访问的index页面 5.再进行访问 解决&#xff1a; …...

基于Matlab生育模型和年龄别死亡率的未来人口预测与结构动态分析

人口预测在社会经济发展、政策规划以及资源分配中扮演着至关重要的角色&#xff0c;特别是在全球人口老龄化、少子化趋势日益显著的背景下&#xff0c;对人口增长规律及结构变化的研究愈发重要。人口结构的变化不仅直接影响劳动力供给和经济增长潜力&#xff0c;还对医疗、教育…...

公共服务 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 低代码平台是一款创新的工具&#xff0c;旨在简化PDF处理和管理的流程。通过这个平台&#xff0c;用户可以通过简单的拖拽界面上的按钮&#xff0c;轻松完成对Cloud API的调用工作流&#xff0c;而无需编写复杂的代码。这使得即使没有编程经验的…...

Ubuntu环境安装RabbitMQ

1.安装Erlang RabbitMq需要Erlang语⾔的⽀持&#xff0c;在安装rabbitMq之前需要安装erlang # 更新软件包 sudo apt-get update # 安装 erlang sudo apt-get install erlang 查看erlang版本 : erl 退出命令:halt(). 2. 安装RabbitMQ # 更新软件包 sudo apt-get update # 安装 …...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...