作为一名 Java 开发工程师,当你掌握了 HTML 的结构和 CSS 的样式后,下一步就是让网页“动”起来——这就是 JavaScript(简称 JS)的使命。
JavaScript 是 Web 的行为层,它赋予网页交互能力,如表单验证、动态内容更新、异步请求等。在 JavaWeb 开发中,无论是传统的 JSP 页面,还是现代的前后端分离架构(如 Vue + Spring Boot),JavaScript 都是连接前端与后端、提升用户体验的核心技术。
本文将从 Java 开发者的角度,系统讲解 JavaScript 的核心语法、DOM 操作、事件处理、AJAX 与后端交互,并结合 JavaWeb 项目进行实战演示,助你快速掌握前端交互开发技能。
🧱 一、什么是 JavaScript?
✅ 定义:
JavaScript 是一种运行在浏览器中的脚本语言,用于实现网页的动态交互和行为控制。它可以直接操作 HTML 和 CSS,响应用户操作,与服务器进行异步通信。
✅ JavaScript 的作用:
- DOM 操作:动态修改网页内容和结构
- 事件处理:响应用户点击、输入、鼠标移动等
- 表单验证:在提交前检查用户输入
- AJAX:异步与后端通信,实现无刷新更新
- 前端框架基础:Vue、React、Angular 等框架的底层语言
🔍 Java 开发者注意:JS 代码通常作为
.js
文件部署在 Web 服务器上,由浏览器解析执行。后端(Java)负责提供数据接口(API)。
🧠 二、JavaScript 的引入方式
在 JavaWeb 项目中,JS 有三种引入方式:
✅ 1. 行内脚本(Inline Script) - 不推荐
<button onclick="alert('Hello!')">点击我</button>
⚠️ 缺点:逻辑与结构混杂,难以维护。
✅ 2. 内部脚本(Internal Script)
<script>
function greet() {
alert("Hello, JavaWeb!");
}
</script>
⚠️ 适用:单页简单逻辑。
✅ 3. 外部脚本(External Script) - 推荐 ✅
<script src="script.js"></script>
<!-- 或使用 JSP/Thymeleaf 表达式 -->
<!-- <script src="<%= request.getContextPath() %>/js/app.js"></script> -->
<!-- <script th:src="@{/js/app.js}"></script> -->
✅ 优点:逻辑与结构分离,可复用,易于维护和压缩。
🔍 JavaWeb 部署:将 JS 文件放在
WebContent/js/
(传统)或src/main/resources/static/js/
(Spring Boot)目录下。
🧪 三、JavaScript 核心语法(快速上手)
✅ 1. 变量与数据类型
// 变量声明(推荐使用 let/const)
let name = "张三";
const age = 25;
var oldVar = "旧方式"; // 不推荐
// 基本数据类型
let str = "字符串";
let num = 100;
let bool = true;
let n = null;
let u = undefined;
// 对象与数组
let user = { name: "李四", email: "lisi@example.com" };
let scores = [85, 90, 78];
✅ 2. 函数
// 函数声明
function add(a, b) {
return a + b;
}
// 箭头函数(ES6,推荐)
const multiply = (a, b) => a * b;
// 调用
console.log(add(2, 3)); // 5
✅ 3. 条件与循环
// if-else
if (age >= 18) {
console.log("成年人");
} else {
console.log("未成年人");
}
// for 循环
for (let i = 0; i < scores.length; i++) {
console.log(scores[i]);
}
// for...of (推荐)
for (let score of scores) {
console.log(score);
}
🧩 四、DOM 操作(核心)
DOM(Document Object Model,文档对象模型)是 HTML 文档的编程接口。JS 通过 DOM API 操作网页元素。
✅ 1. 获取元素
// 通过 ID
const title = document.getElementById("title");
// 通过类名
const items = document.getElementsByClassName("list-item");
// 通过标签名
const paragraphs = document.getElementsByTagName("p");
// 通过选择器(推荐)
const firstItem = document.querySelector(".list-item");
const allItems = document.querySelectorAll(".list-item");
✅ 2. 修改元素
// 修改内容
title.textContent = "新的标题";
// title.innerHTML = "<strong>加粗内容</strong>"; // 可解析 HTML,注意 XSS 风险
// 修改属性
title.setAttribute("data-id", "123");
// 或直接操作属性
title.id = "new-title";
// 修改样式
title.style.color = "red";
title.style.fontSize = "24px";
// 添加/移除类
title.classList.add("highlight");
title.classList.remove("old-class");
title.classList.toggle("active"); // 切换
✅ 3. 创建与删除元素
// 创建新元素
const newLi = document.createElement("li");
newLi.textContent = "新列表项";
newLi.classList.add("list-item");
// 添加到父元素
const list = document.getElementById("myList");
list.appendChild(newLi);
// 删除元素
// list.removeChild(newLi);
newLi.remove(); // 更现代的方式
🧭 五、事件处理
事件是用户与网页交互的触发器,如点击、输入、加载等。
✅ 1. 事件监听
const btn = document.getElementById("myButton");
// 方式一:addEventListener(推荐)
btn.addEventListener("click", function() {
alert("按钮被点击了!");
});
// 方式二:箭头函数
btn.addEventListener("click", () => {
console.log("点击事件");
});
// 方式三:HTML 属性(不推荐)
// <button onclick="handleClick()">点击</button>
✅ 2. 常见事件
事件 | 说明 | 示例 |
---|---|---|
click |
点击 | 按钮点击 |
submit |
表单提交 | form.addEventListener('submit', ...) |
input |
输入框内容变化 | 实时搜索 |
change |
元素值改变(失去焦点) | 下拉框选择 |
load |
页面/资源加载完成 | window.addEventListener('load', ...) |
DOMContentLoaded |
DOM 加载完成(推荐) | document.addEventListener('DOMContentLoaded', ...) |
✅ 3. 阻止默认行为
form.addEventListener("submit", function(event) {
event.preventDefault(); // 阻止表单默认提交
// 执行 AJAX 提交
submitFormViaAjax();
});
🚀 六、AJAX 与后端交互(核心)
AJAX(Asynchronous JavaScript and XML)允许网页在不刷新的情况下与服务器交换数据。这是现代 Web 应用的基础。
✅ 1. 使用 fetch
API(现代推荐)
// GET 请求
fetch('/api/users')
.then(response => {
if (!response.ok) {
throw new Error('网络错误');
}
return response.json(); // 解析 JSON
})
.then(data => {
console.log(data); // 处理返回的数据
displayUsers(data);
})
.catch(error => {
console.error('请求失败:', error);
});
// POST 请求(提交数据)
function addUser(userData) {
fetch('/api/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(userData) // 序列化为 JSON
})
.then(response => response.json())
.then(data => {
console.log('用户添加成功:', data);
// 更新页面
location.reload(); // 简单刷新,或动态添加
})
.catch(error => {
console.error('添加失败:', error);
});
}
✅ 2. Java 后端(Spring Boot)提供 API
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
// GET: 获取用户列表
@GetMapping("/users")
public ResponseEntity<List<User>> getUsers() {
List<User> users = userService.findAll();
return ResponseEntity.ok(users);
}
// POST: 添加用户
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
User savedUser = userService.save(user);
return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
}
}
✅ 关键点:
- 前端使用
fetch
发起异步请求- 后端使用
@RestController
返回 JSON 数据- 前端收到 JSON 后动态更新 DOM
🧪 七、JavaWeb 中 JS 的实际应用
✅ 1. 表单验证(前端初步校验)
document.getElementById("registerForm").addEventListener("submit", function(e) {
e.preventDefault();
const username = document.getElementById("username").value;
const password = document.getElementById("password").value;
if (username.length < 3) {
alert("用户名至少3个字符");
return;
}
if (password.length < 6) {
alert("密码至少6个字符");
return;
}
// 验证通过,提交数据
addUser({ username, password });
});
✅ 2. 动态加载数据(无刷新)
function loadUsers() {
fetch('/api/users')
.then(res => res.json())
.then(users => {
const userList = document.getElementById("userList");
userList.innerHTML = ''; // 清空
users.forEach(user => {
const li = document.createElement("li");
li.textContent = user.name;
userList.appendChild(li);
});
});
}
// 页面加载完成后执行
document.addEventListener("DOMContentLoaded", loadUsers);
✅ 3. 使用 jQuery 简化操作(可选)
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
$("#myButton").click(function() {
$.get("/api/data", function(data) {
$("#result").html(data);
});
});
});
</script>
⚠️ 八、JavaScript 开发注意事项(Java 开发者视角)
注意事项 | 说明 |
---|---|
错误处理 | 使用 try-catch 和 fetch 的 catch 处理网络错误 |
XSS 攻击防范 | 避免使用 innerHTML 插入用户输入,使用 textContent |
异步编程 | 理解 Promise 和 async/await ,避免回调地狱 |
浏览器兼容性 | ES6+ 语法在旧浏览器可能不支持,可使用 Babel 转译 |
性能优化 | 避免频繁 DOM 操作,使用事件委托,防抖/节流 |
调试工具 | 熟练使用浏览器开发者工具(F12)的 Console、Network、Sources 面板 |
模块化 | 大型项目使用 ES6 Modules 或前端框架组织代码 |
📊 九、总结:JavaScript 核心知识点速查表
类别 | 关键技术 | 说明 |
---|---|---|
语法 | let/const , function , => , if/for |
基础编程 |
DOM | getElementById , querySelector , textContent , classList , addEventListener |
操作页面 |
事件 | click , submit , input , preventDefault() |
响应交互 |
AJAX | fetch , JSON.stringify , response.json() |
异步通信 |
数据格式 | JSON | 前后端数据交换标准 |
调试 | console.log , 浏览器 DevTools |
开发必备 |
💡 结语
JavaScript 是 JavaWeb 开发中不可或缺的一环。掌握 JS 能让你:
- 实现丰富的用户交互体验
- 进行前端数据验证,减轻后端压力
- 通过 AJAX 实现无刷新应用,提升性能
- 更好地与前端工程师协作
- 为学习 Vue/React 等框架打下坚实基础
作为 Java 工程师,不必成为 JS 专家,但必须具备基础的 DOM 操作和 AJAX 能力。 这将让你的 Web 应用更加动态、高效和用户友好。
📌 关注我,获取更多 JavaWeb 全栈开发、前后端分离架构与实战项目教程!