首页 > 其他分享 >JSP详解,看这一篇就够了(含示例)

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

时间:2024-06-01 20:33:57浏览次数:29  
标签:String 示例 标签 就够 JSP Servlet 页面

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

一、JSP的基础概念

  1. 什么是JSP

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

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

二、JSP和Servlet的关系

 	JSP是Servlet的简化版,专注于页面显示。
 	Servlet适合处理复杂的逻辑和控制流程。
	JSP和Servlet可以相互调用,形成MVC(Model-View-Controller)模式。

三、JSP的生命周期

  1. 翻译阶段
    • JSP页面被翻译成Servlet类。
  2. 编译阶段
    • 翻译后的Servlet类被编译。
  3. 加载阶段
    • 编译后的Servlet类被加载到服务器内存中。
  4. 实例化阶段
    • 创建Servlet实例。
  5. 初始化阶段
    • 调用init方法进行初始化。
  6. 请求处理阶段
    • 对每个请求调用service方法,生成响应。
  7. 销毁阶段
    • 调用destroy方法,释放资源。

四、JSP的基本语法

  1. 脚本元素

    • 表达式<%= ... %> 用于输出表达式的值。
      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; 
      }
      %>
      
  2. 指令元素

    • 页面指令<%@ page ... %> 用于设置JSP页面属性。
      <%@ page language="java" contentType="text/html; charset=UTF-8" %>
      
    • 包含指令<%@ include file="..." %> 用于包含其他文件的内容。
      <%@ include file="header.jsp" %>
      
    • 标签库指令<%@ taglib uri="..." prefix="..." %> 用于引入自定义标签库(学习JSTL时会使用到)。
      <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
      
  3. 动作元素

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

    ①. <jsp:include>

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

    示例:

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

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

    ②. <jsp:forward>

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

    示例:

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

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

    ③. <jsp:useBean>

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

    示例:

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

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

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

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

    示例:

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

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

    ⑤. <jsp:param>

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

    示例:

    <jsp:include page="header.jsp">
        <jsp:param name="section" value="home" />
    </jsp:include>
    

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

    ⑥. <jsp:plugin>

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

    示例:

    <jsp:plugin type="applet" code="MyApplet.class" width="300" height="200">
        <jsp:params>
            <jsp:param name="param1" value="value1" />
            <jsp:param name="param2" value="value2" />
        </jsp:params>
    </jsp:plugin>
    

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

    动作元素总结

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

五、JSP隐式对象

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

  1. request:

    • 类型:javax.servlet.http.HttpServletRequest
    • 用途:表示客户端的请求,包含请求参数、头信息、请求方法等。
    • 常用方法:
      String param = request.getParameter("paramName");
      String header = request.getHeader("headerName");
      
  2. response:

    • 类型:javax.servlet.http.HttpServletResponse
    • 用途:表示服务器对客户端的响应,可以设置响应头、状态码和发送数据。
    • 常用方法:
      response.setContentType("text/html");
      response.setHeader("headerName", "headerValue");
      
  3. out:

    • 类型:javax.servlet.jsp.JspWriter
    • 用途:用于向客户端输出内容,类似于标准的Java PrintWriter
    • 常用方法:
      out.println("Hello, world!");
      out.flush();
      
  4. session:

    • 类型:javax.servlet.http.HttpSession
    • 用途:表示一个用户会话,用于在多个请求间保持用户数据。
    • 常用方法:
      session.setAttribute("username", "John");
      String user = (String) session.getAttribute("username");
      session.invalidate();
      
  5. application:

    • 类型:javax.servlet.ServletContext
    • 用途:表示Web应用程序的上下文,可以在整个应用中共享数据。
    • 常用方法:
      application.setAttribute("appName", "MyApp");
      String app = (String) application.getAttribute("appName");
      
  6. config:

    • 类型:javax.servlet.ServletConfig
    • 用途:表示JSP页面的配置对象,包含初始化参数和Servlet上下文。
    • 常用方法:
      String param = config.getInitParameter("paramName");
      ServletContext context = config.getServletContext();
      
  7. 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);
      
  8. page:

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

    • 类型:java.lang.Throwable
    • 用途:在JSP页面中处理未捕获的异常时使用,通常在错误页面中使用。
    • 常用方法:
      String message = exception.getMessage();
      

    示例使用隐式对象

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

    <%@ page language="java" contentType="text/html; charset=UTF-8" %>
    <%@ page isErrorPage="true" %>
    <!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" %>
<!DOCTYPE html>
<html>
<head>
    <title>Login Page</title>
</head>
<body>
    <h2>Login</h2>
    <form action="loginServlet" method="post">
        Username: <input type="text" name="username"><br>
        Password: <input type="password" name="password"><br>
        <input type="submit" value="Login">
    </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" %>
<!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" %>
<!DOCTYPE html>
<html>
<head>
    <title>Error</title>
</head>
<body>
    <h2>Login failed. Please try again.</h2>
</body>
</html>

七、JSP的优势

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

八、JSP总结

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

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

标签:String,示例,标签,就够,JSP,Servlet,页面
From: https://blog.csdn.net/2301_79858914/article/details/139302163

相关文章

  • 拿下列表和元组只要一篇就够了
    一.列表的定义Python中的列表(List)是一种有序、可变的序列类型,可以使用方括号来表示一个列表,其中各个元素之间使用逗号分隔。列表中的每个元素可以是不同类型的数据,如整数、字符串、浮点数等。#定义一个多元素的列表ls=[1,2,'hello',3.2,[2,8,'hello']]print(ls)......
  • 下面提供一些C语言的入门示例代码
    下面提供一些C语言的入门示例代码,并附有注释,以帮助理解每个部分的功能。1.HelloWorld程序#include<stdio.h> //引入标准输入输出库intmain(){ //主函数的开始   printf("Hello,World!\n"); //打印"Hello,World!"到控制台   return0; //返回......
  • Shell阶段08 数组(普通数组, 关联数组), 示例(数组的遍历与循环)
    数组基本概述#shell的数组用的比较少,一般都用awk。因为shell的数组比awk慢很多什么是数组简单来说:数组其实就是变量的一种,变量只能存储一个值,而数组可以存储多个值数组的分类分为两类普通数组关联数组普通数组:只能使用正整数作为数组索引关联数组:可以使用......
  • numpy简洁教程(一篇就够) - 属性/生成/读写/运算/形状修改
    目录1、numpy属性2、数组生成     (1)1、2、3维数组,字符串数组直接生成     (2)生成数组时指定数据类型     (3)生成0、1数组     (4)从现有数据生成数组     (5)生成固定范围数组linspace、arange、logspace     (6)生成随机数......
  • 管理 Windows Server 2022 中 DNS 服务器相关的 CMD 批处理命令的示例
    一些与管理WindowsServer2022中DNS服务器相关的CMD批处理命令的示例:创建新的DNS区域:CopyCodednscmd/ZoneAddexample.com/Primary删除DNS区域:CopyCodednscmd/ZoneDeleteexample.com/f添加区域转发:CopyCodednscmd/ZoneResetForwardersexample......
  • 在 Windows Server 2022 中,您可以使用 PowerShell 来管理 DNS 服务器,以下是一些常用的
    在WindowsServer2022中,您可以使用PowerShell来管理DNS服务器,以下是一些常用的PowerShell命令及其示例:安装DNS服务器角色:安装DNS服务器角色:powershellCopyCodeInstall-WindowsFeature-NameDNS-IncludeManagementTools配置DNS区域和记录:创建新的......
  • Shell阶段07 退出循环指令(示例:分发主机公钥), 函数应用(参数传参)
    退出循环的语句#1.exit退出循环,退出脚本#2.break结束当前循环,或者跳出本地循环,继续执行循环外面的命令#3.continue忽略本次循环剩余的代码,直接执行下一次循环#4.案例先扫描内网网段的所有主机,存活的主机进行发放本机的公钥1.本机是否要有公钥,创建密钥对rm2.......
  • 构建LangChain应用程序的示例代码:1、AutoGPT
    AutoGPT实现https://github.com/Significant-Gravitas/Auto-GPT,但是使用了LangChain的基础组件(大型语言模型(LLMs)、提示模板(PromptTemplates)、向量存储(VectorStores)、嵌入(Embeddings)、工具(Tools))。设置工具我们将设置一个带有搜索工具、写文件工具和读文件工具的......
  • 【车间调度FJSP】基于全球邻域和爬山优化算法的模糊柔性车间调度问题研究(Matlab代码实
     ......
  • Solidity学习-投票合约示例
    以下的合约有一些复杂,但展示了很多Solidity的语言特性。它实现了一个投票合约。当然,电子投票的主要问题是如何将投票权分配给正确的人员以及如何防止被操纵。我们不会在这里解决所有的问题,但至少我们会展示如何进行委托投票,同时,计票又是自动和完全透明的。我们的想法是......