马上期末了,打开书一看,天塌了,咋还要考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 知识点也是无奈之举,没办法,还是要毕业的,越来越想不明白,这有什么意义。

相关推荐
奕川几秒前
Spring AI 实战指南:模型集成与调优
后端·aigc
春野蓝几秒前
基于Maven Archetype创建项目脚手架
后端
前端拿破轮4 分钟前
不是吧不是吧,leetcode第一题我就做不出来?😭😭😭
后端·算法·leetcode
一块plus7 分钟前
什么是去中心化 AI?区块链驱动智能的初学者指南
人工智能·后端·算法
肖笙XiaoSheng9 分钟前
使用Gemini2.5 pro 优化我的定时任务(二)
java·后端·代码规范
G等你下课10 分钟前
使用 Cookie 实现登录登出功能案例
前端·后端
深栈解码13 分钟前
JUC并发编程 CAS运行机制详解
java·后端
深栈解码15 分钟前
JUC并发编程 ThreadLocal解析
java·后端
混乱意志16 分钟前
dgraph example数据导入
数据库·后端
哔哩哔哩技术2 小时前
资源合池化后的异构差异问题解析--CPU分层现象和解决思路
后端