1.首先我们要知道学习JSP只要掌握原理和过程,不需要记代码;
2.JSP是JavaEE中一个规范,学习JSP方便我们书写JSP文件,而JSP文件可以替代响应对象向响应包输入数据,避免了响应对象输入数据过少的问题;
3.在JSP中书写Java命令,不会被识别,我们需要写在执行标记中;<%.....%>
在JSP文件中通过输出标记将Java变量的值写入响应体;<%=num1+num2%>
在JSP文件中所有的执行标记当做一个整体;
4.JSP内置对象一:request 类型:HttpServletRequest 作用:在JSP文件运行时读取请求包信息,与Servlet在请求转发过程中实现数据共享
JSP内置对象二:session 类型:HttpSession 作用:JSP文件在运行时,可以session执行当前用户的私人储物柜,添加或者读取共享数据;
JSP内置对象三:application 类型:HttpServletContext 作用:数据共享
JSP内置对象四:Request 类型:HttpServletRequest
4.JSP与Servlet联合与分工:
1.Servlet:负责处理业务并得到处理结果-----大厨
JSP:不负责业务处理,主要任务是将Servlet中处理结果鞋写入到响应体;-----传菜员
2.JSP与Servlet之间调用关系:
Servlet工作完毕后,一般通过请求转发的方式向Tomcat申请调用JSP;
3.Servlet与JSP如何实现数据共享?
Servlet将处理结果添加到【请求作用域对象】
JSP文件在运行时从【请求作用域对象】得到处理结果
5.Http服务器调用JSP文件步骤:
1.http服务器将JSP文件内容【编辑】为一个Servlet接口实现类
2.http服务器将Servlet接口实现类【编译】为class文件
3.http服务器负责创建这个class的实例对象,也就是Servlet实例对象
4.http服务器通过Servlet实例队形调用【service】方法,将JSP文件内容写入到响应体;
注意:第一点关于编辑为Servlet接口实现类的原因:
Tomcat只能调用动态资源文件,也就是Servlet接口实现类;
在哪里可以证明呢?
在Tomcat文件夹下的work文件夹下的Catalina文件夹下的localhost
EL工具包
1.介绍:是由Java开发的jar包,它能降低JSP文件开发时Java命令开发强度,Tomcat服务器自带了EL工具包
2.JSP的作用:代替响应对象将doPost/doGet方法的执行结果写入到响应体;它的主要开发步骤是:
1.从指定作用域对象中得到处理结果
2.进行类型强转
3.将数据写入响应体
每个JSP文件大体都是这三步,因此,我们可以将这三步封装;在开发过程中,只要开发步骤超过三步,都认为是影响开发,都要进行封装
3.EL表达式
1.命令格式:${作用域对象别名.共享数据key}
2.命令作用:EL表达式是EL工具包提供的一种特殊命令格式,用于JSP文件,负责在JSP文件上从作用域对象中得到共享数据并输出到响应体;
2.JSP作用域别名:
1.ServletContext application 全局作用域对象
2.HttpSession session 会话作用域对象
3.HttpServletRequest request 请求作用域对象
4.PageContext pageContext 当前页作用域对象(JSP文件独有的作用域对象,在当前页作用域对象存放的共享数据只能在当前JSP使用,不能共享给其他的JSP或者Servlet使用,真实开发中,主要用于JSTL标签与JSP文件之间的数据共享)
3.EL表达式中的作用域别名:
1.ServletContext applicationScope
2.HttpSession sessionScope
3.HttpServletRequest requestScope
4.PageContext pageScope
4.EL表达式将引用对象属性写入响应体
1.命令格式:${作用域对象别名.共享数据名.属性名}
2.命令格式:从作用域对象读取指定共享数据关联的引用对象的属性值,自动将属性结果写入响应体
3.属性名;一定要与引用类型属性名一致;
4.EL表达式没有提供遍历集合的方法
5.EL表达式简化版
1.命令格式:${共享数据名}
2.命令作用;EL表达式允许开发人员开发时省略作用域对象别名
3.工作原理:EL表达式简化版由于没有指定作用域对象,所以在执行师采用【猜】算法,首先在【PageContext】定位,找着了就输出,没找着,就去【RequestScope】找,没找着,就去【sessionScope】找,没有就去【applicationScope】,还没找着,就返回null;
4.存在的隐患:
1.容易降低程序执行的速度
2.容易导致数据定位错误
5.应用场景:
1.设计目的是简化从PageContext读取数据并输出的难度
6.EL表达式简化版尽管存在很多隐患,在实际开发中,开发人员为了节省时间,喜欢用;
6.EL表达式----支持运算表达式
1.前提:在JSP文件有时候需要将读取共享数据
2.在EL表达式中运算:${"22"+requestScope.key4}<br/>
在EL表达式中运行逻辑运算:${key4>30?"yes":"no"}
7.EL表达式的内置对象(扩展了解)
1.命令格式:${param.请求参数名}
2.命令作用:通过请求对象读取当前请求包中的参数信息,并将请求参数内容写入响应体;
3.代码:发送请求;http://localhost:8080/myWeb/two?userName=xiaozhang&password=123
用户名:${param.userName}<br>
密码:${param.password}
1.${paramValues.请求参数名[下标]}
2.命令作用:如果浏览器发送的请求参数携带多个值,此时通过paramValues读取请求参数下指定值
3.发送请求:http://localhost:8080/myWeb/?useid=1&useid=2&useid=3
读取第二个值:.${paramValues.useid[1]