JSP详解,看这一篇就够了(含示例)

OEC小胖胖 2024-08-10 14:35:03 阅读 87

JSP(JavaServer Pages)是Java技术的一部分,用于创建动态Web内容。JSP的主要功能是简化服务器端的Web开发,尤其是对于HTML、XML等页面内容的动态生成。

一、JSP的基础概念

什么是JSP

JSP是一种基于Java的技术,用于创建动态网页。它允许在HTML中嵌入Java代码,这些代码在服务器端执行。

工作原理

当浏览器请求一个JSP页面时,服务器将JSP文件编译成一个Servlet(Java类)。这个Servlet生成HTML内容并发送回客户端(浏览器)。

二、JSP和Servlet的关系

<code> JSP是Servlet的简化版,专注于页面显示。

Servlet适合处理复杂的逻辑和控制流程。

JSP和Servlet可以相互调用,形成MVC(Model-View-Controller)模式。

三、JSP的生命周期

翻译阶段

JSP页面被翻译成Servlet类。 编译阶段

翻译后的Servlet类被编译。 加载阶段

编译后的Servlet类被加载到服务器内存中。 实例化阶段

创建Servlet实例。 初始化阶段

调用init方法进行初始化。 请求处理阶段

对每个请求调用service方法,生成响应。 销毁阶段

调用destroy方法,释放资源。

四、JSP的基本语法

脚本元素

表达式<%= ... %> 用于输出表达式的值。

Hello, the current time is: <%= new java.util.Date() %>

脚本片段<% ... %> 包含任意Java代码,可以用来定义变量或编写控制结构。

<%

String name = "John";

int age = 30;

%>

声明<%! ... %> 用于定义类级别的变量和方法。

<%!

private int count = 0;

public int getCount() {

return ++count;

}

%>

指令元素

页面指令<%@ page ... %> 用于设置JSP页面属性。

<%@ page language="java" contentType="text/html; charset=UTF-8" %>code>

包含指令<%@ include file="..." %>code> 用于包含其他文件的内容。

<%@ include file="header.jsp" %>code>

标签库指令<%@ taglib uri="..." prefix="..." %>code> 用于引入自定义标签库(学习JSTL时会使用到)。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>code>

动作元素

JSP中,动作元素(也叫动作标签)用于执行特定的任务或操作,例如包含其他页面、转发请求、设置属性等。动作标签可以在JSP页面中以 XML 风格的标签形式使用,让开发者可以更方便地管理和控制页面的行为。下面让介绍几种常用的动作标签及其用法:

①. <jsp:include>

<jsp:include> 标签用于在当前页面中包含其他页面的内容。被包含的页面可以是 JSP 页面、HTML 页面或者其他文本文件。

示例:

<jsp:include page="header.jsp" />code>

这个示例会在当前页面中包含名为 “header.jsp” 的页面的内容。

②. <jsp:forward>

<jsp:forward> 标签用于将请求转发到其他页面,通常用于实现请求的重定向。

示例:

<jsp:forward page="error.jsp" />code>

这个示例会将请求转发到名为 “error.jsp” 的页面。

③. <jsp:useBean>

<jsp:useBean> 标签用于在页面中创建或定位一个 JavaBean 实例,使得页面可以使用该 JavaBean 中的属性和方法。

示例:

<jsp:useBean id="user" class="com.example.User" scope="request" />code>

这个示例会在 request 作用域中创建一个名为 “user” 的 JavaBean 实例,类为 com.example.User

④. <jsp:setProperty><jsp:getProperty>

<jsp:setProperty> 标签用于设置 JavaBean 实例的属性值,<jsp:getProperty> 标签用于获取 JavaBean 实例的属性值。

示例:

<jsp:setProperty name="user" property="name" value="Alice" />code>

<jsp:getProperty name="user" property="name" />code>

这个示例会将名为 “user” 的 JavaBean 实例的 “name” 属性设置为 “Alice”,然后输出 “name” 属性的值。

⑤. <jsp:param>

<jsp:param> 标签用于在包含其他页面或转发请求时,传递参数给被包含的页面或转发的目标页面。

示例:

<jsp:include page="header.jsp">code>

<jsp:param name="section" value="home" />code>

</jsp:include>

这个示例会在包含名为 “header.jsp” 的页面时,将名为 “section” 的参数设置为 “home”。

⑥. <jsp:plugin>

<jsp:plugin> 标签用于嵌入 Applet 或者其他对象到生成的页面中。

示例:

<jsp:plugin type="applet" code="MyApplet.class" width="300" height="200">code>

<jsp:params>

<jsp:param name="param1" value="value1" />code>

<jsp:param name="param2" value="value2" />code>

</jsp:params>

</jsp:plugin>

这个示例会嵌入一个名为 “MyApplet.class” 的 Applet 到页面中,并传递参数给 Applet。

动作元素总结

动作标签为开发者提供了一种方便的方式来控制和管理 JSP 页面的行为。通过使用动作标签,可以轻松地包含其他页面、转发请求、创建 JavaBean 实例、传递参数等,从而使得页面的逻辑更加清晰、易于维护。

五、JSP隐式对象

JSP隐式对象是JSP的重要组成部分之一。隐式对象提供了对各种Web应用程序资源的直接访问,这些对象在JSP页面中不需要显式地声明就可以使用。JSP提供了九个隐式对象,每个对象都有特定的用途。

request:

类型:javax.servlet.http.HttpServletRequest用途:表示客户端的请求,包含请求参数、头信息、请求方法等。常用方法:

String param = request.getParameter("paramName");

String header = request.getHeader("headerName");

response:

类型:javax.servlet.http.HttpServletResponse用途:表示服务器对客户端的响应,可以设置响应头、状态码和发送数据。常用方法:

response.setContentType("text/html");

response.setHeader("headerName", "headerValue");

out:

类型:javax.servlet.jsp.JspWriter用途:用于向客户端输出内容,类似于标准的Java PrintWriter。常用方法:

out.println("Hello, world!");

out.flush();

session:

类型:javax.servlet.http.HttpSession用途:表示一个用户会话,用于在多个请求间保持用户数据。常用方法:

session.setAttribute("username", "John");

String user = (String) session.getAttribute("username");

session.invalidate();

application:

类型:javax.servlet.ServletContext用途:表示Web应用程序的上下文,可以在整个应用中共享数据。常用方法:

application.setAttribute("appName", "MyApp");

String app = (String) application.getAttribute("appName");

config:

类型:javax.servlet.ServletConfig用途:表示JSP页面的配置对象,包含初始化参数和Servlet上下文。常用方法:

String param = config.getInitParameter("paramName");

ServletContext context = config.getServletContext();

pageContext:

类型:javax.servlet.jsp.PageContext用途:提供对各种范围对象(如page、request、session、application)的统一访问。常用方法:

pageContext.setAttribute("key", "value", PageContext.SESSION_SCOPE);

String value = (String) pageContext.getAttribute("key", PageContext.SESSION_SCOPE);

page:

类型:java.lang.Object用途:表示当前的JSP页面对象,等同于this关键字。常用方法:通常不直接使用,可以通过调用当前页面的方法或访问属性来使用。

exception:

类型:java.lang.Throwable用途:在JSP页面中处理未捕获的异常时使用,通常在错误页面中使用。常用方法:

String message = exception.getMessage();

示例使用隐式对象

以下是一个使用上述隐式对象的简单JSP页面示例:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>code>

<%@ page isErrorPage="true" %>code>

<!DOCTYPE html>

<html>

<head>

<title>Implicit Objects Example</title>

</head>

<body>

<h2>Using JSP Implicit Objects</h2>

<p>Request Parameter: <%= request.getParameter("name") %></p>

<p>Session Attribute: <%= session.getAttribute("username") %></p>

<p>Application Attribute: <%= application.getAttribute("appName") %></p>

<p>Page Exception: <%= exception != null ? exception.getMessage() : "No Exception" %></p>

</body>

</html>

在这个示例中,JSP页面演示了如何使用requestsessionapplicationexception隐式对象来访问不同范围的数据和处理异常。

JSP隐式对象总结

JSP隐式对象是JSP的重要组成部分,它们提供了对请求、响应、会话、应用上下文等各种Web资源的直接访问,极大地简化了Web应用程序的开发。了解和熟练使用这些隐式对象,是掌握JSP开发的重要一步。

六、JSP的使用示例

有一个简单的用户登录页面,通过JSP实现:

login.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>code>

<!DOCTYPE html>

<html>

<head>

<title>Login Page</title>

</head>

<body>

<h2>Login</h2>

<form action="loginServlet" method="post">code>

Username: <input type="text" name="username"><br>code>

Password: <input type="password" name="password"><br>code>

<input type="submit" value="Login">code>

</form>

</body>

</html>

LoginServlet.java:

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

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) && "password".equals(password)) {

response.sendRedirect("welcome.jsp");

} else {

response.sendRedirect("error.jsp");

}

}

}

welcome.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>code>

<!DOCTYPE html>

<html>

<head>

<title>Welcome</title>

</head>

<body>

<h2>Welcome, <%= request.getParameter("username") %>!</h2>

</body>

</html>

error.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>code>

<!DOCTYPE html>

<html>

<head>

<title>Error</title>

</head>

<body>

<h2>Login failed. Please try again.</h2>

</body>

</html>

七、JSP的优势

简化开发:通过简化Java代码的嵌入,减少代码冗余。分离显示和逻辑:可以将页面显示和业务逻辑分离,提高代码的可维护性。强大的功能:继承Java的强大功能,支持面向对象编程、数据库连接等。

八、JSP总结

JSP是Java Web开发的重要组成部分,适用于创建动态网页。通过学习工作原理和与Servlet的关系、JSP的基本语法、JSP的隐式对象,可以有效地开发和维护Web应用程序。

希望通过上述介绍,大家能够对JSP有一个全面的了解。


上一篇: C++生化危机1.5源码

下一篇: C++——异常

本文标签

看这一篇就够了(含示例)    JSP详解   


声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。