JSP学习笔记
什么是JSP
JSP:Java Server Pages:Java服务器端页面,也和Servlet一样,用于动态Web技术。
最大的特点:
就像是在写HTML
HTML和JSP的区别:
1)HTML只给用户提供静态的数据
2)JSP页面中可以嵌入JAVA代码,为用户提供动态数据。
JSP原理
浏览器向服务器发送请求,无论访问什么资源,其实都是在访问Servlet
JSP最终也会转换成一个Java类
JSP本质上就是一个Servlet。
JSP里面书写Java的命令格式
<%%>的使用规则
<%
//在jsp中,只有书写在执行标记内容中才会被当做Java命令
//可以在此声明Java变量
int num=100;
//声明运行表达式:数学运算,关系运算,逻辑运算
//声明控制语句(if---else、for循环)
%>
<%=变量值%>在响应体中输出变量值的语句格式
<%
int num1=100;
int num2=200;
%>
变量num1的值:<%=num1%><br/>
//也可以输出运算结果
num1+num2=<%=num1+num2%>
JSP文件内置对象
request
类型:HttpServletRequest
类型:在JSP文件运行时读取请求包信息,与Servlet在请求转发过程中实现数据共享。
session
类型:HttpSession
作用:JSP文件在运行时,可以session指向当前用户私人储物柜,添加共享数据,或者读取共享数据。
全局作用域对象
JSP文件内置对象:Application
ServletContext Application:全局作用域对象
同一个网站中Servlet与JSP,都可以通过当前网站的全局作用域对象实现数据共享。
Servlet与JSP
Servlet与JSP的分工:
Servlet:负责处理业务并得到处理结果
JSP: 不负责处理业务,主要任务将Servlet中处理结果写入到响应体中。
Servlet与JSP之间的调用关系
Servlet工作完毕后,一般通过请求转发方式向Tomcat申请调用JSP
Servlet与JSP之间实现数据共享的方式
Servlet将处理结果添加到【请求作用域对象】
JSP文件在运行时从【请求作用域对象】得到处理结果
Http服务器调用JSP文件步骤
1.Http服务器将JSP文件内容编辑为一个Servlet接口实现类(.java)
2.Http服务器将Servlet接口实现类编译为class文件
3.Http服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象
4.Http服务器通过Servlet实例对象调用_jspService方法,将jsp文件内容写入到响应体。
EL表达式
EL表达式:
1.命令格式:${作用域对象别名.共享数据}
2.命令作用:
1)EL表达式是EL工具包提供一种特殊命令格式【表达式命令格式】
2)EL表达式在JSP文件上使用
3)负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体
3.EL表达式---作用域对象别名
1) 全局作用域对象:ServletContext 固定名称:Application
2)会话作用域对象: HttpSession 固定名称:session
3)请求作用域对象: HttpServletRequest 固定名称:request
4)当前页作用域对象:pageContext 固定名称:pageContext
pageContext是JSP文件独有的作用域对象,Servlet中不存在。在当前作用域对象存放的共享数据仅能在当前JSP文件中使用,不能共享给其他Servlet或者其他JSP文件,真实开发过程中,主要用于JSTL标签与JSP文件之间的数据共享。
3.EL表达式提供作用域对象别名
JSP EL表达式
Application ${applicationScope.共享数据名}
session ${sessionScope.共享数据名}
request ${requestScope.共享数据名}
pageContext ${pageScope.共享数据名}
三.EL表达式将引用对象属性写入到响应体
1.命令格式: ${作用域对象别名.共享数据名.属性名}
2.命令作用:从作用域对象读取指定共享数据关联的引用对象的属性值,并自动将属性的结果写入到响应体
3.属性名:一定要去引用类型属性名完全一致(大小写要一样)
4.EL表达式没有提供遍历集合方法,因此无法从作用域对象读取集合内容输出
四.EL表达式简化版
1.命令格式:${共享数据名}
2.命令作用:EL表达式允许开发人员开发室省略作用域对象别名。
3.工作原理:EL表达式监护版由于没有指定作用域对象,所以在执行时采用【猜】算法
首先到【pageContext】定位共享数据,如果存在直接读取输出并结束执行
如果在【pageContext】没有定位成功,则到【request】定位共享数据,如果存在直接读取输出并结束执行。
如果在【request】没有定位成功,则到【session】定位共享数据,如果存在直接读取输出并结束执行。
如果在【session】没有定位成功,则到【application】定位共享数据,如果存在直接读取输出并结束执行。
如果在【application】没有定位成功,则会返回null。
4.存在隐患:
容易降低程序执行速度。
容易导致数据定位错误
5.应用场景:
设计目的就是简化从pageContext读取共享数据并输出的难度。
6.EL表达式简化版尽管存在很多隐患,但是在世纪开发过程中,开发人员为了节省时间,一般都是用简化版,拒绝使用标准版
五.EL表达式------支持运算表达式
1.前提:在JSP文件有时需要将读取共享数据进行一番运算后,将运算结果写入到响应体
2.运算表达式:
1)数学运算
2)关系运算:> >= == < <= !=
gt ge eq lt le != (和上面的符号相对应,一样)
3)逻辑运算: && || !
六.EL表达式提供内置对象
1.命令格式:${param.请求参数名}
2.命令作用:从通过请求对象读取当前请求包中请求参数内容,并将请求参数内容写入到响应体。
3.代替命令:index.jsp
在地址栏中输入请求:http://localhost:8080/myweb/index_1.jsp?username=mike&password=123
在jsp文件中输入:${param.username}
${param.password}即可
相当于:
<%
String username=request.getParameter("username");
String password=request.getParameter("password");
%>
<%=username%>
<%=password%>
1.命令格式:&{paramValues.请求参数名[下标]}
2.命令作用:如果浏览器发送的请求参数是【一个请求参数关联多个值】此时可以通过paramValues读取请求参数下指定位置的值,并写入到响应体。
3.代替命令:http://localhost:8080/myweb/index_2.jsp?pageN0=1&pageNo=2&pageNo=3
这个时候pageNo请求参数在请求包中以数组的形式存在
pageNo:[1,2,3]
<%
String array[] =request.getParameterValues("pageNo");
%>
第一个值:<%=array[0]%>
第二个值:<%=array[1]%>
第三个值:<%=array[2]%>
原文地址:https://www.cnblogs.com/jia-hao/p/15388950.html
- 一个实用的却被忽略的命名空间:Microsoft.VisualBasic
- Spring @RequestBody 传递 List/Map 参数
- win7怎么去除快捷方式的小箭头
- 零基础学编程015:画些有趣的图案
- Spring boot with Thymeleaf
- 零基础学编程014:小海龟做画
- Springboot @RequestBody 传递 List
- 零基础学编程013:import让你飞起来
- 【教程】利用Tensorflow目标检测API确定图像中目标的位置
- 零基础学编程012:画出复利曲线图
- OpenAI发布高度优化的GPU计算内核—块稀疏GPU内核
- SQL SERVER 原来还可以这样玩 FOR XML PATH
- 零基础学编程011:复利数据表问题(总结)
- 一个小程序引发的思考
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于selenium及python实现下拉选项定位select
- PHP rmdir()函数的用法总结
- thinkphp5修改view到根目录实例方法
- openCV提取图像中的矩形区域
- PHP二维索引数组的遍历实例分析【2种方式】
- Selenium及python实现滚动操作多种方法
- PHP使用JPGRAPH制作圆柱图的方法详解
- PHP 实现超简单的SESSION与COOKIE登录验证功能示例
- PHP 图像处理与SESSION制作超简单验证码的方法示例
- 简述PHP7.4 新特性和废弃的功能
- laravel5.1框架下的批量赋值实现方法分析
- Laravel框架环境与配置操作实例分析
- 记Laravel调用Gin接口调用formData上传文件的实现方法
- Laravel框架视图和模型操作方法分析
- 接口测试框架实战(六) | 配置的数据驱动