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

大学复古技术之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">
http://www.jsqmd.com/news/624338/

相关文章:

  • GoB插件:解决Blender与ZBrush模型传输挑战的高效集成方案
  • AI原生链路追踪系统搭建避坑清单(含21个生产环境真实踩坑案例、13条SLO定义红线、7项GDPR合规埋点禁忌)
  • 3分钟掌握IndexTTS2:打造情感可控的智能语音合成新纪元
  • QWT3D实战:从源码编译到三维航迹动态绘制的完整指南
  • 认证注意点
  • 电气设计新手必看:如何用需要系数法快速计算总负荷(附Excel模板)
  • 3步掌握Silk音频转换:让微信QQ语音真正通用
  • SE-0526激光雷达避障传感器与西门子S7-1200 PLC联机实战(附接线图)
  • Node.js实战:构建高效的多平台文章自动发布系统
  • 利用MODBUS转ETHERNET IP网关实现变送器与AB PLC的高效数据交互
  • 微信小程序导航栏颜色动态切换实战:从入门到精通(附完整代码)
  • Ubuntu20.04挂载ext4格式硬盘的完整指南:从fdisk到chown一步不落
  • Pulover‘s Macro Creator:零代码实现电脑自动化的免费脚本录制工具完全指南
  • 聊一聊 C# 中的闭包陷阱:foreach 循环的坑你还记得吗?诖
  • C# 五子棋小游戏源码(人机对战)
  • 代码随想录一刷记录Day24——leetcode93.复原IP地址 78.子集 90.子集II
  • 【大模型工程化安全红线】:20年AI架构师亲授3大对齐失效场景与实时防御框架
  • 网盘直链下载助手终极指南:告别限速,一键获取真实下载地址
  • IronyModManager:如何用高效模组管理工具解决Paradox游戏90%的冲突问题
  • 诱江南在洛阳的江浙菜商务宴请口碑如何,定制宴席靠谱吗? - 精选优质企业推荐榜
  • RAG的完整链路拆解:从文档切片到向量检索到LLM回答
  • 大模型服务SLA从“尽力而为”到“金融级保障”的7步改造,含OpenTelemetry+Prometheus定制监控模板
  • 2026届最火的AI科研神器实际效果
  • 终极指南:得意黑Smiley Sans字体的深度应用与性能优化
  • OrCAD原理图打印终极指南:Instance和Occurrence模式选择对PDF标签的影响
  • Qt6.9连接MySQL踩坑记:手把手教你编译MinGW驱动插件(附源码下载与路径配置)
  • 学习安装java环境的过程及教程
  • 边走边聊 Python 3.8:Chapter 5:面向对象:把生活里的“东西”变成类
  • YOLOv13实战体验:城市交通、工业质检多场景检测效果全解析
  • 基于YOLOv5的交通信号灯检测系统设计 - 小白也能看懂的项目运行完整指南