一、原理
1、HttpServlet 是先由源代码编译为class 文件,然后部署到服务器下。先编译后部署。
2、JSP 是先部署源代码后编译为class文件的,先部署后编译。JSP 会在客户端第一次请求JSP 文件时被编译为HttpJspPage 类。该类会被服务器临时存放在服务器的工作目录中。
3、实例:客户端第一次请求 myFirst.jsp 时,Tomcat 先将myFirst.jsp 转化为标准的 Java 源代码 myFirst_jsp.java
,存放在 %Tomcat_Path%\work\Cataline\localhost\ %Java_Web% 目录下,并将 myFirst_jsp.java 编译为类文件 myFirst_jsp.class 。该 class 文件便是对应的 Servlet 。编译完毕后再运行class 文件来响应客户端请求。以后客户端访问 myFirst.jsp
时,服务器将不再重新编译 JSP 文件,而是兆字节调用 myFirst_jsp.class 文件。
二、语法
(一)脚本
1、<% %>:java代码块
2、<%=%>:输出
3、<%! %>:方法与全局变量
(二)指令(可以被JSP行为标签替代<jsp:directive>)
1、Page指令:指定该JSP页面的属性。
1)实例:
<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %> <%@ page import="java.util.Date"%>
2)常见属性:
2、include指令
1)实例:include.jsp 中包含 head.jsp 。
<%@include file="../common/jsp/head.jsp"%>
2)本质:
先包含,后编译。在被编译的 jsp 中已经包含被 include 的文件内容。即是把 head.jsp的源代码添加到了 include.jsp
中,然后编译成一个 class 文件,属于先包含后编译。
3、taglib指令:
1)实例:
<%@ taglib url="http://java.sun.com/jsp/jstl/core" prefix="c" %>
(三)Jsp行为
1、include行为:<jsp:include>
1)实例:include.jsp 中包含 head.jsp 。
<jsp:include page="/head.jsp" flush="true" ></jsp:include >
2)本质:
先运行后包含。运行时单独执行 head.jsp,然后把执行的结果包含到 include.jsp中,属于先运行后包含行为。在被编译的 include.jsp
中没有被包含的 head.jsp 文件的内容。
2、JavaBean行为:
1)定义 javaBean 对象:<jsp:useBean id="" class="" scope=""/>
2)获取 javaBean 属性:<jsp:getProperty name="" prperty="" />
3)设置 javaBean 属性:<jsp:setProperty name="" prperty="" value="" />
其中 name 为JavaBean 的名称,也就是useBean 行为的id 属性,property 为JavaBean属性,value 为属性值。
3、转发行为:<jsp:forward>
1)实例:
<jsp:forward page="/somapage.jsp"> <jsp:param name="param1" value="value1"> <jsp:param name="param2" value="value2"> </jsp:forward>
4、指令行为:<jsp:directive>相当于JSP指令。
1)实例:
<jsp:directive.page /> 行为相当于 <%@ page%>指令。
<jsp:directive.include />行为相当于 <%@ include%>指令。
<jsp:directive.taglib /> 行为相当于 <%@ taglib %>指令。