JSP规范
1:JSP规范介绍
1):来自于JavaEE规范中的一种。
2):JSP规范制定了如何开发JSP文件代替响应对象将处理结果写入到响应体的开发流程。
3):JSP规范制定了Http服务器应该如何调用管理JSP文件。
2:响应对象存在的弊端
1):适合将数据量较少的处理结果写入到响应体
2):如果处理结果数量过多,使用响应对象增加开发难度
3:JSP文件的优势
1):JSP文件在互联网通信过程中,是响应对象替代品
2):降低将处理结果写入到响应体的开发工作量,降低处理结果维护难度
3):在JSP文件开发时,可以直接将结果写入到JSP文件不需要手写out.print命令,在Http服务器调用JSP文件时,根据JSP规范要求自动将JSP文件书写的所有内容通过输出流写入到响应体。
4:JSP文件运行原理【Http服务器调用JSP文件步骤】:
1:运行原理:
1:Http服务器将JSP文件内容【编辑】为一个Servlet接口实现类(.java)。
2:Http服务器将Servlet接口实现类【编译】为class文件(.class)。
3:Http服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象。
4:Http服务器通过Servlet实例对象调用_jspService方法,将JSP文件内容写入到响应体。
2:Http服务器【编辑】与 【编译】JSP文件位置
标准答案:在【work】文件夹下可以找到
5:JSP-EL工具包介绍:
1):由Java技术开发的一个jar包
2):作用降低JSP文件开发时Java命令开发强度
3):Tomcat服务器本身自带了EL工具包(Tomcat安装地址/lib/el-api.jar)
6:EL表达式
1):命令格式:${作用域对象别名.共享数据}
2):命令作用:
1):EL表达式是EL工具包提供的一种命令格式【表达式命令格式】
2):EL表达式在JSP文件上使用
3):负责在JSP文件上从作用域对象中读取指定的共享数据并输出到响应体
7:EL表达式_作用域对象别名
1:JSP文件可以使用的作用域对象
1):ServletContext application:全局作用域对象
2):HttpSession Session:会话作用域对象
3):HttpServletRequest request:请求作用域对象
4):PageContext pageContext:当前页作用域对象,只能出现JSP文件中。JSP文件中独有的作用域对象。Servlet中不存在。
在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用,不能共享给其他Servlet或者其他的JSP文件。
真实开发过程中,主要用于JSTL标签与JSP文件之间数据共享。
JSTL----->pageContext----->JSP
2:EL表达式提供作用域对象别名
JSP EL表达式
application ${applicationScope.共享数据名}
session ${sessionScope.共享数据名}
request ${requestScope.共享数据名}
pageContext ${pageScope.共享数据名}
8:EL表达式将引用对象属性写入到响应体
1:命令格式:${作用域对象别名.共享数据名.属性名}
2:命令作用:从作用域对象读取指定共享数据关联的引用对象的属性值。并自动将属性的结果写入到响应体。
3:属性名:一定要与引用类型的属性名完全一致。
4:EL表达式没有提供遍历集合方法,因此无法从作用域对象读取集合中的内容。
9:EL表达式简化版
1: 命令格式:${共享数据名称}
**2:命令作用:**EL表达式允许开发人员开发时省略作用域对象别名。
3:工作原理:
EL表达式简化版由于没有指定作用域对象,所以在执行时采用【猜】算法
4:会导致数据定位错误
容易降低程序执行速度
5:应用场景:
设计目的:就是简化从pageContext(当前页作用域对象)中读取共享数据并降低输出难度。
6:EL表达式尽管存在这很多隐患,但是实际开发过程中,开发人员为了节省时间,一般使用简化版。
10:EL表达式—>支持运算表达式
1:前提:在JSP文件中有时需要将读取共享数据进行运算之后,将运算结果写入到响应体
2:运算表达式
1):数学运算
2):关系运算:> >= == < <= !=
gt ge eq lt le !=
3):逻辑运算:&& || !
11:EL表达式提供内置对象
1:命令格式:${param.请求参数名}
**2:命令作用:**通过请求对象读取当前请求包中请求参数内容,并将请求参数内容写入到响应体。
3:替代命令:
<%
String userName = request.getParameter(“userName”);
%>
<%=userName%>
1:命令格式:${paramValues.请求参数名[下标]}
2:命令作用:如果浏览器发送的请求参数是一个请求参数关联多个值,此时可以通过paramValues读取请求参数下指定位置的值,并写入响应体。
3:代替命令:
http://localhost:8080/myWeb/index_1.jsp?userName=mike&userName=jake&userName=lili
此时userName请求参数在请求包以数组形式存在
<%
String array[] = request.getParameterValues(“userName”);
%>
第一个值:<%=array[0]%>
第二个值:<%=array[1]%>
12:EL表达式常见异常:
javax.el.PropertyNotFoundException:在对象中没有找到指定的属性