JSP规范
1. JSP规范介绍
- 来源于JavaEE规范中一种
- JSP规范制定了如何开发JSP文件代替响应对象将处理结果写入到响应体的开发流程
- JSP规范制定了Http服务器应该如何调用管理JSP文件
- 优势:
- JSP文件在互联网通信过程,是响应对象的替代品
- 降低将处理结果写入到响应体的开发工作量同时降低处理结果的维护难度
- 在JSP文件开发时,可以直接将处理结果写入到JJSP文件而不需要手写
out.print 命令,在Http服务器调用JSP文件时,根据JSP规范要求自动的将JSP文件书写的所有内容通过输出流写入到响应体中。
2. 响应对象存在的弊端
- 适合将数据量较少的处理结果写入到响应体中
- 如果处理结果数量过多,使用响应对象增加开发难度
3. JSP文件内置对象request
4. JSP文件内置对象session
5. JSP文件内置对象application
6. Servlet跟JSP的联合调用
-
Servlet跟JSP分工:
- Servlet:负责处理业务并得到处理结果——大厨
- JSP:不负责业务处理,主要任务将Servlet中处理结果写入到响应体——传菜员
-
Servlet跟JSP之间的调用关系
- Servlet工作完毕之后,一般通过请求转发方式向Tomcat申请调用JSP
-
Servlet与JSP之间如何实现数据共享
- Servlet将处理结果添加到[请求作用域对象]
- JSP文件在运行时从[请求作用域对象]得到处理结果
-
栗子:
-
OneServlet处理业务,模拟得到处理结果 public class OneServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Student s1 = new Student(10, "mike");
Student s2 = new Student(20, "alien");
List stuList = new ArrayList();
stuList.add(s1);
stuList.add(s2);
request.setAttribute("key", stuList);
request.getRequestDispatcher("/user_show.jsp").forward(request, response);
}
}
-
user_show.jsp负责将处理结果写入到响应体中 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
// 从请求作用域对象得到OneServlet添加进去的集合
List<Student> stuList = (List) request.getAttribute("key");
%>
<%--将处理结果写到响应体中--%>
<table border="2" align="center">
<tr>
<th>用户编号</th>
<th>用户姓名</th>
</tr>
<%
for (Student stu:stuList){
%>
<tr>
<td><%=stu.getSid()%></td>
<td><%=stu.getSname()%></td>
</tr>
<%
}
%>
</table>
7. JSP文件运行原理
-
Http服务器调用JSP文件步骤:
- Http服务器将JSP文件内容编辑为一个Servlet接口实现类(.java)
- Http服务器将Servlet接口实现类编译为class文件(.class)
- Http服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象
- Http服务器通过对这个Servlet实例对象调用它的_jspService方法,将jsp文件内容写入到响应体中
-
Http服务器编辑与编译JSP文件的位置:[work]文件夹下
8. EL技术
琐碎知识
- jsp文件在执行的时候,自动地将文件所有内容写入到响应体中,从而节省书写out.print。
- 在JSP文件中直接书写Java命令(在执行标记
<%....内容..%> 中写Java命令),是不能被JSP文件识别,此时只会被当作字符串写入到响应体。 - 在JSP文件中,通过输出标记
<%=变量名%> ,通知JSP将Java变量的值写入到响应体中。 - 在JSP文件夹中,所有的执行标记当作一个整体。
- JSTL可以有效弥补EL表达式没法遍历集合的缺陷。
- MySQL中随机查询的功能
select * from table order by rand()
- 单纯
select rand() 返回的是0—1之间的小数 - 该随机查询功能是MySQL特有的,像Oracle等都没有。
|