📅  最后修改于: 2023-12-03 15:32:25.738000             🧑  作者: Mango
JSP(Java Server Pages)是一个用于在服务器上编写动态网页的技术。它允许我们在 HTML 页面中嵌入 Java 代码,以使其能够动态地生成响应。JSP 文件使用 ".jsp" 扩展名,并且源文件通常包含标准的 HTML 标记和 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>
<%-- 插入 Java 代码片段 --%>
<%
out.println("Hello, World!");
%>
</body>
</html>
上面代码的各个部分的含义如下:
<%@...%>
:指令是用来指导 JSP 引擎在翻译 JSP 页面时生成代码,它的 page
指令用于定义 JSP 页面权利,最常见的指令属性包括 language
、contentType
、pageEncoding
等。 <!DOCTYPE html>
:定义 HTML 文档类型。 <html>...</html>
:定义 HTML 页面的结构。 <head>...</head>
:定义 HTML 页面的 header。 <body>...</body>
:定义 HTML 页面的 body。 <%--...--%>
:表示注释的内容。 <%...%>
:表示嵌入的 Java 代码片段,用于执行服务器端的动态处理。一个 JSP 页面可以通过四个内置对象实现与 JSP 引擎相互通信,这四个对象分别为:request
、response
、session
、application
。
request
对象代表客户端的请求,它包含了客户端提交的所有请求信息,可以通过这个对象获取客户端提交的表单数据、HTTP 头信息、请求方法、请求 URL 等信息。下面是获取表单提交数据的示例:
<form method="post" action="page2.jsp">
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type="submit" value="登录"/>
</form>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
out.println("用户名:" + username + "<br/>");
out.println("密码:" + password + "<br/>");
%>
response
对象代表服务器的响应,它可以通过该对象向客户端发送响应,例如发送一个 HTML 页面、重定向请求等,下面是一个向客户端发送 HTML 页面的示例:
<%
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Response Demo</title></head>");
out.println("<body>");
out.println("<h1>Hello, World!</h1>");
out.println("</body>");
out.println("</html>");
%>
session
对象代表服务器与客户端的会话,它可以保存客户端在同一次会话中的多个请求中共享数据,例如,用于保存登录用户的信息。下面是一个保存用户信息的示例:
String username = request.getParameter("username");
String password = request.getParameter("password");
if(username.equals("admin") && password.equals("123456")){
HttpSession session = request.getSession();
session.setAttribute("username", username);
response.sendRedirect("page2.jsp");
}else{
response.sendRedirect("page1.jsp");
}
<%
HttpSession session = request.getSession();
String username = (String) session.getAttribute("username");
if (username != null) {
out.println("欢迎 " + username + " 用户登录!");
} else {
out.println("您还未登录!");
}
%>
application
对象代表整个 JSP 应用程序,主要用于在整个应用程序中共享数据,例如,保存系统配置信息等。下面是一个保存系统配置信息的示例:
<%
ServletContext application = getServletContext();
application.setAttribute("var", "Variable Value");
%>
<%
ServletContext application = getServletContext();
String value = (String) application.getAttribute("var");
out.println("Variable Value: " + value);
%>
除了通过嵌入的 Java 代码实现动态处理外,JSP 也提供了一些标准动作,用于简化 JSP 页面的开发。常用的标准动作有:include
、forward
、setProperty
、getProperty
、useBean
等。
include
标准动作指令可以在一个 JSP 页面中包含另一个 JSP 页面,可以是解析同一个应用程序中的页面,也可以是解析网站的外部页面。
下面是一个包含外部页面的示例:
<%@ include file="header.jsp" %>
forward
标准动作指令可以将请求转发到另一个 JSP 页面并且将当前页面的控制权移交给目标页面,使得目标页面将当前请求的响应发送给客户端。
下面是一个转发请求的示例:
<%
RequestDispatcher dispatcher = request.getRequestDispatcher("page2.jsp");
dispatcher.forward(request, response);
%>
setProperty
和 getProperty
标准动作指令用于在一个 JSP 页面中使用 JavaBean。
下面是一个使用 setProperty
的示例:
<jsp:useBean id="student" class="com.example.Student"/>
<jsp:setProperty name="student" property="name" value="${param.name}"/>
<jsp:setProperty name="student" property="age" value="${param.age}"/>
下面是一个使用 getProperty
的示例:
<jsp:useBean id="student" class="com.example.Student"/>
<jsp:getProperty name="student" property="name"/>
<jsp:getProperty name="student" property="age"/>
通过本文的介绍,我们了解了 JSP 页面的基本结构和 JSP 四大内置对象,以及常见的 JSP 标准动作指令。JSP 技术是动态网络应用程序设计中的一种常见的方法,它使得在网页中混入 Java 代码成为可能。