翻译后的jsp,继承HttpJspBase实现JspSourceDependent接口


_jspInit()
_jspDestroy()
_jspService()

1. javax.servlet.jsp.PageContext pageContext
2. application = pageContext.getServletContext();
3. config = pageContext.getServletConfig();
4. session = pageContext.getSession();
5. out = pageContext.getOut();
6. java.lang.Object page = this;
7. javax.servlet.http.HttpServletRequest response
8. javax.servlet.http.HttpServletResponse request
9 exception

pageContex application config session out
page request responce exception

 


jsp指令 include taglib page

include指令 是属于静态包含,它包含的所有多个jsp页面编译成一个Servlet文件

而与之相对的是

reques.getRequestDispatcher("x.jsp").include(request,responcse);

它包含的所有多个jsp页面编译成多个Servlet文件。执行的时候在动态包含内容进来。

面试题:静态包含与动态包含的区别:

静态包含:编译时包含,包含的所有多个jsp页面编译成一个Servlet文件,效率高
动态包含:运行时包含,所有多个jsp页面编译成多个Servlet文件,执行的时候在动态包含内容进来。

 

pageContext.forword(); 实际上这个是reques.ggetRequestDispatcher().forword()
pagecontext.include();实际上这个是reques.ggetRequestDispatcher().include()

 

pageContext.getAttribute("",Scope)//从四大域里面查找 page request session application

 

jsp运行原理:
当JSP页面第一次被访问时,Web服务器会请求交给JSP引擎去处理。
JSP引擎先将JSP页面文件转译成一个Java文件,也就是jsp会被翻译成一个Servlet,
服务器将前Java文件编译成字节码文件,再执行这个字节码文件来响应客户的请求。
当这个JSP页面再次被请求时,只要该JSP文件没有被改动,JSP引擎就直接调用已装载的Servlet。


out
out的类型是JspWrite
JspWrite相当于一种带缓存功能额PrintWrite。
page指令的buffer属性可以调整缓存大小或关闭

只有向out对象写入了内容,且满足如下任一条件时。out对象才会调用ServletResponse.getWrite方法
并通过该方法的PrintWrite对象将out对象的缓冲区内容真正写入到Servlet引擎提供的缓冲区中。
1.设置page指定的buffer属性关闭了out对象的缓存功能
2.out对象的缓冲区已满
3.整个jsp页面结束

面试题:out隐式对象的工作原理。

调用out对象方法写入的数据,首先存储在JspWrite对象的缓冲区里面
当JspWrite对象的缓冲区已满或整个jsp页面结束的时候
JspWrite对象会调用ServletResponse.getWrite()方法返回的PrintWrite对象的write()方法将数据写入Response的缓冲区里面


<jsp:include> --->动态包含,运行时包含
<jsp:forward> --->首页调整。首页不能配置Servlet,

<jsp:param> -->用法给forward的页面传递参数

映射jsp-->映射servlet

<Setvlet>
<servlet-name>xxx</servlet-name>
<jsp-file>/14.jsp</jsp-file>
</Setvlet>
<Servlet-mapping>
<Servlet-name>xxx</Setvlet-name>
<url-pattern>/index.html</url-pattern>
</Servlet-mapping>

 posted on 2014-10-23 14:57  编程小兵  阅读(293)  评论(0编辑  收藏  举报