马上期末了,打开书一看,天塌了,咋还要考jsp (2)

前言

期末复习的节奏本有条不紊,可当翻开书本看到 JSP(JavaServer Pages)相关内容时,心瞬间凉了半截。基本没用过。如今要直面考试,着实有些慌神。

二、JSP 基础大揭秘

1. JSP 页面结构与本质

JSP 页面看似是普通的 HTML 页面,实则暗藏玄机。它可以包含 HTML、CSS、JavaScript 等前端内容,还能嵌入 Java 代码。其实质是一个 Servlet,当客户端请求一个 JSP 页面时,服务器会先将 JSP 页面翻译成 Servlet 源文件,再编译成字节码文件执行。例如下面这个简单的 JSP 页面:

jsp 复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>简单 JSP 示例</title>
</head>
<body>
    <%
        // 这是 JSP 中的 Java 代码片段
        String message = "欢迎学习 JSP";
    %>
    <h1><%= message %></h1>
</body>
</html>

在这个例子中,<%@ page %> 是指令标签,用于设置页面的属性,如语言、字符编码等。<% %> 里是 Java 代码片段,<%= %> 则用于输出变量或表达式的值。

2. JSP 指令标签

JSP 指令标签主要有三种:pageincludetaglib

  • page 指令:用于定义 JSP 页面的各种属性,像前面提到的 languagecontentType 等。还可以设置 import 属性来导入 Java 包,例如 <%@ page import="java.util.Date"%>
  • include 指令:用于在 JSP 页面中静态包含另一个文件,在翻译阶段就将被包含文件的内容插入到当前页面。示例如下:
jsp 复制代码
<%@ include file="header.jsp" %>
  • taglib 指令:用于引入自定义标签库,方便在 JSP 页面中使用自定义标签。

3. JSP 隐式对象

JSP 提供了一些隐式对象,这些对象无需显式声明就可以在 JSP 页面中直接使用,大大提高了开发效率。常见的隐式对象有:

  • request:代表客户端的请求,可用于获取请求参数、请求头信息等。例如:
jsp 复制代码
<%
    String username = request.getParameter("username");
%>
  • response:代表服务器对客户端的响应,可用于设置响应头、重定向等操作。
  • session:用于管理用户会话,可在不同页面间共享用户信息。比如存储用户登录信息:
jsp 复制代码
<%
    session.setAttribute("user", "admin");
%>
  • application:代表整个 Web 应用,可在所有用户间共享信息。

三、JSP 与 Servlet 的协同作战

JSP 和 Servlet 就像一对黄金搭档。Servlet 更擅长处理业务逻辑,将处理结果存储在 requestsession 中,然后转发到 JSP 页面进行展示。例如,一个用户登录的 Servlet 处理登录逻辑:

java 复制代码
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("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        // 模拟登录验证
        if ("admin".equals(username) && "123456".equals(password)) {
            request.setAttribute("message", "登录成功");
            request.getRequestDispatcher("welcome.jsp").forward(request, response);
        } else {
            request.setAttribute("message", "登录失败");
            request.getRequestDispatcher("login.jsp").forward(request, response);
        }
    }
}

四、JSP 动作标签

JSP 动作标签以 <jsp:xxx> 形式存在,用于在运行时执行特定的操作。常见的动作标签有:

  • <jsp:include>:动态包含另一个页面,在请求处理阶段才将被包含页面的内容插入到当前页面。与 include 指令不同,它是动态包含,被包含页面的内容可以动态变化。
jsp 复制代码
<jsp:include page="footer.jsp" />
  • <jsp:forward>:用于将请求转发到另一个资源,如 Servlet 或 JSP 页面。
jsp 复制代码
<jsp:forward page="error.jsp" />

五、总结

当然了,这并不全面,也是没办法了,距离考试的时间越来越近,复习这些 JSP 知识点也是无奈之举,没办法,还是要毕业的,越来越想不明白,这有什么意义。

相关推荐
大哥43094 小时前
AI 接口高并发 ≠ 秒杀高并发:为什么我把并发闸门挂在 LLM 调用汇聚点
后端
大哥43094 小时前
Redis 主从下的库存一致性:我推翻了"付款前查库存"这个方案
后端
ikoala4 小时前
DeepSeek 官方仓库惊现 DeepSeek Harness 桌面端!
前端·javascript·后端
用户408527444144 小时前
一个个人开发者,怎么啃下 12 种工控协议?
后端
Bs_MoneyMagnet5 小时前
基于springboot+vue的旅游景区点评系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·旅游
cpp_learner5 小时前
Qt 5.14.2 x86_64 静态编译 —— 从零搭建完整手册
后端
企业数字化笔记6 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
西瓜太郎12346 小时前
request_id 如何串起请求、路由、计费和日志
后端·python
by组态6 小时前
Ricon组态系统通信配置指南
前端·后端·物联网
sbjdhjd7 小时前
ThinkPHP 5.0.10 缓存写入型 RCE 复盘:从手动搭建、换行绕过到源码单步验证 | 05
java·后端·安全·spring·网络安全·数据挖掘·php