1.what
JSP也是servlet,JSP是区域性的servlet(Servlet——>JspPage——>HttpJspBase——>*_jsp.java)——对页面部分动态;
由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件。
2.why
2.1:一个动态网页中,只有局部内容需要动态更新。servlet是全网页更新。
2.2:servlet需要手动编译、部署。操作繁琐
2.3:servlet不利于项目分工。
3.生命周期——JSP是自动部署到服务器的(全局web.xml文件里的JSP引擎:org.apache.jasper.servlet.JspServlet)
3.1:JSP页面翻译(*.JSP—>servlet.java)——web容器第一次收到JSP页面请求后执行
3.2:JSP页面编译(Java——>class)
3.3:容器装载class文件
3.4:实例化——xml中的反射
3.5:初始化——xml中初始化变量
3.6:服务
3.7:销毁
4.JSP语法和语义——基础JSP由文本和标记组成,同时可以在其中嵌入脚本和其它功能。
4.1:模板数据——JSP的静态部分,servlet不处理
4.2:元素——需要web容器处理的部分。
4.2.1:脚本元素<%=……%>
4.2.1.1:声明<%!……%>申明静态全局变量和方法。一次多声明用分号分隔。
4.2.1.2:脚本表达式<%……%>将值发给Http响应流
4.2.1.3:Scriptlet<%满足Java语法的代码%>;太多则使JSP可读性差
4.2.2:指令(<%@ directive …键值对,彼此间空格分开… %>)——提供JSP页面的相关信息,实现JSP页面与容器之间的通信;后台操作,控制组合,影响翻译阶段;
4.2.2.1:page
*:language——默认且唯一支持为Java;指定JSP引擎的编译语言
*:info——JSP相关的版权信息
*:contentType——默认为text/html,iso-8859-1;指定MIME类型和字符集
*:import——默认为none,唯一多值的键;在JSP中引入包或类,直接使用。
*:buffer——默认8kB;缓冲区
*:autoFlush——默认TRUE;指定缓冲区满时是抛异常还是自动刷新(true)。
*:session——默认TRUE;指定当前页面是否参与活动的Http会话。
*:isThreadSafe ——默认TRUE;TRUE为可以多线程同时访问,FALSE为单用户访问。
*:errorPage——none;指定出现异常时跳转URL
*:isErrorPage——FALSE;指定的JSP页面为错误处理页面
*:
4.2.2.2:include(静态)——把指定的任意格式文件静态地包含进去;生成一个servlet。
*:被包含文件中不能出现HTML、body标记,一个合成的网页在包的网页中定义一次就可以了。
*: <%@ include file="常量" %>
4.2.2.3:taglib <%@ taglib uri="url" prefix="tagprefix" %>
*:
*:
*:
4.2.3:动作——页面间或页面与组件间的通信;多个servlet,运行时组装
4.2.3.1:<jsp:include page="相对路径" flush="true"/>
include动作与指令的区别:动作总是检查所含文件中的变化,指令不检查;动作在请求时激活,指令在翻译时激活;请求区间内动作可以共享对象,指令不支持;动作为多个servlet,指令为单个;动态与静态;
4.2.3.2:<jsp:forward page="相对路径" />
4.2.3.
4.2.3.
4.2.3.
4.2.3.
*web容器支持2中格式的JSP——普通格式(开发者)和xml兼容格式(开发工具)
5.注释
5.1:JSP注释<%--……--%>——在翻译阶段就消失,在JSP屏蔽最先消失
5.2:HTML注释<!--……-->——源代码有但外观不可见,在Http屏蔽而存在。
5.3:Java注释——在servlet屏蔽,响应时消失。
6.隐式对象——JSP操作请求、响应、会话以及其它servlet中使用的对象。
6.1:request——_jspService()的参数
6.2:response——_jspService()的参数
以下7种对象均在_jspService()方法中
6.3:pageContext——控制其它隐式对象、设置作用域
*作用域常量——PAGE_SCOPE;REQUEST_SCOPE;RESSION_SCOPE;APPLICATION_SCOPE;
PageContext.setAttribute("account",counter, PageContext.SESSION_SCOPE)=session.setAttribute("account",counter)
6.4:session
6.5:application——servletContext
6.6:out——响应输出;作用于当前页面;
clear()——清空缓存,已清再清抛异常 ~clearBuffer()
close() ——关闭流
getBufferSize()——获得缓冲区大小
getRemaining()——可用缓冲大小
isAutoFlush
6.7:config——servletConfig
6.8:page——this
6.9:exception——isErrorPage为TRUE是才产生