一.四大作用域的总结:

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;

final javax.servlet.ServletContext application;

final javax.servlet.ServletConfig config;

javax.servlet.jsp.JspWriter out = null;

final java.lang.Object page = this;

javax.servlet.jsp.JspWriter _jspx_out = null;

javax.servlet.jsp.PageContext _jspx_page_context = null;

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="要转发的资源" />