JSP文件中,只有在<% %>标记中的内容才会被当做Java命令 将变量的值写入响应体 <%=变量%>
Servlet和JSP的分工: Servlet:负责处理业务并得到处理结果 JSP:不负责处理业务,主要将Servlet中处理结果写到响应体
Servlet与JSP调用关系 Servlet工作完毕后,一般通过请求转发方式向Tomcat申请调用JSP
Servlet与JSP直接如何实现数据共享 Servlet将处理结果添加到“请求作用域对象中” JSP文件在运行时,从“请求作用域对象”得到处理结果
Http服务器调用JSP文件步骤(常考面试题) 第一步.Http服务器将JSP文件内容“编辑”为一个Servlet接口实现类 第二步.Http服务器将Servlet接口实现类“编译”为class文件 第三步.Http服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象 第四步.Http服务器通过Servlet实例对象调用_jspServive方法,将jsp文件内容写入到响应体中
EL工具包 由于Java技术开发的一个jar包 作用:降低JSP文件开发时Java命令开发强度 Tomcat服务器本身自带了EL工具包(Tomcat安装地址/lib/el-api.jar)
EL表达式 命令格式: ${作用域对象别名.共享数据} 命令作用: 1.El表达式是EL工具包提供的一种特殊命令格式【表达式命令格式】 2.EL表达式在JSP文件上使用 3.负责在JSP文件上从作用域对象中读取指定的共享数据,并输出到响应体内
EL表达式中作用域对象的别名 JSP文件中可以使用的作用域对象: ServletContext application:全局作用域对象 HttpSession session:会话作用域对象 HttpServletRequest request:请求作用域对象 PageContext pageContext:当前页作用域对象(这是JSP文件中独有的作用域对象,在Servlet中不存在。在当前页作用域对象中存放的共享数据仅能在当前JSP文件中使用)JSTL---->JSP EL表达式提供的作用域对象别名: application ${applicationScope.共享数据名} session ${sessionScope.共享数据名} request ${requestScope.共享数据名} pageContext ${pageScope.共享数据名} EL表达式没有提供遍历集合的方法,无法从作用域对象中读取集合内容输出
EL表达式简化版 命令格式: ${共享数据名} 命令作用: EL表达式允许开发人员开发时省略作用域对象别名 工作原理: 由于没有指定作用域对象,则会执行【猜】的算法 先到pageContext中定位共享数据 再到request中定位共享数据 再到session中定位共享数据 再到application中定位共享数据、 从小到大依次定位,找到就结束;如果都没有则返回null 存在隐患: 容易降低程序执行速度 容易导致数据定位错误 应用场景: 设计目的就是简化从pageContext读取共享数据的难度
EL表达式提供内置对象 命令格式: ${param.请求参数名} 命令作用: 通过请求对象读取当前请求包中请求参数内容,写入响应体
<body> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!-- http://localhost:8080/myWeb2/index_1.jsp?userName=mike&password=123 --> 来访者姓名:${param.userName} 来访者密码:${param.password} </body>命令格式: ${paramValues.请求参数名[下标]} 命令作用: 如果浏览器发送的请求参数是一个参数关联多个值,此时可以通过paramValues读取请求参数下制定位置的值,并写入响应体
<body> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!-- http://localhost:8080/myWeb2/index_2.jsp?detpNo=1&detpNo=2&detpNo=3 --> 第一个部门:${paramValues[0]}<br> 第二个部门:${paramValues[1]}<br> 第三个部门:${paramValues[2]} </body>