1.JSP是什么:
JSP(Java Server Pages )是Java服务器页面,是一种跨平台的动态网页技术标准,由Sun Microsystems公司倡导、多家公司参与建立。它在HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
2.JSP和Servlet在web应用中的角色:
把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。其原因为,程序的数据通常要美化后再输出: 1.让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。 2.让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。 因此最好的办法就是根据这两门技术的特点,让它们各自负责各的: 1.servlet只负责响应请求产生数据,并把数据通过转发(不能重定向)技术带给jsp 2.数据的显示jsp来做。
3.JSP运行原理
WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。网络服务器需要一个JSP引擎,也就是一个容器来处理JSP页面。容器负责截获对JSP页面的请求。Apache Tomcat使用内嵌JSP容器的来支持JSP开发。
4.执行过程:
JSP的执行过程主要可以分为以下几点: 1.客户端发出请求; 2.Web容器将JSP转译成Servlet源代码; 3.Web容器将产生的源代码进行编译; 4.Web容器加载编译后的.class文件; 5.执行.class文件; 6.把执行结果响应至客户端;
5.JSP语法:
脚本程序的语法格式:<% 代码片段 %> 脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。任何文本、HTML标签、JSP动作元素不能写在<% %>里面。JSP表达式
JSP表达式的语法格式:<%= 表达式 %> 一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。 由于表达式的值会被转化成String,所以可以在一个文本行中使用表达式而不用去管它是否是HTML标签。 表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。
JSP指令用来设置与整个JSP页面相关的属性。 JSP指令语法格式:<%@ directive attribute="value" %>
三种常用指令标签:
指令 | 描述 |
<%@ page ... %> | 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等 |
<%@ include ... %> | 包含其他文件 |
<%@ taglib ... %> | 引入标签库的定义,可以是自定义标签 |
JSP行为标签基本上是一些预先就定义好的函数,下表列出了一些可用的JSP行为标签:
语法 | 描述 |
jsp:include | 在页面被请求的时候引入一个文件。 |
jsp:useBean | 装载一个将在JSP页面中使用的JavaBean。 |
jsp:setProperty | 设置 JavaBean组件的值 |
jsp:getProperty | 输出某个JavaBean的属性。 |
jsp:forward | 从一个JSP文件向另一个文件传递一个包含用户请求的request对象 |
jsp:plugin | 用于在生成的HTML页面中包含Applet和JavaBean对象 |
jsp:element | 定义动态XML元素 |
jsp:attribute | 定义动态创建的XML元素的属性 |
jsp:body | 定义动态创建的XML元素的主体 |
jsp:text | 用于封装模板数据 |
JSP运算符 JSP支持所有Java逻辑和算术运算符。 下表罗列出了JSP常见运算符,优先级从高到底:
类别 | 操作符 | 结合性 |
后缀 | () [] . (点运算符) | 左到右 |
一元 | ++ - - ! ~ | 右到左 |
可乘性 | * / % | 左到右 |
可加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等/不等 | == != | 左到右 |
位与 | & | 左到右 |
位异或 | ^ | 左到右 |
位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | || | 左到右 |
条件判断 | ?: | 右到左 |
赋值 | = += -= *= /= %= >>= <<= &= ^= |= | 右到左 |
逗号 | , | 左到右 |
JSP 字面量 JSP语言定义了以下几个字面量: 布尔值(boolean):true 和 false; 整型(int):与 Java 中的一样; 浮点型(float):与 Java 中的一样; 字符串(string):以单引号或双引号开始和结束; Null:null。
6.JSP 隐式对象
JSP 隐式对象作用范围
request对象
request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。 request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。
response对象
response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。 response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。
session对象
session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。 session对象用来跟踪在各个客户端请求间的会话。
application对象
application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。 这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。 通过向application中添加属性,则所有组成web应用的JSP文件都能访问到这些属性。
out对象
out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。 最初的JspWriter类对象根据页面是否有缓存来进行不同的实例化操作。可以在page指令中使用buffered='false'属性来轻松关闭缓存。 JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter新增了一些专为处理缓存而设计的方法。还有就是,JspWriter类会抛出IOExceptions异常,而PrintWriter不会。
方法 | 描述 |
out.print(dataType dt) | 输出Type类型的值 |
out.println(dataType dt) | 输出Type类型的值然后换行 |
out.flush() | 刷新输出流 |
config对象
config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。 这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等,它不是很重要,所以不常用. 以下是config对象的使用方法: config.getServletName() : 返回包含在<servlet-name>元素中的servlet名字 config.getParameter(key) : 返回web.xml中配置的key对应的初始化参数
pageContext 对象
pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。 这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。 这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。 pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。 PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。 其中一个重要的方法就是removeArribute(),它可接受一个或两个参数。比如: pageContext.removeArribute("attrName")移除四个scope中相关属性 , 但是下面这种方法只移除特定scope中的相关属性: pageContext.removeAttribute("attrName", PAGE_SCOPE);
page 对象
这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。 page 对象就是this对象的同义词。
exception 对象
exception 对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。