前提

: 为了弥补在 Java 中书写 HTML 标签该问题而出现的;

JSP 概述

: Servlet 是 JavaEE 提供的动态资源开发技术,是以 Java程序 的形式进行开发,在Java中 书写HTML标签 是一件十分头疼的事情,所以人们开发出了 JSP(全称:Java Server Pages)。 看起来像是 HTML 一样,但可以在其中书写 Java 代码,本质上是 动态web 资源,JSP 会在第一次访问时被容器翻译成 Servlet。

生命周期

1.编译阶段

: servlet容器编译servlet源文件,生成servlet类
初始化阶段

: 加载域 JSP 对应的 servlet类,创建其实例,并调用他的初始化方法;
执行阶段
: 调用域JSP 对应的 servlet 实例的服务方法
销毁阶段
: 调用与 JSP 对应的 servlet实例的销毁方法,然后销毁servlet实例;

JSP - - - Servlet

: 在 jsp 翻译成 Servlet 时,jsp翻译引擎 在翻译过来的 Servlet 中,预先定义了一些变量,可以不需要在 JSP 中预先定义就可以直接使用,共有9个,这个九个称为 JSP 的九大隐式对象。

九大隐式对象:
				page
				config 
				application
				response
				request
				session
				out
				exception
				pageContext
	注意: out 与 response.getwriter().write(); 
	      两者如果一起使用的话,会出现顺序错乱;

Out 对象

:可以将它理解成 response.getWriter() 获得的PrintWriter;
:他自带一个缓冲区,其大小受 page 指令中的 buffer 的设定限制;
:当 缓冲区满 或 缓冲区被关闭 或者 jsp 页面结束;
:则此缓冲区中的内容将被刷新到 response,getWriter()的缓冲区中;

pageContext 对象

作用的范围 : 整个 jsp 页面,是四大作用域中最小的一个;
生命周期 : 在 jsp 页面范围内共享数据;
特殊作用 :可以去操作其他三个作用域;

操作所有域中属性的方法:

      getAttribute(String name,int scope);
      setAttribute(String name,object value,int scope);
      removeAttribute(String name,int scope);

其中 pageContext 中代表域的常量:
		
	  PageContext.APPLICATION_SCOPE
	  PageContext.SESSION_SCOPE
	  PageContext.REQUEST_SCOPE
	  PageContext.RESPONSE_SCOPE
	  
 findAttribute()方法:
 
     在四大域中搜寻属性,
     搜寻的顺序是 page域,request域,session域,application域,
     从小域到大域开始搜索,如果搜索到就直接获取该值,
     如果所有域中都找不到,返回一个null;

举例(获取其他作用域的值)

	<%
	
	pageContext.setAttribute(“city”,"北京");
	request.setAttribute("city","济南");
	session.setAttribute("city","太原");
	application.setAttibute("city","石家庄");
	
	%>

	city=<%=pageContext.getAttribute("city") %><br>
	
	request.city=
	<%=
	pageContext.getAttribute("city",PageContext.REQUEST_SCOPE) 
	%><br>


	session.city=
	<%=
	pageContext.getAttribute("city",PageContext.SESSION_SCOPE) 
	%><br>

	application.city=
	<%=
	pageContext.getAttribute("city","PageContext.REQUEST_SCOPE")
	%>

实现请求的转发和包含

	转发:
	
		<%
			pageContext.forward("/_index.jsp");
			//request.getRequestDispatcher().forwart(request.response);
		%>

	包含:

		<%
        	pageContext.include("/_head.jsp");
		%>
	
		<%
			pageContext.include("/_foot");
		%>