什么是JSP?
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
JSP(Java Server Pages)是指:
-
在HTML中嵌入Java脚本代码
-
由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码
-
然后生成的整个页面信息返回给客户端
JSP原理:
浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet。
JSP页面中的java代码服务器是如何执行的?
在jsp中编写的java代码会被翻译到_jspService方法中去,当执行_jspService方法处理请求时,就会执行在jsp编写的java代码了,所以Jsp页面中的java代码服务器是通过调用_jspService方法处理请求时执行的。
Web服务器在调用jsp时,会给jsp提供一些什么java对象?
查看_jspService方法可以看到,Web服务器在调用jsp时,会给Jsp提供如下的8个java对象:
- PageContext pageContext;
- HttpSession session;
- ServletContext application;
- ServletConfig config;
- JspWriter out;
- Object page = this;
- HttpServletRequest request,
- HttpServletResponse response
JSP执行过程
Web容器处理JSP文件请求需要经过3个阶段:
- 翻译阶段
- 编译阶段
- 执行阶段
JSP页面的元素包括:
- 静态内容:HTML静态文本
- 指令:以<%@ 开始,以%> 结束。 导包,导库,导入其他文件。 比如<%@ include file=” ” %>
-
表达式:<% = Java表达式 %> (页面上显示的信息)
-
小脚本:<% Java代码 %> (嵌入Java代码,声明变量等)
-
声明:<% ! 方法%> (定义方法,声明方法,在其他地方引用或调用)
- 注释:<%– 注释,但客户端不能查看到 –%>
JSP模版元素
JSP页面中的HTML内容称之为JSP模版元素。
JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。
JSP脚本片段:
JSP脚本片断(scriptlet)用于在JSP页面中编写多行Java代码
<%
多行java代码
%>
在<% %>中可以定义变量、编写语句,不能定义方法。
- 1
- 2
- 3
- 4
JSP指令:
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP 2.0规范中共定义了三个指令:
- page指令
- Include指令
- taglib指令
JSP指令的基本语法格式:<%@ 指令 属性名=”值” %>
什么是Page指令?
Page指令:(设置脚本语言,导包,编码格式)
- 通过设置内部的多个属性来定义整个页面的属性。
语法:<%@ page 属性1 = “属性值”,属性2 = “属性值” %>
Page指令常用属性:
-
Language:指定JSP页面使用的脚本语言。 默认:Java。
-
import:通过该属性来引用脚本语言中使用到的类文件。 默认值:无。
-
pageEncoding:用来指定JSP页面所采用的编码方式。
page指令的import属性
在Jsp页面中,Jsp引擎会自动导入下面的包
- java.lang.*
- javax.servlet.*
- javax.servlet.jsp.*
- javax.servlet.http.*
可以在一条page指令的import属性中引入多个类或包,其中的每个包或类之间使用逗号(,)分隔。
<%@ page import="java.util.*,java.io.*,java.sql.*"%>
- 1
或者:
<%@ page import="java.util.Date"%>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
- 1
- 2
- 3
page指令的include指令
在JSP中对于包含有两种语句形式:
- @include指令
- <jsp:include>指令
@include可以包含任意的文件,当然,只是把文件的内容包含进来。
include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
语法:<%@ include file=”relativeURL”%>,其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。
include指令细节注意问题:
-
被引入的文件必须遵循JSP语法。
-
被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments(片段))作为静态引入文件的扩展名。
-
由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。
总结@include指令:
使用@include可以包含任意的内容,文件的后缀是什么都无所谓。这种把别的文件内容包含到自身页面的@include语句就叫作静态包含,作用只是把别的页面内容包含进来,属于静态包含。
JSP中的注释
作用:
合理、详细的注释有利于代码后期的维护和阅读。
注释类别:
在JSP文件的编写过程中,共有三种注释方法:
HTML注释:<!– html 注释 –> 缺点:不安全,加大网络传输负担。
JSP注释:<%– JSP 注释 –%> 前台不显示,减轻了网络传输负担。