JSP
一.简介
JSP全名(Java Server Pages),是建立在Servlet规范之上的动态网页开发技术.在JSP文件中HTML代码与Java代码共存,html用来显示静态内容,
java代码用来显示动态内容,扩展名为.jsp.
具有如下几点特征:
跨平台/业务代码相分离/组件重用/预编译
二.原理
1.用户通过浏览器输入URL,浏览器将HTTP协议的请求部分发送至服务端;
2.服务端获取到HTTP协议的请求部分,分析本次请求的是什么资源,发现后缀为.jsp,按照内部约定规则,将JSP转换为一个SERVLET.JAVA文件;
(PS:转换规则:在SERVLET中,碰到JSP页面中的HTML标签,通过输出流将HTML部分输出到浏览器中,如果碰到JAVA代码,将这些JAVA代码段复制到Service内部)
3.tomcat将转换后的.java文件编译为.class文件;
4.tomcat按照SERVLET的字节码识别.class文件,调用.class字节码中无参构造函数创建对象,调用init方法,service方法等;
三.脚本段(3个)
1.<% %>:放普通的java代码(变量/方法/语句等)
2.<%! %>:JSP声明语句,声明变量和方法
3.<%= %>:JSP表达式,将程序数据输出到客户端
四.注释(5个)
<%-- JSP注释信息 -->
<!-- HTML的注释为-->
<%
//java的注释1
/*java的注释2*/
/**java的注释3*/
%>
注:优先使用jsp注释,因为效率高,转换为SERVLET的时候,无需处理
五.指令(3个)
格式:
<%@ 指令名称 属性名1="属性值1" 属性名2="属性值2"> 多个属性值间空格隔开
指令:
page:告诉jsp引擎如何将当前jsp转换为SERVLET;
include:包含其它文件;
taglib:引入其它的标签库;
(PS:引擎:tomcat内部内置的负责将jsp转换为servlet代码,以及将servlet编译为字节码的代码)
六.动态包含与静态包含的区别和联系
JSP中有两种包含:
静态包含:<%@include file="被包含页面" %>,
动态包含:<jsp:include page="被包含页面" flush="true">
两种包含的最终效果相同,但是实现过程不同.
1.静态包含中是指令元素;动态包含中是行为元素;
2.最终编译的java文件数目不同.静态包含在转换成为java文件时将被包含文件的内容"复制"到主体文件中,作为一个整体编译,最终形成一个java文件;动态包含是各个jsp文件分别转换,分别编译,最终形成多个java文件;
3.执行时间不同:静态包含发生在jsp-java文件阶段;动态包含发生在执行class文件阶段,动态加入;
4.静态包含在两个文件中不能有相同的变量,动态包含允许.因为静态包含相当于将被包含文件直接复制到主体文件中,如果出现相同的变理,就会出现覆盖等问题,导致文件出错.动态包含相当于调用不同的jsp,变量所在的空间不同,自然不会出现覆盖等现象.
5.无论是动态包含还是静态包含,其request对象都是相同的.动态包含的执行过程其之前是一个请求转发的过程,自然也使用同一个request对象.
七.内置对象(9个)
JSP页面中,有些对象需要频繁使用,如果每次都重新创建会非常麻烦,为了简化web应用程序的开发,jsp2.0规范提供了9个内置对象,它们是jsp默认创建的,可以直接在jsp页面中使用:
out:用于页面输出;
request:得到用户请求信息;
response:服务器向客户端的回应消息;
config:服务器配置,可以取得初始化参数;
session:用来保存用户的信息;
application:所有用户的共享信息;
page:指当前页面转换后的servlet类的实例;
pageContext:jsp的页面窗口;
exception:表示jsp页面所发生的异常,在错误页中才起作用;
八.域对象(4个)???
web运行过程产生的数据,希望将这些数据保存到不同的范围,因此有了域对象的概念.
PageScope:当前页面有效,作用域名称为pageContext;
RequestScope:一次请求范围内有效,作用域名称request;
SessionScope:一次会话范围内有效,作用域名称session;
ApplicationScope:一个web应用内有效,即可以整个web项目共享,作用域名称为application;
九.动作
jsp动作元素用来控制jsp的行为,执行一些常用的jsp页面动作.通过动作元素可以实现多行java代码能够实现的效果,如包含页面文件,实现请求转发等
<jsp:include>/<jsp:forward>