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

第五章 JSP

一、概述

‌JSP(Java Server Pages)‌是一种动态网页技术标准,它的本质是个Servlet,JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其他Java程序共同处理复杂的业务需求。JSP将Java代码和特定变动内容嵌入到静态页面中,实现以静态页面为模板,动态生成其中的部分内容。

二、原理 

JSP的工作原理基于Web服务器接收到客户端请求时,服务器会将JSP文件翻译为Java代码,并编译成Servlet。Servlet根据客户端请求生成HTML页面,然后将其返回给客户端浏览器。

我们idea中创建的jsp编译运行后,在以下路径中会生成一个java和class文件(我本地是Mac OS系统,具体以个人操作系统环境和idea安装环境情况为准)

/Users/wangzhexiao/Library/Caches/JetBrains/IntelliJIdea2022.3/tomcat/50cc2748-c71b-48ed-af00-6e1432e46097/work/Catalina/localhost/S02/org/apache/jsp

其中work是tomcat服务器的工作目录。

 通过上述代码我们可以查看到,JSP的本质是继承了HttpServlet。

三、JSP内置对象

final javax.servlet.jsp.PageContext pageContext; // 页面上下文

javax.servlet.http.HttpSession session = null; // session

final javax.servlet.ServletContext application; // 应用上下文

final javax.servlet.ServletConfig config; // 配置

javax.servlet.jsp.JspWriter out = null; // out

final java.lang.Object page = this; // page

HttpServletRequest request     // 请求

HttpServletResponse response  // 响应

以下是输出页面前增加的代码:

response.setContentType("text/html;charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
         null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;

以上对象可以在JSP页面中直接使用。

四、JSP基本语法和指令

4.1. JSP变量和表达式

<%= %> 用于将程序的输出,输出到客户端

4.2. JSP脚本片段 

4.3. JSP脚本声明 

脚本声明会被编译到JSP生成java的类中!除脚本声明之外的(表达式/脚本片段)就会被生成到-jspService方法中。

4.4. 指令 

1. include

一个JSP引入另一个JSP页面

2. page  

经常需要对页面的某些特性进行描述,例如,页面的编码方式, JSP 页面采用的语言等,这时,可以通过 page 指令来实现。其中errorPage可以指定页面报错跳转页面

5.5. JSP内置对象

PageContext

Request

Response

Session

Application

config

out

page

exception

pageContext.forward会携带本页面的request参数到下一个转发的页面。

 

5.6. JSP标签 

 

5.7. JSTL标签 

JSTL标签库的使用是为了弥补HTML标签的不足,它自定义了许多标签可以供我们使用,标签的功能和Java代码一样。

核心标签(掌握部分)

格式化标签

SQL标签

XML标签

 

 5.8. MVC三层架构

模型层包含以下几块内容:

  1. 数据持久化层:Dao,专注于数据库层面的增删改查
  2. 业务逻辑层:专注于业务逻辑的实现
  3. JDBC:规范化的访问数据库的应用程序接口
  4. JavaBean

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 芯片开发(1)---BQ76905---底层参数配置
  • SpringBoot 消息队列RabbitMQ 消息可靠性 数据持久化 与 LazyQueue
  • python qt5 常用
  • Why is OpenAI image generation Api returning 400 bad request in Unity?
  • 【CPU】CPU的物理核、逻辑核、超线程判断及L1、L2、L3缓存、CacheLine和CPU的TBL说明
  • Windows上创建批处理.bat文件并且注册为开机自启(Python-web微服务)
  • Vue3与Flask后端Demo
  • VisualPromptGFSS
  • 如何使用ssm实现基于Web的数字家庭网站设计与实现+vue
  • nano 命令:文本编辑器
  • mysql默认隔离级别为什么要设置为RC?
  • 前端实用工具(二):编程规范化解决方案
  • 【数据结构与算法 | 灵神题单 | 自底向上DFS篇】力扣508, 1026, 951
  • 毕业设计选题:基于ssm+vue+uniapp的智能停车场管理系统小程序
  • 字符函数和字符串函数(上)
  • 【译】JS基础算法脚本:字符串结尾
  • 2017届校招提前批面试回顾
  • java多线程
  • LeetCode18.四数之和 JavaScript
  • mongodb--安装和初步使用教程
  • Redis 中的布隆过滤器
  • 工程优化暨babel升级小记
  • 后端_MYSQL
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用API自动生成工具优化前端工作流
  • 项目管理碎碎念系列之一:干系人管理
  • kubernetes资源对象--ingress
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云移动端播放器高级功能介绍
  • 组复制官方翻译九、Group Replication Technical Details
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​TypeScript都不会用,也敢说会前端?
  • !!java web学习笔记(一到五)
  • # Redis 入门到精通(七)-- redis 删除策略
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #、%和$符号在OGNL表达式中经常出现
  • $NOIp2018$劝退记
  • (k8s)kubernetes 部署Promehteus学习之路
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (接口封装)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (一)Dubbo快速入门、介绍、使用
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)VirtualBox安装增强功能
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET 8 跨平台高性能边缘采集网关
  • .net Application的目录
  • .net core 控制台应用程序读取配置文件app.config
  • .NET面试题(二)
  • .Net实现SCrypt Hash加密
  • @Repository 注解
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配