JSP笔记

1. JSP的基本原理:

JSP本质是Servlet,当用户向指定Servlet发送请求时,Servlet利用输出流动态生成HTML页面,包括每一个静态的HTML标签和所有在HTML页面中出现的内容。

JSP在标准的HTML页面中嵌入Java代码,其静态的部无须Java程序控制,只有那些需要从数据库读取或需要动态生成的页面内容,才使用Java脚本控制。

JSP页面的内容可分成以下两部分:

  • 静态部分:标准的HTML标签、静态的页面内容,这些内容与静态HTML页面相同。
  • 动态部分:受Java程序控制的内容,这些内容由Java程序来动态生成


                               JSP页面工作原理图

根据上面的JSP页面工作原理,可以得到以下4个结论:

  • JSP文件必须在JSP服务器内运行
  • JSP文件必须生成Servlet才能运行
  • 每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet
  • JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP碳输送到客户端的是标准HTML页面

2.JSP注释

<%--注释内容--%>

JSP的注释是无法通过源代码查看到的,不会被发送到客户端

3. JSP声明

JSP页面的声明部分将转换成对应Servlet的成员变量或成员方法(全局变量)

4. JSP表达式

<%=表达式%>
输出表达式语法后不能有(分号);

5. JSP脚本

<%Java代码%>

JSP脚本部分声明的变量是局部变量,不能使用private、public等访问控制符修饰,不可以使用static修饰

6.JSP的3个编译指令

指令标签不会产生任何内容输出到网页中,主要用于整个JSP页面的相关信息

  • page:该指令是针对当前页面的指令,通常位于JSP页面的顶端,一个JSP页面可以有多条page指令
  • include:用于指定包含另一个页面(静态)
  • taglib:用于定义和访问自定义标签

使用编译指令的语法格式如下:

<%@编译指令名 属性名="属性值"...%>

6.1 page指令

page指令各属性的意义:

  • language:声明当前JSP页面使用的脚本语言的种类,默认为Java语言

  • extends:指定JSP页面编译所产生的Java类所继承的父类,或所实现的接口

  • import:用来导入包。默认导入的包有:java.lang.*、javax.servlet.*、java.servlet.jsp.*、java.servlet.http.*。

  • sesseion:设定这个JSP页面是否需要HTTP Session。

  • buffer:指定输出缓冲区的大小。输出缓冲区的JSP内置对象:out用于缓存JSP页面对客户浏览器的输出,默认值为8KB,可以设置为none,也可以设置为其他值,单位为KB

  • autoFlush:当前输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。

  • info:设置该JSP程序的信息,也可以看做其说明,可以通过Servlet.getSessionInfo()方法获取该值。

  • errorPage:指定错误处理页面。

  • isErrorPage:设置本JSP页面是否为错误处理程序。

  • contentType:用于设定生成网页的文件格式和编码字符集,即MIME类型的页面字符集类型,默认的MIME类型是text/html;默认的字符集类型为ISO-8859-1。

  • pageEncoding:指定生成网页的编码字符集。

6.2 include指令

include用于文件包含。被包含的文件中的所有内容都被原样包含到该JSP页面中,如果被包含文件中有代码,将不被执行。

incluse编译指令的语法如下:

<%@include file="relativeURLSpec"%>

6.3 taglib指令

该指令用于加载用户自定义标签,其语法格式如下:

<%@taglib prefix="fix" uri="tagUriorDir"%>

prefix属性:用于设置加载自定义标签的前辍

uri属性:用于指定自定义标签的描述文件位置

7. JSP的7个动作指令

动作指令与编译指令的区别:

编译指令是通知Servlet引擎的处理消息,而动作指令是运行时的动作。编译指令在JSP编译成Servlet时起作用,而动作指令通常可替换成JSP脚本,它只是JSP脚本的标准化写法。

JSP动作指令主要有如下7个:

  • jsp:forward:执行页面转向,将请求的处理转发到下一个页面。请求依然是一次请求,所以请求参数、请求属性不会丢失。

  • jsp:param:用于传递参数,必须与其他支持参数的标签一起使用。

  • jsp:include:用于动态引入一个JSP页面。

  • jsp:plugin:用于下载JavaBean或Applet到客户端。

  • jsp:useBean:创建一个JavaBean的实例。

  • jsp:setProperty:设置JavaBean实例的属性值。

  • jsp:getProperty:输出JavaBean实例的属性值。

7.1 forward指令

格式如下:



  
    


7.2 include指令

格式如下:


    


flush属性:指定输出缓存是否转移到导入文件中。

7.3 useBean、setProperty、getProperty指令

useBean的语法格式如下:


setProperty的语法格式如下:

getProperty的语法格式如下:


7.4 param指令

语法格式如下:

该指令与以下三个指令结合使用:

  • jsp:include
  • jsp:forward
  • jsp:plugin

8. JSP脚本中的9个内置对象(都是Servelt API接口的实例)

9个内置对象依次如下:

  • application:javax.servlet.ServletContext的实例,该实例代表JSP所属的Web应用本身,可用于JSP页面或者在Servlet之间交换信息。

  • config:javax.servlet.ServletConfig的实例,该实例代表该JSP的配置信息。

  • exception:java.lang.Throwable的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用。

  • out:java.servlet.jsp.JspWriter的实例,该实例代表JSP表面的输出流,用于输出内容,形成HTML页面。

  • page:代表该页面本身,通常没有太大用处。也就是Servlet中的this,其类型就是生成的Servlet类,能用page的地方就可以用this。

  • pageContext:javax.servlet.jsp.PageContext的实例,该对象代表JSP页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有getServletContext()和getServeltConfig()等。

  • request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里。这是一常用的对象,获取客户端请求参数必须使用该对象

  • response:javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的响应。

  • session:javax.servlet.http.HttpSession的实例,该对象代表一次会话。当客户端浏览器与站点建立连接时,会话开始;当客户端关闭浏览器时,会话结束。

application、session、request、page范围区别:

  • application:对于整个Web应用有效,一是JSP、Servlet将数据放入application中,该数据将可以被该应用下其他所有JSP、Servlet访问。

  • session:仅对一次会话有效,一是JSP、Servlet将数据放入session中,该数据将可以被本次会话其他所有JSP、Servlet访问。

  • request:仅对本次请求有效,一是JSP、Servlet将数据放入request中,该数据将可以被该请求下其他所有JSP、Servlet访问。

  • page:仅对当前页面有效,一是JSP、Servlet将数据放入page中,该数据将只可以被当前页面的JSP脚本、声明部分访问。




你可能感兴趣的:(JSP&Servlet)