JSP技术
JSP全名为Java Server Pages,它是建立在Servlet规范上的动态页面开发技术。在JSP文件中,HTML文件与Java代码同存,其中,HTML代码用来实现页面中的静态内容显示,Java代码显示网页中动态内容。为了与传统Html页面区分,JSP文件的扩展名为.jsp。
JSP运行原理
JSP原理图
JSP脚本元素
三种类型:
- JSP Scriptlets
<% java代码 (变量、方法、表达式等)%> - JSP声明语句(用于声明全局变量)
<%!
定义的变量或方法等
%>- JSP表达式(用于将程序数据输出到客户端)
<%= expression %>
- JSP表达式(用于将程序数据输出到客户端)
- JSP注释
<%-- 注释信息 -->
JSP指令
page指令
<%@ page 属性名1=“属性值1” 属性名2=“属性值2”…%>
include指令
<%@ include file=“被包含的文件地址”%>
一个应用以上两个指令的例子
header.html
<%@ page language="java" contentType="text/html;charset=utf-8"
pageEncoding="UTF-8"%>
<hr>
<meta charset="UTF-8">
<center>
<h1><font size="+3" color="red">新世纪</font>
<font size="+3" color="purple">网上书店</font></h1>
</center>
<hr>
footer.jsp
<hr>
<center><em>
Copyright ©2008 New Century Web Bookstore, Inc.</center>
</em></center>
main.jsp
<%@ page language="java" contentType="text/html;charset=utf-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>New Century Web BookStore</title>
</head>
<body bgcolor="#FFFFFF">
<%@ include file="header.html" %>
<table border=0 cellspacing=5 cellpadding=5 width="100%">
<tr><td>
<p align="center"><b>欢迎光临新世纪网上书店!</b></p>
</td></tr>
<tr><td>
<p align="center"><b><a href="/bookstore">开始购买图书吧!</a></b>
</td></tr>
</table>
<%@ include file="footer.jsp" %>
</body>
</html>
</body>
</html>
运行图
提到include指令,这里有一个知识点,敲黑板~
辨别include指令和jsp:include动作元素的异同:
include指令:静态包含;即在生成Servet类时已经融合在一起;
jsp:include动作元素:动态包含;即在程序运行时将被包含加进来;
则上面的main.jsp等价于:
<%@ page language="java" contentType="text/html;charset=utf-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>New Century Web BookStore</title>
</head>
<body bgcolor="#FFFFFF">
<%-- <%@ include file="header.html" %> --%>
<jsp:include page="header.html" flush="true" />
<table border=0 cellspacing=5 cellpadding=5 width="100%">
<tr><td>
<p align="center"><b>欢迎光临新世纪网上书店!</b></p>
</td></tr>
<tr><td>
<p align="center"><b><a href="/bookstore">开始购买图书吧!</a></b>
</td></tr>
</table>
<jsp:include page="footer.jsp" />
<%-- <%@ include file="footer.jsp" %> --%>
</body>
</html>
</body>
</html>
JSP隐式对象
在JSP页面中,有一些对象需要频繁使用,为了简化Web应用程序开发,JSP2.0提供了9个隐式(内置)对象,它们是默认创建的,可以直接在JSP页面中使用。
在这里就不得不提一提我们javaweb中的四大容器
application作用域:所有作用域中范围最大的域,由于所有servlet共享一个servletcontext对象,所有多个servlet通过servletcontext可以实现数据在不同servlet之间的共享,是一个全局变量
httpsession作用域: 范围第二大的域,(会话范围)在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session。如果没有,就在内存中创建一个session并返回。当一短时间内(默认30分钟)session没有被使用,则服务器会销毁该session。若服务器非正常关闭,未到期的session也会跟着销毁。若调用session提供的invalidate()方法,可以立即销毁session。
servletRequest作用域: 范围第三大的域,在整个请求链中共享数据,最长用于在servlet中处理好的数据交给jsp显示,此时参数就可以放置在servletRequest域中带过去
PageContext作用域: 范围最小的一个域,可以获取其他八大内置对象,可以认为是一个入口对象,能够获取其他所有域中的数据。能跳转到其他资源,其身上提供forward和sendRedirect方法,简化了转发和重定向的操作,代表页面上下文,该对象主要用于访问jsp之间的共享数据,当对jsp的请求时开始,当响应结束时销毁