【JavaWeb】渲染技术Jsp

🎄欢迎来到@边境矢梦°的csdn博文,本文主要讲解Java web中渲染技术 Jsp 的相关知识🎄


🌈我是边境矢梦°,一个正在为秋招算法竞赛做准备的学生🌈
🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆

Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大)🌑🌒🌓🌔🌕   

目录

🌒一. 问题引出 

🌒 二. 基本介绍

🌕三. 运行原理

🌓四. page指令

🌔五. jsp的三种常用脚本

🌓六. jsp注释

🌔七. jsp内置对象

🌔八. jsp域对象

🌓九. jsp请求转发标签

🌓十. EL表达式

🌓十一. JSTL


一. 问题引出 

由于HTML只能将静态内容输出, 由浏览器来解析打印, 但是如果页面里面的数据不是静态的是动态的, 那么我们就需要把代码写在servlet里面, 写在servlet里面代码很麻烦

html

servlet

引出jsp

 jsp=html+java 片段+标签+javascript+css

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>hello, jsp</title>
</head>
<body>
<h1>JSP, 计算器</h1>
<%
int i = 20;
int j = 70;
int res = i + j;
out.println(i + " + " + j + " = " + res);
%>
</body>
</html>

 二. 基本介绍

  1.  JSP 全称是 Java Server PagesJava 的服务器页面
  2.  JSP 这门技术的最大的特点在于,JSP 就像在写 HTML
    • 相比 html 而言,html 只能为用户提供静态数据,而 JSP 技术允许在页面中嵌套 java 代码, 为用户提供动态数据
    • 相比 Servlet 而言,Servlet 很难对数据进行排版jsp 除了可以用 java 代码产生动态数据的同时,也很容易对数据进行排版
  3.  jsp 技术基于 Servlet, 可以理解成 JSP 就是对 Servlet 的包装.
  4.  会使用 JSP 的程序员, 再使用 thymeleaf 是非常容易的事情, 几乎是无缝接轨.

三. 运行原理

  1. 客户端发送请求:用户在浏览器中输入 URL 或点击链接,向服务器发送 HTTP 请求。

  2. 服务器接收请求:Web 服务器(如 Apache Tomcat)接收到 HTTP 请求。

  3. JSP 编译:服务器将 JSP 文件传递给 JSP 引擎进行处理。JSP 引擎将 JSP 文件编译为 Servlet (Java文件)

  4. Servlet 运行:生成的 Servlet 代码通过 Java 编译器进行编译,生成字节码文件

  5. Servlet 实例化:Servlet 容器(如 Servlet 容器)根据需要实例化 Servlet,一般是通过调用无参构造函数来创建 Servlet 实例。

  6. 请求处理:Servlet 实例接收到来自客户端的请求,并执行相应的 Java 代码。

  7. 动态内容生成:Servlet 可以使用 Java 代码来生成动态内容,包括生成 HTML、XML、JSON 等响应。

  8. 响应发送:Servlet 将生成的动态内容作为响应发送给客户端。

  9. 客户端渲染:浏览器接收到响应,并将响应内容进行解析和渲染,最终在用户的浏览器中显示出动态生成的页面。

JSP 的运行原理可以概括为将 JSP 文件编译成 Java Servlet然后由 Servlet 容器加载、实例化和运行生成的 Servlet。通过在 JSP 文件中嵌入 Java 代码,可以实现与数据库的交互、条件判断、循环处理等逻辑,生成动态的 Web 内容并发送给客户端浏览器。这使得 JSP 成为了创建动态 Web 应用程序的强大工具

注意 :

所以jsp原来还是servlet, 只是那些麻烦的, 不好看的代码被底层实现了, 你只需要面向简单的容易的方式进行编程即可, 也是面向对象的编程思维

四. page指令

在 JSP 中,可以使用<%@ page %>指令来设置页面的相关属性和配置。<%@ page %>指令通常位于 JSP 文件的顶部,以下是一些常用的属性和配置:

  1. contentType:设置响应的内容类型,例如:<%@ page contentType="text/html;charset=UTF-8" %>

  2. pageEncoding:设置当前页面的字符编码,例如:<%@ page pageEncoding="UTF-8" %>

  3. import:引入 Java 类的包或类,例如:<%@ page import="java.util.List" %>

  4. session:设置是否启用会话,例如:<%@ page session="true" %>

  5. buffer:设置页面的输出缓冲区大小,例如:<%@ page buffer="8kb" %>

  6. autoFlush:设置是否自动刷新缓冲区,例如:<%@ page autoFlush="true" %>

  7. isThreadSafe:设置页面是否是线程安全的,例如:<%@ page isThreadSafe="true" %>

  8. errorPage:设置错误处理页面,当页面抛出异常时跳转到指定的错误处理页面,例如:<%@ page errorPage="error.jsp" %>

  9. isErrorPage:设置当前页面是否是错误处理页面,例如:<%@ page isErrorPage="true" %>

  10. extends:指定生成的 Servlet 的继承关系,例如:<%@ page extends="com.example.MyServlet" %>

<%@ page %>指令用于在 JSP 编译时设置页面属性和配置,可以影响生成的 Servlet 的行为和功能。


五. jsp的三种常用脚本

在 JSP(JavaServer Pages)中,有三种常用的脚本用于插入代码和实现动态功能:

  1. 声明脚本(Declaration):使用 <%! %> 标签将 Java 代码插入到 JSP 中。声明脚本用于定义全局的变量、方法或类,这些内容会被编译到 Servlet 类中,并在整个 JSP 页面中可见

    <%!
        int num = 10;
        public void displayMessage() {
            System.out.println("Hello, World!");
        }
    %>
    
  2. 表达式脚本(Expression):使用 <%= %> 标签将表达式结果输出到 JSP 页面。表达式脚本用于在页面中显示变量、方法返回值等内容。

    <p>Number: <%= num %></p>
    <p>Current time: <%= new java.util.Date() %></p>
    
  3. 脚本let(Scriptlet):使用 <% %> 标签将 Java 代码插入到 JSP 中。脚本let用于执行任意的 Java 代码块,可以包含条件语句、循环语句等。

    <% if (num > 0) { %>
        <p>The number is positive.</p>
    <% } else { %>
        <p>The number is negative.</p>
    <% } %>
    

这些脚本可以混合使用,以便实现更复杂的逻辑和动态内容。注意,声明脚本不会直接在页面中显示内容,但可以定义全局变量和方法供其他脚本使用。而表达式脚本和脚本let可以在页面中直接显示或执行相应的代码逻辑。请根据需要选择合适的脚本类型来实现所需的功能。


六. jsp注释

在 JSP(JavaServer Pages)中,有两种注释方式可以使用:

  1. HTML 注释:使用 <!-- --> 标签进行注释,注释内容不会被发送到客户端。

    <!-- 这是一个 HTML 注释 -->
    
  2. Java 注释:使用 // 或 /* */ 进行注释,注释内容在 JSP 页面被转化成 Servlet 时会被编译器忽略。

    <%-- 这是一个 JSP 注释 --%>            // 特别的一种
    
    <% // 这是一个单行的 JSP 注释 %>
    
    <% /* 
         这是一个多行的 JSP 注释
       */ %>
    

HTML 注释是常规的 HTML 注释方式,用于注释掉 HTML 代码。Java 注释则用于注释掉嵌入在 <% %> 标记中的 Java 代码,可以使用单行注释 // 或多行注释 /* */

在 JSP 中使用注释可以起到以下作用:

  • 解释代码的作用和目的
  • 临时禁用或排除某些代码段
  • 提供开发文档和注释

注释可以提高代码的可读性和可维护性,并且在开发过程中有助于团队成员之间的交流和理解。


七. jsp内置对象

JSP(JavaServer Pages)中内置了一些对象,这些对象可以在 JSP 页面中直接使用,以实现不同的功能和访问与 Web 应用程序相关的信息。以下是一些常见的 JSP 内置对象:

  1. request: 代表客户端的请求,用于获取客户端提交的数据和设置请求属性。

  2. response: 代表服务器对客户端的响应,用于设置响应头信息、输出内容到客户端等操作。

  3. out: 用于在 JSP 页面中输出内容到客户端,等效于 response.getWriter() 方法。

  4. session: 代表客户端与服务器之间的会话,用于存储和获取会话相关的数据。

  5. application: 代表整个 Web 应用程序的上下文,用于在应用程序级别共享数据。

  6. pageContext: 代表 JSP 页面的上下文,包含了其他内置对象的引用,用于访问其他内置对象。

  7. page: 代表当前 JSP 页面的实例,可以用于执行页面重定向、包含其他页面等操作。(this)

  8. exception: 用于处理异常情况,表示当前页面抛出的异常对象。

这些内置对象可通过 JSP 页面中的脚本或表达式直接调用,例如:

<!-- 获取请求参数 -->
<%
   String username = request.getParameter("username");
%>

<!-- 输出内容到客户端 -->
<%
   out.println("Hello, World!");
%>

<!-- 设置会话属性 -->
<%
   session.setAttribute("name", "John");
%>

请注意,这些内置对象在 JSP 开发中非常常用,并提供了许多便捷的方法和属性用于处理 Web 应用程序的不同方面

举例子 : 当请求的 URL 为 example.com/myPage.jsp?username=John 时,我们可以通过以下示例演示每个对象的使用:

request 对象:

<%
    // 获取请求参数
    String username = request.getParameter("username");
%>

response 对象:

<%
    // 设置响应头信息
    response.setContentType("text/html");

    // 输出内容到客户端
    PrintWriter out = response.getWriter();
    out.println("<h1>Hello, World!</h1>");
    out.close();
%>

out 对象:

<%
    // 输出内容到客户端
    out.println("Hello, World!");
%>

session 对象:

<%
    // 存储和获取会话属性
    session.setAttribute("name", "John");
    String name = (String) session.getAttribute("name");
%>

application 对象:

<%
    // 在应用程序级别共享数据
    application.setAttribute("count", 10);
    int count = (int) application.getAttribute("count");
%>

pageContext 对象:

<%
    // 使用 pageContext 获取其他内置对象的引用
    request.setAttribute("message", "Hello, World!");
    String message = (String) pageContext.getRequest().getAttribute("message");
%>

page 对象:

<%!
    // 执行页面重定向
    response.sendRedirect("anotherPage.jsp");
%>

exception 对象:

<%
    try {
        // 产生异常
        int result = 10 / 0;
    } catch (Exception e) {
        // 处理异常
        out.println("An error occurred: " + e.getMessage());
    }
%>

这些示例展示了如何使用每个内置对象来实现不同的功能,包括获取请求参数、设置响应头信息、输出内容、存储会话属性、共享应用程序级别的数据、获取其他内置对象的引用、执行页面重定向、处理异常等操作。


八. jsp域对象

在 JSP(JavaServer Pages)中,域对象是一种用于在不同的作用域内共享数据的机制。JSP 提供了四个不同的域对象,每个对象有不同的作用域范围。以下是 JSP 的四个域对象:

  1. pageContext 域:它是最广泛的作用域,覆盖了整个 JSP 页面在同一个页面中,不同的脚本块之间可以通过 pageContext 域对象共享数据。

  2. request 域:它代表了客户端的请求,其作用范围是在同一个请求中的所有页面和资源之间共享数据。例如,当用户提交一个表单时,在表单的处理页面中可以通过 request 域传递表单数据给其他页面。

  3. session 域:它代表了客户端和服务器之间的会话,其作用范围是一个用户的整个会话期间即从用户第一次访问网站到关闭浏览器的整个过程。session 域对象可以用于在不同的页面之间存储和获取用户特定的信息。

  4. application 域:它代表了整个 Web 应用程序的上下文,其作用范围是在整个应用程序的所有页面和资源之间共享数据。application 域对象通常用于存储全局配置信息或全局数据,可以被多个用户和会话访问。

这些域对象可以通过在 JSP 页面中使用内置对象(如 pageContextrequestsessionapplication)来访问和操作。例如:

<!-- 在 pageContext 域中存储数据 -->
<%
    pageContext.setAttribute("message", "Hello, World!");
%>

<!-- 在 request 域中存储数据 -->
<%
    request.setAttribute("username", "John");
%>

<!-- 在 session 域中存储数据 -->
<%
    session.setAttribute("cart", shoppingCart);
%>

<!-- 在 application 域中存储数据 -->
<%
    application.setAttribute("version", "1.0");
%>

在其他页面或脚本块中,可以通过相应的域对象来获取这些数据:

<!-- 从 pageContext 域中获取数据 -->
<%
    String message = (String) pageContext.getAttribute("message");
%>

<!-- 从 request 域中获取数据 -->
<%
    String username = (String) request.getAttribute("username");
%>

<!-- 从 session 域中获取数据 -->
<%
    ShoppingCart cart = (ShoppingCart) session.getAttribute("cart");
%>

<!-- 从 application 域中获取数据 -->
<%
    String version = (String) application.getAttribute("version");
%>

这些域对象提供了不同的作用域范围,使得开发者可以方便地在不同的页面和作用域中共享数据,实现更灵活和高效的应用程序开发。

JSP 四大域对象注意事项和细节
        1. 域对象是可以像 Map 一样存取数据的对象。四个域对象功能一样。不同的是它们对数 据的存储范围
        2. 从存储范围 ( 作用域范围看 ) pageContext < request < session < application

九. jsp请求转发标签

在 JSP(JavaServer Pages)中,可以使用 <jsp:forward> 标签来进行请求转发。该标签用于将请求转发到另一个 JSP 页面、Servlet 或其他资源,并在转发过程中将控制权传递给目标资源。以下是 <jsp:forward> 标签的语法:

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

其中,page 属性指定了要转发到的目标页面或资源的路径。路径可以是相对路径或绝对路径。

下面是一个示例,演示如何在 JSP 中使用 <jsp:forward> 标签进行请求转发:

<!-- index.jsp -->
<html>
<head>
    <title>Index Page</title>
</head>
<body>
    <h1>Welcome to Index Page</h1>

    <%-- 请求转发到 target.jsp --%>
    <jsp:forward page="target.jsp" />
</body>
</html>
<!-- target.jsp -->
<html>
<head>
    <title>Target Page</title>
</head>
<body>
    <h1>Welcome to Target Page</h1>

    <%-- 在 target.jsp 中展示一些内容 --%>
    <p>This is the target page.</p>
</body>
</html>

在上述示例中,当请求访问 index.jsp 页面时,会执行 <jsp:forward> 标签中指定的请求转发操作,将请求发送到 target.jsp 页面。浏览器会显示 target.jsp 页面的内容。

需要注意的是,使用 <jsp:forward> 标签进行请求转发时,控制权会完全交给目标页面,并且客户端并不知道请求已经被转发,因为浏览器只会接收到目标页面的响应。


十. EL表达式

EL(Expression Language,表达式语言)是一种用于在 JavaEE 技术中访问和操作数据的简洁而强大的语言EL 提供了一种简化表达式的方式,使得在 JSP、JSF、Servlet、Spring 等技术中可以更方便地访问和处理数据。

EL 表达式以 ${} 的形式包裹在文本和脚本之间,可以用于以下几个方面:

  1. 访问变量和属性:EL 可以用于访问 Java 对象中的属性、数组、集合等。例如,${user.name} 将访问一个名为 “user” 的变量或属性中的 “name” 属性。

  2. 执行方法调用:EL 可以调用对象中的方法,并传递参数。例如,${userService.getUserList()} 可以调用一个名为 “userService” 的对象中的 “getUserList()” 方法。

  3. 操作集合和映射:EL 可以用于遍历集合或映射中的元素。例如,${listUsers} 可以用于遍历名为 “listUsers” 的 List 集合,并获取每个用户对象。

  4. 运算符和逻辑表达式:EL 支持常见的算术、逻辑和比较运算符,例如 ${x + y}${age > 18} 等。

以下是一些常见的 EL 表达式示例:

<!-- 访问变量和属性 -->
<p>Welcome, ${user.name}</p>

<!-- 执行方法调用 -->
<p>The current time is ${java.time.LocalDateTime.now()}</p>

<!-- 遍历集合 -->
<ul>
  <c:forEach items="${listUsers}" var="user">
    <li>${user.name}</li>
  </c:forEach>
</ul>

<!-- 运算符和逻辑表达式 -->
<p>${x + y}</p>
<p>${age > 18}</p>

需要注意的是,EL 表达式通常与 JSP 的标准标签库(JSTL)结合使用,以获得更强大的数据操作和控制流。在 JSP 中,可以通过引入 JSTL 的标签库声明来使用 EL 表达式:

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

通过使用 EL 表达式,可以简化和提高代码的可读性,使得在 JSP 和其他 JavaEE 技术中进行数据操作更加方便和灵活。


十一. JSTL

JSTL(JavaServer Pages Standard Tag Library)是一个由 Java 社区开发的标准标签库,为 JSP 页面提供了一系列可重用的标签和函数,使得在 JSP 中进行逻辑处理和数据操作更加方便和简单。

JSTL 包含了多个模块,其中核心模块是最常用的,包含了基本的控制流标签、循环标签、条件标签和格式化标签。以下是 JSTL 的一些常用功能模块及其对应的 URI:

  • Core 核心模块:提供了基本的控制流标签、条件判断、循环处理和格式化等功能。URI 为 http://java.sun.com/jsp/jstl/core

  • Format 格式化模块:提供了日期、时间和数字的格式化标签和函数。URI 为 http://java.sun.com/jsp/jstl/fmt

  • XML XML 模块:提供了处理 XML 数据的标签和函数。URI 为 http://java.sun.com/jsp/jstl/xml

  • SQL SQL 模块:提供了对数据库进行 SQL 查询和操作的标签和函数。URI 为 http://java.sun.com/jsp/jstl/sql

  • Functions 函数模块:提供了一组常用的函数以进行字符串操作、日期计算、逻辑运算等。URI 为 http://java.sun.com/jsp/jstl/functions

要在 JSP 中使用 JSTL 标签,需要在 JSP 页面中引入 JSTL 的标签库声明,例如:

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

然后就可以在 JSP 页面中使用 JSTL 的标签了,例如使用 c:if 条件标签:

<c:if test="${condition}">
  <!-- 根据条件显示内容 -->
</c:if>

还可以使用 fmt:formatDate 进行日期格式化:

<fmt:formatDate value="${date}" pattern="yyyy-MM-dd" />

JSTL 中的标签和函数提供了强大的功能,可以简化 JSP 页面中的逻辑处理和数据操作,使得代码更具可读性和可维护性。可以根据具体需求选择合适的 JSTL 模块,并根据模块的 URI 引入相应的标签库声明,以便在 JSP 页面中使用对应的标签和函数。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
要在JavaWeb渲染SQL表单,您可以使用JavaServer Pages(JSP技术Java Database Connectivity(JDBC)API。以下是一个基本的示例代码: 1. 在JSP页面中,您可以使用HTML表单元素和JSP标签来创建表单并将数据发送到服务器: ```html <form action="processForm.jsp" method="POST"> <label for="firstName">First Name:</label> <input type="text" id="firstName" name="firstName"><br><br> <label for="lastName">Last Name:</label> <input type="text" id="lastName" name="lastName"><br><br> <input type="submit" value="Submit"> </form> ``` 2. 在processForm.jsp中,您可以使用JDBC API连接到数据库并执行SQL查询,然后将结果渲染JSP页面中: ```java <%@ page import="java.sql.*" %> <% // Get form data String firstName = request.getParameter("firstName"); String lastName = request.getParameter("lastName"); // Connect to database String url = "jdbc:mysql://localhost:3306/mydatabase"; String username = "myuser"; String password = "mypassword"; Connection conn = DriverManager.getConnection(url, username, password); // Execute SQL query String sql = "SELECT * FROM mytable WHERE first_name=? AND last_name=?"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setString(1, firstName); stmt.setString(2, lastName); ResultSet rs = stmt.executeQuery(); // Render form data and query results out.println("<p>First Name: " + firstName + "</p>"); out.println("<p>Last Name: " + lastName + "</p>"); out.println("<table>"); while (rs.next()) { out.println("<tr><td>" + rs.getString("column1") + "</td><td>" + rs.getString("column2") + "</td></tr>"); } out.println("</table>"); // Close database connection rs.close(); stmt.close(); conn.close(); %> ``` 请注意,此示例仅用于演示目的。在实际应用中,您需要使用更安全的方法来处理用户输入和数据库查询,例如使用预防SQL注入的技术

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值