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

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学习资料 一、引言 在当今数字化时代&#xff0c;Web 应用无处不在。Java 凭借其强大的功能、良好的跨平台性和丰富的开发框架&#xff0c;成为 Web 开发领域的热门选择之一。Java Web 开发允许开发者构建动态、交互式的 Web 应用程序&#x…...

Android Studio:视图绑定的岁月变迁(2/100)

一、博文导读 本文是基于Android Studio真实项目&#xff0c;通过解析源码了解真实应用场景&#xff0c;写文的视角和读者是同步的&#xff0c;想到看到写到&#xff0c;没有上帝视角。 前期回顾&#xff0c;本文是第二期。 private Unbinder mUnbinder; 只是声明了一个 接口…...

LabVIEW春节快乐

尊敬的LabVIEW开发者与用户朋友们&#xff1a; 灵蛇舞动辞旧岁&#xff0c;春风送暖贺新年&#xff01;值此癸巳蛇年新春佳节来临之际&#xff0c;向每一位深耕LabVIEW开发领域的伙伴致以最诚挚的祝福&#xff1a;愿您与家人在新的一年里平安顺遂、阖家幸福&#xff0c;事业如…...

rewrite规则

NGINX 中 rewrite最后的标记含义&#xff1a; flag标记有&#xff1a; last 相当于Apache里的[L]标记&#xff0c;表示完成rewrite&#xff0c;匹配完&#xff0c;再向下匹配。地址栏会显示跳转后的地址 break 终止匹配, 不再匹配后面的rewrite规则&#xff0c;地址栏会显示跳…...

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. 本专栏 “食用” 指南——写在一周年之际⭐

创建时间&#xff1a;2025-01-27 首发时间&#xff1a;2025-01-29 最后编辑时间&#xff1a;2025-01-29 作者&#xff1a;Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏&#xff0c;很高兴遇见你~ 我是 Geeker_LStar&#xff0c;一名高一学生&#xff0c;热爱计…...

虚幻基础11:坐标计算旋转计算

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 坐标line startget actor rotationget forward vector 旋转计算 坐标 ue中通常使用向量计算坐标。 line start 起始坐标点。 get actor rotation 获取旋转值&#xff1a; 当前角色朝向 get forward vector 获…...

Rust:Rhai脚本编程示例

当然&#xff0c;以下是一个简单的Rhai脚本编程示例&#xff0c;展示了如何在Rust中使用Rhai执行脚本。 首先&#xff0c;你需要确保你的Rust项目中包含了rhai库。你可以在你的Cargo.toml文件中添加以下依赖项&#xff1a; [dependencies] rhai "0.19" # 请检查最…...

关于el-table翻页后序号列递增的组件封装

需求说明&#xff1a; 项目中经常会用到的一个场景&#xff0c;表格第一列显示序号&#xff08;1、2、3...&#xff09;&#xff0c;但是在翻页后要递增显示序号&#xff0c;例如10、11、12&#xff08;假设一页显示10条数据&#xff09;&#xff0c;针对这种情况&#xff0c;封…...

【深度学习】softmax回归

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

设计模式-建造者模式、原型模式

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

【Redis】List 类型的介绍和常用命令

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

三个不推荐使用的线程池

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

mybatis(78/134)

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

Progressive Pretext Task Learning for Human Trajectory Prediction | 文献翻译

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

54.数字翻译成字符串的可能性|Marscode AI刷题

1.题目 问题描述 小M获得了一个任务&#xff0c;需要将数字翻译成字符串。翻译规则是&#xff1a;0对应"a"&#xff0c;1对应"b"&#xff0c;依此类推直到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 题目描述及链接 原题链接&#xff1a;203. 移除链表…...

【Linux】统计文本中每行指定位置出现的字符串的次数

统计文本中每行指定位置出现的字符串的次数 假定情景 某些项目&#xff0c;会把某个特定事件记录到Log中并且落盘&#xff08;保持到硬盘&#xff09;。基于落盘后的日志&#xff0c;要统计这些日志里产生该特定事件的次数 统计脚本 可以写一个sh脚本&#xff0c;来解析某个…...

【赵渝强老师】K8s中Pod探针的ExecAction

在K8s集群中&#xff0c;当Pod处于运行状态时&#xff0c;kubelet通过使用探针&#xff08;Probe&#xff09;对容器的健康状态执行检查和诊断。K8s支持三种不同类型的探针&#xff0c;分别是&#xff1a;livenessProbe&#xff08;存活探针&#xff09;、readinessProbe&#…...

商品信息管理自动化测试

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

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...