news 2026/4/23 17:57:39

大学复古技术之jsp

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大学复古技术之jsp

一 JSP基础

前言:

众所周知,jsp是市场上已经半淘汰的技术,20年前就作为大学授课内容,如今仍然普遍存在于各个本科学校。

1什么是JSP

Java Server Pages,它和servle技术一样,是Java中用于开发动态web资源的技术。

JSP相当于Java + Html

JSP的最大的特点在于,写JSP就像在写html。相比html而言,html只能为用户提供静态数据,而JSP技术允许在页面中嵌套java代码,为用户提供动态数据。相比Servlet而言,Servlet很难对数据进行排版,而JSP除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。

不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把Servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。

原因在于,程序的数据通常要美化后再输出,让JSP既用java代码产生动态数据,又做美化会导致页面难以维护;让Servlet既产生数据,又在里面嵌套Html代码美化数据,同样也会导致程序可读性差,难以维护。

因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,Servlet只负责响应请求产生数据,并把数据通过转发技术带给JSP,数据的显示JSP来做。

2 JSP****执行过程

JSP本质上就是Servlet

每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。

由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。

注意:第一次访问JSP文件时,会在tomcat的work目录下生成对应的java文件,然后编译为字节码文件,执行JSP时,其实就是执行对应的class文件,并执行其中的相关方法

** JSP****语法 **

1 JSP****脚本

在 JSP 中,可以使用脚本写入 Java 代码

基本语法:

<%Java语句%>

注意:JSP脚本中只能出现java代码,不能出现其它模板元素(html相关标签), JSP引擎在翻译JSP页面中,会将JSP脚本中的Java代码将被原封不动地放到Servlet的_jspService方法中。

JSP脚本片断中的Java代码必须严格遵循Java语法

<!--jsp脚本,脚本中声明的变量放在_jspService方法中--><%// 相当于局部变量intnum=10;Stringname="zhangsan";System.out.println(name);Datedate=newDate();SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");StringdateStr=sdf.format(date);System.out.println(dateStr);%>

单个脚本中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句,例如:

<%for(inti=1;i<5;i++){%><H1>hahahaha</H1><%}%><%for(inti=1;i<=6;i++){response.getWriter().write("<h"+i+">标题"+i+"<h"+i+"/>");}%><%for(inti=1;i<=6;i++){%><h<%=i%>>标题<%=i%></h<%=i%>><%}%>

2 JSP****表达式

JSP 表达式可以把变量或者表达式输出到网页上

<%=java的表达式%>

JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.write(…) 将数据输给客户端。

注意:JSP脚本表达式中的变量或表达式后面不能有分号(;)。

<!--jsp表达式--><!--相当于out.print(name.length());--><%=name%><%=name.length()%>当前时间:<%=newjava.util.Date()%>

3 JSP****声明

JSP 声明语句用于声明变量、方法

<%!定义变量、方法等%>

JSP声明中的java代码被翻译到_jspService方法的外面,即成为成员变量/成员方法。

<!--jsp声明--><%!//相当于成员变量privateintaaa=10;//定义了一个方法publicintadd(inta,intb){returna+b;}intsum=add(10,12);//System.out.println(sum);%>

4 JSP****注释

<%--注释的内容--%>

附录

JSP三大指令

JSP的指令并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分

JSP指令的基本语法格式:

<%@ 指令 属性名="值"%>

1 include指令

include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。

语法:

<%@ include file="relativeURL"%>
其中的file属性用于指定被引入文件的相对路径。file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录,否则,表示相对于当前文件。

注意:

被引入的文件必须遵循JSP语法。

被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容。

由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(pageEncoding和导包除外)。

<%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"session="false"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>Inserttitle here</title><!--静态包含 引入需要包含的文件,将多个文件合并成一个文件,转换为一份java代码--><%@includefile="head.jsp"%></head><body>include用法</body></html>
<%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><link type="text/css"href="css/index.css"></link><script type="text/javascript"src="js/common.js"></script><script type="text/javascript"src="js/common2.js">
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 2:33:38

解决高版本Simulink中FFT分析结果无法导出的实用技巧

1. 高版本Simulink中FFT分析结果导出的痛点解析 最近在技术论坛上看到不少工程师吐槽&#xff1a;新版本Simulink的FFT分析工具界面居然取消了导出按钮&#xff01;这简直就像给你一把瑞士军刀却把最重要的螺丝刀功能给锁死了。我去年做电机控制系统调试时就遇到过这个坑&#…

作者头像 李华
网站建设 2026/4/15 23:05:34

android支付宝登录及支付介绍

Android接入支付宝登录及支付是指**在Android应用中集成支付宝的SDK**,实现用户可以使用支付宝账号登录(授权)并在应用内调用支付宝付款。 接入步骤:准备工作 → 集成SDK → 实现登录(授权)→ 实现支付 → 常见问题与安全建议,所有代码示例以Kotlin + Android Studio为准…

作者头像 李华
网站建设 2026/4/17 19:14:02

【计算机视觉入门精讲】第一站:图像处理与视觉基础

1. 图像的本质&#xff1a;从数学函数到像素矩阵 第一次接触计算机视觉时&#xff0c;最让我震撼的发现是&#xff1a;原来照片就是个数学函数。想象你面前有张黑白老照片&#xff0c;每个位置(x,y)的颜色深浅&#xff0c;其实就是一个函数值f(x,y)。这个函数把二维坐标映射到亮…

作者头像 李华
网站建设 2026/4/18 1:25:07

大模型API响应延迟突增500ms?揭秘AI原生系统压测中92%团队忽略的4层依赖黑洞(流量染色×语义压测×混沌注入)

第一章&#xff1a;AI原生软件研发全链路压测方案 2026奇点智能技术大会(https://ml-summit.org) AI原生软件的压测已无法沿用传统微服务架构的单点性能验证逻辑。其核心挑战在于模型推理延迟、向量检索抖动、RAG流水线状态耦合、LLM输出非确定性以及多模态输入负载分布不均等…

作者头像 李华
网站建设 2026/4/17 2:01:34

Zigbee技术赋能智慧农场:从环境感知到精准控制的实践解析

1. Zigbee技术如何让农田变"聪明" 第一次在农场部署Zigbee网络时&#xff0c;我被眼前的场景震撼到了&#xff1a;几十个火柴盒大小的传感器散布在田间&#xff0c;像给农作物装上了"神经末梢"。这些不起眼的小设备&#xff0c;正在实时采集土壤温湿度、光…

作者头像 李华