1. JSP概述
1.1 认识JSP
1.1.1 JSP简介
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
1.1.2 JSP入门案例
在jsp页面中输出当前时间
在WebContent目录下建立一个1.jsp,写入以下内容:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>jsp入门(输出时间)</title>
</head>
<body>
当前时间:
<%
Date date = new Date();
out.write(date.toLocaleString());
%>
</body>
</html>
在浏览器中地址栏输入:http://localhost:8080/day08/1.jsp,回车:
1.1.3 JSP原理简介
上面演示了一个JSP,现在思考几个问题:
1)Web服务器是如何调用并执行一个jsp页面的?
2)Jsp页面中的html排版标签是如何被发送到客户端的?
3)Jsp页面中的java代码服务器是如何执行的?
4)Web服务器在调用jsp时,会给jsp提供一些什么java对象?
回答:
1)首先我们要知道的是,在浏览器中访问Web应用中的任何资源,其实都是在访问一个Servlet,其实在访问1.jsp的时候,服务器会将1.jsp翻译成_1_jsp.java,我是用Eclipse建立的Web工程,我的_1_jsp.java的目录在“D:\eclipse\eclipse_work\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\work\Catalina\localhost\day08\org\apache\jsp”。
打开_1_jsp.java,发现它继承了org.apache.jasper.runtime.HttpJspBase类,这个类其实是HttpServlet的一个子类,所以_1_jsp其实是一个Servlet。
2)3)不管是html标签,还是java代码,其实都是在_1_jsp这个Servlet的_jspService()方法中使用调用了相关的代码。查看_1_jsp.java:
4)查看_1_jsp.java:
上面的都是可以直接使用的java对象,除此之外,还可以直接使用request和response。
1.1.4 JSP的最佳实践
不管是JSP还是Servlet,虽然都可以用于开发动态Web资源。但这由于这两门技术各自的特点,在长期的软件实践中,人们逐渐把Servlet作为Web应用中的控制组件来使用,而把JSP技术作为数据显示模板来使用。
其原因为,程序的数据通常需要美化后再输出:
1)让jsp既用java代码产生动态数据,又做美化导致页面难以维护。
2)让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。
3)因此最好的办法是根据这两门技术的特点,让它们各自负责各的,Servlet只负责响应请求产生数据,并把技术通过转发技术带给jsp,数据的显示由jsp来做。
2. JSP语法
2.1 JSP模板元素
JSP页面中的HTML内容称之为JSP模版元素。
JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。