前言
期末复习的节奏本有条不紊,可当翻开书本看到 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 指令标签主要有三种:page
、include
和 taglib
。
page
指令:用于定义 JSP 页面的各种属性,像前面提到的language
、contentType
等。还可以设置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 更擅长处理业务逻辑,将处理结果存储在 request
或 session
中,然后转发到 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 知识点也是无奈之举,没办法,还是要毕业的,越来越想不明白,这有什么意义。