JSP(更新中)
1. jsp网页处理流程图
2.JSP生命周期
-
编译阶段:
servlet容器编译servlet源文件(上述的hello.jsp),生成servlet类(上面流程图的helloSevlet.java)
-
初始化阶段:
加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法 -
执行阶段:
调用与JSP对应的servlet实例的服务方法 -
销毁阶段:
调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
- 例子:
当一个jsp页面发送到jsp引擎的时候,jsp引擎会首先检测是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。然后初始化jsp(创建实例,调用jspInit()方法。当用户访问一次该页面,就执行一次该jsp实例的jspSevice()方法。当该页面被被更改,jsp容器先移除先前页面(执行jspDestroy方法),然后重新编译这个jsp文件。
3.jsp语法
-
脚本程序格式:可包含任意 java 语句、变量、方法或表达式,需要放在脚本语言中才有效。
格式:<% 代码片段 %>
-
JSP变量,方法的声明格式:
<%! 代码片段 %>
-
JSP表达式的格式:一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。格式:
<%= 表达式 %>
-
JSP注释:
<%-- 注释 --%>
:JSP注释,注释内容不会被发送至浏览器甚至不会被编译。<!-- 注释 -->
:HTML注释,通过浏览器查看网页源代码可以看见注释内容。
-
解决中文页面显示问题:在JSP文件头部加上
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-
JSP指令标签(用于设置JSP页面相关的属性,如编码方式、脚本语言等):
JSP中三种指令标签:描述 %@ page 标签属性=“值” %> <%@ include 标签属性=“值” %> <%@ taglib 标签属性=“值” %> 如:
<%@ page language="java" %>
:设置脚本语言为java.
page指令(page指令为容器提供当前页面的使用说明,一个JSP页面可以包含多个page指令)
page指令标签的部分相关属性:属性 描述 buffer 指定out对象使用缓冲区的大小 import 导入要使用的java类 errorPage 当JSP页面发生异常时需要转向的错误处理页面 contectType 指定当前JSP页面的MIME 类型和字符编码 session 指定JSP页面是否适用session isThreadSafe 指定JSP页面的访问是否为线程安全 extends 指定servlet从哪个类继承 include指令
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、html文件或是文本文件。包含的文件就像是该JSP的一部分,会被同时编译执行。格式:
<%@ include file="文件相对 url地址“%>
文件名是一个相对的URL地址,若没给文件关联一个路径,JSP编译器只会在当前路径下寻找
taglib指令
taglib指令引入一个自定义的标签集合定义,包含库路径、自定义标签。
格式:
<%@ taglib uri="uri" prefix="prifixOfTag" %>
其中uri是自定义标签库的位置,prefix为指定标签库的前缀。 -
JSP行为标签(动作元素)
JSP行为标签与指令标签不同,JSP行为标签在页面请求处理阶段起作用。JSP行为标签使用XML语法结构写的,可以控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户重定向到另一个页面,为Java插件产生相关的HTML等等。
行为标签只有一种语法格式,它严格遵守XML标准:
格式:
<%jsp:include page="相对url地址" flush="true"%>
:page属性:包含页面的相对url地址,flush属性:定义包含资源前是否刷新缓冲区。
(与JSP指令标签不同,这里的行为标签是在页面访问时才引入文件。而指令标签是在.jsp转为servlet.java时引入文件)
jsp:include:将指定的静态和动态文件插入到正在生成的页面。
jsp:useBean:加载javaBean(编译好的java类)
jsp:setProperty:设置已经实例化的Bean对象属性。
jsp:getProperty:获取指定的Bean属性值,转换为字符串输出。
jsp:forward:转向另一个页面
jsp:plugin:插入一些运行 java applet必要的插件。
jsp:elementjsp:attributejsp:body:用于动态定义XML元素。
行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的JSP行为标签::语法 描述 属性 jsp:include 用于在当前页面中包含静态或动态资源 page,flush jsp:useBean 寻找和初始化一个JavaBean组件 class,type,beanName jsp:setProperty 设置 JavaBean组件的值 name,property,value,param jsp:getProperty 将 JavaBean组件的值插入到 output中 name,property jsp:forward 从一个JSP文件向另一个文件传递一个包含用户请求的request对象 page jsp:plugin 用于在生成的HTML页面中包含Applet和JavaBean对象 jsp:element 动态创建一个XML元素 jsp:attribute 定义动态创建的XML元素的属性 jsp:body 定义动态创建的XML元素的主体 jsp:text 用于封装模板数据 行为标签常见的属性
上面的行为标签都包含两个属性:id 和 scope
- id属性:动作的唯一标识,可以在JSP页面引用。动作元素创建的id值可以通过PageContext来调用。
- scope属性:定义了关联id元素对象的寿命。(page,request,session,application) -
JSP隐含对象(9个)
对象 描述 request HttpServletRequest类的实例 response HttpServletResponse类的实例 out PrintWriter类的实例 session HttpSession类的实例 application ServletConfig类的实例 pageContext PageContext类的实例,提供对JSP页面内所有对象及命名空间的访问 config ServletConfig类的实例 page 类似于java中的this关键字 Exception Exception类的对象 完整使用javaBean示例:
<jsp:useBean id="test" class="model.User"></jsp:useBean> <jsp:setProperty property="userName" name="test" value="袁欢"/> <jsp:getProperty property="userName" name="test"/>