Java Web 开发基础介绍
Java学习资料
Java学习资料
Java学习资料
一、引言
在当今数字化时代,Web 应用无处不在。Java 凭借其强大的功能、良好的跨平台性和丰富的开发框架,成为 Web 开发领域的热门选择之一。Java Web 开发允许开发者构建动态、交互式的 Web 应用程序,广泛应用于电子商务、社交网络、企业信息系统等众多领域。本文将介绍 Java Web 开发的基础知识,帮助初学者快速入门。
二、Java Web 开发环境搭建
2.1 JDK(Java Development Kit)
JDK 是 Java 开发的基础,它包含了 Java 编译器、Java 虚拟机(JVM)等必要工具。首先需要从 Oracle 官网或 OpenJDK 官网下载适合自己操作系统的 JDK 版本,然后进行安装。安装完成后,配置系统环境变量,将 JDK 的 bin 目录添加到 PATH 环境变量中,以便系统能够找到 Java 相关命令。
2.2 应用服务器
应用服务器用于部署和运行 Java Web 应用程序。常见的 Java 应用服务器有 Apache Tomcat、Jetty、WebLogic 等。其中,Tomcat 是一个开源、轻量级的应用服务器,非常适合初学者使用。从 Apache Tomcat 官网下载合适的版本,解压后即可使用。启动 Tomcat 服务器,通过浏览器访问 http://localhost:8080,如果能看到 Tomcat 的欢迎页面,说明服务器安装和启动成功。
2.3 集成开发环境(IDE)
IDE 可以提高开发效率,常见的 Java Web 开发 IDE 有 Eclipse、IntelliJ IDEA 等。以 IntelliJ IDEA 为例,下载并安装社区版或旗舰版。在 IDE 中配置 JDK 和 Tomcat 服务器,以便后续创建和运行 Java Web 项目。
三、Java Web 项目结构
3.1 Web 项目目录结构
一个典型的 Java Web 项目通常具有以下目录结构:
WebProject
├── src
│ └── main
│ ├── java # 存放 Java 源代码
│ ├── resources # 存放配置文件
│ └── webapp
│ ├── WEB-INF
│ │ ├── web.xml # Web 应用的配置文件
│ │ └── classes # 存放编译后的 Java 类文件
│ │ └── lib # 存放项目依赖的 JAR 包
│ └── index.jsp # 项目的首页
3.2 各目录和文件的作用
src/main/java:用于存放 Java 源代码,通常包含 Servlet、JavaBean 等类。
src/main/resources:存放项目的配置文件,如数据库连接配置文件、日志配置文件等。
src/main/webapp:是 Web 应用的根目录,包含了 Web 页面、静态资源(如 CSS、JavaScript、图片等)。
WEB-INF:是一个受保护的目录,客户端无法直接访问其中的文件。web.xml 是 Web 应用的核心配置文件,用于配置 Servlet、过滤器、监听器等。classes 目录存放编译后的 Java 类文件,lib 目录存放项目依赖的 JAR 包。
四、Servlet 基础
4.1 Servlet 概念
Servlet 是 Java Web 开发中的核心组件,它是运行在服务器端的小程序,用于处理客户端的请求并生成响应。Servlet 可以接收来自客户端的 HTTP 请求,如 GET、POST 请求,然后根据请求的内容进行相应的处理,最后将处理结果以 HTTP 响应的形式返回给客户端。
4.2 创建和配置 Servlet
创建一个 Servlet 类,需要继承 javax.servlet.http.HttpServlet 类,并覆盖 doGet() 或 doPost() 方法,分别处理 GET 和 POST 请求。以下是一个简单的 Servlet 示例:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");PrintWriter out = resp.getWriter();out.println("<html>");out.println("<body>");out.println("<h1>Hello, Servlet!</h1>");out.println("</body>");out.println("</html>");}
}
在 web.xml 中配置该 Servlet:
<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/hello</url-pattern>
</servlet-mapping>
4.3 访问 Servlet
将项目部署到 Tomcat 服务器,启动服务器后,在浏览器中访问 http://localhost:8080/WebProject/hello,即可看到 Servlet 输出的页面。
五、JSP 基础
5.1 JSP 概念
JSP(JavaServer Pages)是一种动态网页技术,它允许在 HTML 页面中嵌入 Java 代码。JSP 页面在服务器端被编译成 Servlet,然后由 Servlet 引擎执行。JSP 结合了 HTML 的静态页面设计和 Java 的动态处理能力,使得开发者可以方便地创建动态 Web 页面。
5.2 JSP 语法
JSP 页面包含 HTML 代码和 JSP 标签、表达式、脚本片段等。以下是一个简单的 JSP 示例:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>JSP 示例</title>
</head>
<body><h1>当前时间:<%= new java.util.Date() %></h1>
</body>
</html>
在这个示例中,<%@ page … %> 是 JSP 指令,用于设置页面的属性;<%= … %> 是 JSP 表达式,用于输出表达式的值。
5.3 JSP 与 Servlet 的关系
JSP 本质上就是 Servlet,JSP 页面在第一次被访问时会被服务器编译成 Servlet 类,然后由 Servlet 引擎执行。JSP 更侧重于页面的显示,而 Servlet 更侧重于业务逻辑的处理。在实际开发中,通常将业务逻辑放在 Servlet 中处理,将页面显示逻辑放在 JSP 中实现。
六、JavaBean 基础
6.1 JavaBean 概念
JavaBean 是一种遵循特定编程规范的 Java 类,通常用于封装数据。JavaBean 具有以下特点:
必须有一个无参的构造方法。
所有属性都使用 private 修饰,通过公有的 getter 和 setter 方法来访问和修改属性值。
6.2 JavaBean 示例
public class User {private String username;private int age;public User() {}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
6.3 JavaBean 在 JSP 中的使用
在 JSP 页面中可以使用 jsp:useBean、jsp:setProperty 和 jsp:getProperty 标签来使用 JavaBean。例如:
<jsp:useBean id="user" class="com.example.User" scope="request" />
<jsp:setProperty name="user" property="username" value="John" />
<jsp:setProperty name="user" property="age" value="25" />
<h1>用户名:<jsp:getProperty name="user" property="username" /></h1>
<h1>年龄:<jsp:getProperty name="user" property="age" /></h1>
七、总结
Java Web 开发是一个庞大而复杂的领域,本文介绍了 Java Web 开发的基础知识,包括开发环境搭建、项目结构、Servlet、JSP 和 JavaBean 等。掌握这些基础知识是进一步学习和开发 Java Web 应用的关键。随着技术的不断发展,Java Web 开发也涌现出了许多优秀的框架和工具,如 Spring、Spring Boot、MyBatis 等,初学者可以在掌握基础知识的基础上,逐步学习和使用这些框架,提高开发效率和质量。
相关文章:
Java Web 开发基础介绍
Java学习资料 Java学习资料 Java学习资料 一、引言 在当今数字化时代,Web 应用无处不在。Java 凭借其强大的功能、良好的跨平台性和丰富的开发框架,成为 Web 开发领域的热门选择之一。Java Web 开发允许开发者构建动态、交互式的 Web 应用程序&#x…...

Android Studio:视图绑定的岁月变迁(2/100)
一、博文导读 本文是基于Android Studio真实项目,通过解析源码了解真实应用场景,写文的视角和读者是同步的,想到看到写到,没有上帝视角。 前期回顾,本文是第二期。 private Unbinder mUnbinder; 只是声明了一个 接口…...
LabVIEW春节快乐
尊敬的LabVIEW开发者与用户朋友们: 灵蛇舞动辞旧岁,春风送暖贺新年!值此癸巳蛇年新春佳节来临之际,向每一位深耕LabVIEW开发领域的伙伴致以最诚挚的祝福:愿您与家人在新的一年里平安顺遂、阖家幸福,事业如…...
rewrite规则
NGINX 中 rewrite最后的标记含义: flag标记有: last 相当于Apache里的[L]标记,表示完成rewrite,匹配完,再向下匹配。地址栏会显示跳转后的地址 break 终止匹配, 不再匹配后面的rewrite规则,地址栏会显示跳…...
Android车机DIY开发之学习篇(七)NDK交叉工具构建
Android车机DIY开发之学习篇(七)NDK交叉工具构建 1.ubuntu安装GCC sudo apt-get update sudo apt-get install gcc g sudo gcc --version sudo g --version 2.测试GCC VSCODE中新建Hello.c编译 #include <stdio.h> int main(void) { printf(“Hello, this is a progr…...
【初/高中生讲机器学习】0. 本专栏 “食用” 指南——写在一周年之际⭐
创建时间:2025-01-27 首发时间:2025-01-29 最后编辑时间:2025-01-29 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名高一学生,热爱计…...
虚幻基础11:坐标计算旋转计算
能帮到你的话,就给个赞吧 😘 文章目录 坐标line startget actor rotationget forward vector 旋转计算 坐标 ue中通常使用向量计算坐标。 line start 起始坐标点。 get actor rotation 获取旋转值: 当前角色朝向 get forward vector 获…...
Rust:Rhai脚本编程示例
当然,以下是一个简单的Rhai脚本编程示例,展示了如何在Rust中使用Rhai执行脚本。 首先,你需要确保你的Rust项目中包含了rhai库。你可以在你的Cargo.toml文件中添加以下依赖项: [dependencies] rhai "0.19" # 请检查最…...
关于el-table翻页后序号列递增的组件封装
需求说明: 项目中经常会用到的一个场景,表格第一列显示序号(1、2、3...),但是在翻页后要递增显示序号,例如10、11、12(假设一页显示10条数据),针对这种情况,封…...

【深度学习】softmax回归
softmax回归 回归可以用于预测多少的问题。 比如预测房屋被售出价格,或者棒球队可能获得的胜场数,又或者患者住院的天数。 事实上,我们也对分类问题感兴趣:不是问“多少”,而是问“哪一个”: 某个电子邮…...

设计模式-建造者模式、原型模式
目录 建造者模式 定义 类图 优缺点 角色 建造者模式和工厂模式比较 使用案例 原型模式 定义 类图 优缺点 应用场景 应用类型 浅克隆 深克隆 建造者模式 定义 将一个复杂的对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,…...

【Redis】List 类型的介绍和常用命令
1. 介绍 Redis 中的 list 相当于顺序表,并且内部更接近于“双端队列”,所以也支持头插和尾插的操作,可以当做队列或者栈来使用,同时也存在下标的概念,不过和 Java 中的下标不同,Redis 支持负数下标&#x…...

三个不推荐使用的线程池
线程池的种类 其实看似这么多的线程池,都离不开ThreadPoolExecutor去创建,只不过他们是简化一些参数 newFixedThreadPool 里面全是核心线程 有资源耗尽的风险,任务队列最大长度为Integer.MAX_VALUE,可能会堆积大量的请求ÿ…...

mybatis(78/134)
前天学了很多,关于java的反射机制,其实跳过了new对象,然后底层生成了字节码,创建了对应的编码。手搓了一遍源码,还是比较复杂的。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE …...

Progressive Pretext Task Learning for Human Trajectory Prediction | 文献翻译
祥龙回首留胜景,金蛇起舞贺新程。 概述 行人轨迹预测是一项旨在预测行人未来位置的任务,它通常涵盖了从短期到长期的整个时间范围内的轨迹。然而,现有的研究试图通过单一、统一的训练范式来解决整个轨迹预测问题,往往忽视了行人轨…...

54.数字翻译成字符串的可能性|Marscode AI刷题
1.题目 问题描述 小M获得了一个任务,需要将数字翻译成字符串。翻译规则是:0对应"a",1对应"b",依此类推直到25对应"z"。一个数字可能有多种翻译方法。小M需要一个程序来计算一个数字有多少种不同的…...
【数据结构】_链表经典算法OJ(力扣版)
目录 1. 移除链表元素 1.1 题目描述及链接 1.2 解题思路 1.3 程序 2. 反转链表 2.1 题目描述及链接 2.2 解题思路 2.3 程序 3. 链表的中间结点 3.1 题目描述及链接 3.2 解题思路 3.3 程序 1. 移除链表元素 1.1 题目描述及链接 原题链接:203. 移除链表…...
【Linux】统计文本中每行指定位置出现的字符串的次数
统计文本中每行指定位置出现的字符串的次数 假定情景 某些项目,会把某个特定事件记录到Log中并且落盘(保持到硬盘)。基于落盘后的日志,要统计这些日志里产生该特定事件的次数 统计脚本 可以写一个sh脚本,来解析某个…...

【赵渝强老师】K8s中Pod探针的ExecAction
在K8s集群中,当Pod处于运行状态时,kubelet通过使用探针(Probe)对容器的健康状态执行检查和诊断。K8s支持三种不同类型的探针,分别是:livenessProbe(存活探针)、readinessProbe&#…...

商品信息管理自动化测试
目录 前言 一、思维导图 二、代码编写 1.在pom.xml文件中添加相关依赖 2.自动化代码编写 三、代码测试 小结 前言 1. 针对商品信息管理项目进行测试,商品信息管理项目主要有商品列表页、部门列表页、员工列表页,主要功能:对商品信息的…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...