当前位置: 首页 > news >正文

JSP 技术

一、什么是JSP?

JSP(JavaServer Pages)是一种基于Java的服务器端页面技术,它允许在HTML文档中嵌入Java代码片段和JSP标签,由Web容器(如Tomcat)在服务器端解析执行,最终生成纯HTML页面,返回给客户端浏览器。

二、JSP工作原理

  1. 请求阶段:客户端(浏览器)发送HTTP请求,访问某个JSP页面(如index.jsp);

  2. 转换阶段:Web容器(Tomcat)检测到请求的是JSP文件,会将JSP页面转换为一个Java源文件(Servlet类,文件名通常为「JSP页面名_jsp.java」);

  3. 编译阶段:Web容器将生成的Java源文件编译成字节码文件(.class文件);

  4. 执行与响应阶段:Web容器加载并执行该Servlet,生成动态HTML内容,通过response对象返回给客户端,浏览器解析HTML并展示。

三、JSP核心语法:3大核心要素

JSP的语法核心是「HTML标签 + Java代码 + JSP标签」,其中Java代码和JSP标签负责动态内容,HTML负责静态展示。下面重点讲解最常用、最核心的语法,新手优先掌握这些即可。

3.1 JSP脚本元素

类型

格式

功能说明

示例

表达式

<%= 表达式 %>

执行Java表达式,将结果直接输出到页面(无需写out.println())

<%= 1+1 %>输出:2

脚本片段

<% Java代码 %>

嵌入任意Java代码(如循环、判断、变量定义),可与HTML标签混合使用

<% for(int i=0; i<5; i++){ out.println(i); } %>

声明

<%! 变量/方法定义 %>

定义JSP页面的成员变量或成员方法(不常用,建议少用)

<%! int count = 0; %>

注意:脚本片段中的Java代码,会被直接嵌入到生成的Servlet的service方法中;而声明中的代码,会被定义为Servlet的成员变量/方法,多线程访问时可能存在线程安全问题,尽量避免使用。

3.1.1 脚本案例:

结果如下:

3.1.2 声明案例:

结果如下:

3.1.3 表达式案例:

结果如下:

3.2 JSP注释

JSP注释:格式<%-- 注释内容 --%>,只在服务器端可见,客户端看不到(不会被输出到HTML中),适合注释Java代码或JSP逻辑;

HTML注释:格式<!-- 注释内容 -->,会被输出到HTML页面中,客户端可以通过查看源码看到,适合注释HTML结构。

3.3 JSP指令

指令用于告诉Web容器如何解析JSP页面,格式为:<%@ 指令名 属性="值" %>,常用的有3种指令,重点掌握前2种。

指令名

功能说明

示例

page

定义JSP页面的全局属性(如编码、语言、导入包等),每个JSP页面开头必写

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.Date" %>

include

静态包含其他JSP/HTML页面,将被包含页面的内容直接嵌入当前页面(编译前包含)

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

taglib

导入自定义标签库(如JSTL标签库),用于扩展JSP功能

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

3.3.1 page案例:

结果如下:

3.3.2 page案例2:

结果如下:

3.3.3 include案例:

先写一个test.txt文件

再写一个test_include.jsp文件

结果如下:

四、JSP的优缺点与注意事项

1. 优点

开发速度快:HTML与Java代码混合编写,无需单独编写Servlet;

上手简单:无需掌握复杂的Servlet配置,直接编写页面即可;

2. 缺点

代码混乱:Java代码与HTML标签混在一起,后期维护难度大(尤其是复杂页面);

性能一般:每次修改JSP都需要重新编译,高并发场景下不如Servlet高效;

线程安全问题:JSP声明的成员变量(<%! %>)会被多线程共享,容易出现数据错乱。

3. 注意事项

避免在JSP中编写复杂业务逻辑:JSP的核心是展示视图,业务逻辑尽量交给Servlet或Service处理;

禁止使用<%! %>声明成员变量:多线程访问会有线程安全问题,如需定义变量,在脚本片段(<% %>)中定义局部变量;

必须设置编码:page指令的charset=UTF-8一定要写,避免中文乱码。

http://www.jsqmd.com/news/801702/

相关文章:

  • STM32F103驱动EC11旋转编码器:从状态机到按键复合功能的进阶玩法
  • 2026年外贸获客需求深度评测:4家谷歌SEO公司对比 - 速递信息
  • 多模态认知系统认知失调问题与可信决策跃迁机制研究(世毫九实验室原创理论)
  • Windows激活总是失败?KMS_VL_ALL_AIO如何让激活变得简单可靠
  • EdgeRemover终极指南:2025年最安全的微软Edge浏览器完全卸载方案
  • FPGA同步电路设计与时序优化实战指南
  • 旋转气缸厂家怎么选?从夹具系统到自动化生产,看看倍得福的实战经验 - 企师傅推荐官
  • JSTL标签库简介 JSTL的下载和使用 核心标签库的使用
  • 【信息科学与工程学】【产品体系】第十三篇 光刻机08 EUV光刻机的主要数学理论01
  • Beyond Compare 5激活终极指南:3分钟获取永久授权的完整教程
  • Webpack日志转发插件原理与实战:构建监控与性能优化指南
  • 终极指南:如何快速掌握阴阳师自动化脚本的完整使用技巧
  • 手把手教你用Olimex ARM-USB-TINY-H调试RISC-V开发板:OpenOCD配置文件详解与实战
  • 从正则表达式到最小DFA:图解整个编译流程中的状态化简到底在干嘛
  • 别再盲目用Google了!Perplexity vs Google搜索的权威测评:基于1,842次真实技术查询的准确率、时延与可验证性三重审计
  • 从零到一:用MicroPython驱动MPU6050打造姿态感知核心
  • 如何彻底告别网盘限速:9大平台直链解析工具完整指南
  • YOLOv5网络结构拆解:从608x608输入到三个特征图输出,新手也能看懂的模型数据流图解
  • Qt多线程接收周立功CAN数据实战:告别卡顿,实时显示报文到TableWidget
  • CCF CSP 校门外的树:从“打表”预处理到动态规划的精妙解法
  • 从捏合机,传感器,金属探测器到冷冻机:工业品推广平台怎么选?这份推荐清单值得收藏 - 品牌推荐大师
  • Windows平台SITL仿真环境搭建:从Cygwin到ArduPilot的完整指南
  • 别再照搬Zynq教程了!手把手教你为Arty A7-35T板子固化MicroBlaze程序到SPI Flash
  • 【收藏必看】2026 版|AI Coding 仅 3 年彻底重构职场!程序员必转 Agent 工程师风口
  • OpencvSharp 算子学习教案之 - Cv2.Sobel
  • 告别内存焦虑!STM32H743全系列SRAM(ITCM/DTCM/AXI)实战分配指南(MDK/IAR双环境)
  • 别再手动改代码了!用CubeMX+Keil V5一键搞定STM32F4的FPU配置(含ARM_MATH_CM4宏定义详解)
  • 从手机卡顿到eMMC寿命:聊聊UFS替换eMMC背后,那些被你忽略的协议层原因
  • 从零到一:使用DaVinci Developer进行AUTOSAR SWC设计与ECU集成
  • Win10 64位系统下,Questasim 10.6c安装与破解的保姆级避坑指南(附资源)