一.四大作用域的总结:
page域:当前这个jsp页面范围(名字都叫页面)
request域:一次请求(图片过去没有返回)
session域:一次会话(图片过去再回来)
application域:整个web应用(名字都叫应用)
二:jsp技术
本质是Servlet
jsp(Java Server Pages)技术我理解就是:html输出时比较便捷 就在html中嵌入java代码。
1.jsp脚本:
(1)<% Java代码 %>—-内部的java代码翻译到service方法的内部。(相对于在servlet中一行行写html,一行一行out.print() )
(2)<%= 加上java变量或者表达式 %>—- 会被翻译成实质.java的servlet文件中service方法内部的out.print()
(3)(了解)<%! java 代码%>—会被翻译成servlet的成员的内容 (实质.java的servlet文件中成员变量的申明)
2.jsp注释:(了解)不同注释可见范围不同
html注释可见范围为jsp源码,翻译后的servlet文件,页面
java注释可见范围只有jsp源码,翻译后的servlet文件
除了Java与html的注释以外,jsp多了自身的注释。
jsp注释:<%–注释内容–%> 可见范围为只在jsp源码可见(安全)
三:jsp运行原理(面试)
jsp本质是servlet(面试)
jsp在第一次被访问时会被web容器翻译成servlet,在执行过程:
第一次访问xxxx.jsp看Tomcat的work目录中是否有对应的servlet文件,有就直接修改,没有翻译成—>xxxx_jsp.java—>编译运行。
注意:被翻译后的servlet在Tomcat的work目录中可以找到。
四:jsp指令(3个)
jsp指令是指导jsp翻译和运行的命令
1.page指令
–=属性最多的指令—(了解)(实际开发中page指令默认即可)
属性类似html中标签的属性,格式也相同。常用属性如下:
language:顾名思义jsp脚本中可嵌入的语言种类,目前为止只有Java
pageEncoding:当前jsp文件的本身编码—内部可以包含contentType
contentType:response.setContentType(text/html;charset=UTF-8)
session:是否jsp在翻译时自动创建session
import:与java一样是导入jar包的作用
errorPage:当前页面出错后跳转的页面
isErrorPage:当前页面是否一个显示错误的页面
2.include指令
页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中
格式:<%@include file = “被包含的文件地址 “ %>
网页开发中一般设置头尾jsp(header和footer)只修改一次header和footer来修改全部页面。
拿到html后先修改为jsp文件,再讲头尾单独弄成一个jsp文件,再用include指令。
3.taglib指令
在jsp页面中引入标签库(jstl标签库,struts2标签库)
格式:<%@taglib uri =”标签库地址” prefix = “前缀”%>
例如:<%@taglib uri=”http://“ prefix=”c” %> 使用c库的标签 <c:if>
五.jsp内置/隐式对象(9个)—-笔试题
sp脚本中可以直接使用的对象(被翻译成servlet之后,service方法中的对象已经初始化完毕)
servlet(_jsp.java文件)已经定义好了可以直接在下面使用 。
_jsp.java文件中:
final javax.servlet.jsp.PageContext pageContext; |
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException { |
}
1.out对象—JspWriter类型
out的作用就是向客户端输出内容—out.write()
例:out.write();与response.getWriter().writer();的区别
我们发现response的输出 要比out的输出要早。
(1)其实在jsp中除了response缓冲区外,还有一个out缓冲区。
(2)out的缓冲区默认8kb 可以设置为0 代表关闭out缓冲区 内容直接写到response缓冲区。
(3)Tomcat会从response缓冲区获得数据(因为是来显示给客户端的),所以先输出现有的ccccccc,然后在输出out.write()向response缓冲区输出的。
buffer属性来设置out缓冲区大小。
2.pageContext对象—jsp页面的上下文,作用如同ServletContext类似也是域对象
(1)setAttribute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)
pageContext可以向指定的其他域中存取数据,默认就为本身的pageContext。
scope代表范围,用PageContext.xxxx_SCOPE
setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
pageContext就可以完成获取其他域的功能。(后面范围写谁就存进谁),所以就可以获得其他8大隐式对象。
(2)pageContext的findAttribute(String name)功能
依次寻找获得属性,从某个域获取到后将不再寻找。顺序为:
默认的pageContext(pageContext域/页面域),request域(请求域),session域(服务器域),application域(整个应用域)
(3)可以获得其他8大隐式对象
pageContext.getRequest();
pageContext.getOut();
六.jsp标签
(1)动态的页面包含:<jsp:include page = “被包含的页面”/>
(2)请求转发:功能完全类似于request.getRequestDispatcher.forward(request,response)
<jsp:forward page="要转发的资源" />