一:jsp简介html
SP即Java Server Pages,它和servlet技术同样,都是sun公司定义的一种用于开发动态web资源的技术。该技术的最大特色在于:写JSP就像写html,但它相比html而言,html只能为用户提供静态数据,而JSP技术容许在页面中嵌套java代码,为用户提供动态数据。java
二:jsp原理web
. JSP原理
1) web服务器是如何调用并执行一个JSP页面的?
服务器首先将JSP翻译为一个Servlet,翻译事后的Servlet能够在\tomcat主目录\work\Catalina\localhost\工程名\org\apache\jsp目录下查看,这是服务器的工做目录。打开相应的Servlet能够看到,翻译事后的servlet继承了org.apache.jasper.runtime.HttpJspBase,而HttpJspBase继承了HttpSerrvlet。说到这里,咱们就明白了,其实JSP就是一个Servlet,访问jsp即访问一个Servlet。apache
2) JSP页面中的html排版标签是如何被发送到客户端的以及java代码服务器是如何执行的?
继续浏览JSP翻译事后的Servlet,里面有个service方法_jspService(request, response),在该方法中能够看到,JSP中的全部内容都会翻译到service方法中,html代码会经过out输出,就像学习JSP以前,在Servlet中用out输出html语句同样,java部分代码会原封不动的搬到service方法中。tomcat
三:jsp指令服务器
1)page指令:session
page指令用于定义JSP页面的各类属性,不管page指令出如今JSP页面中的什么地方,它的做用都是整个JSP页面。为了保持程序的可读性,page指令最好放在整个JSP页面的起始位置。例子:<%@page contentType= "text/html;charset=utf-8" %>app
2)include指令:jsp
静态引入:<%@include file="路径名">学习
动态引入:<jsp:include page="路径名" />
四. JSP运行原理和9大隐式对象
由上文可知:每一个JSP页面在第一次被访问时,web容器都会把请求交给JSP引擎(即一个java程序)去处理。JSP引擎现将JSP翻译成一个_jspServlet(实质上也是一个Servlet),而后按照Servlet的调用方式进行调用。因为JSP第一次访问时会翻译成Servlet,因此第一次访问一般会比较慢,但第二次访问,JSP引擎若是发现JSP没有变化,就再也不翻译,而是直接调用,因此程序的执行效率不会受到影响。
JSP引擎在调用JSP对应的_jspServlet时,会传递或建立9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时得到这些web对象的引用,特地定义了9个相应的变量,开发人员在JSP页面中经过这些变量就能够快速得到这9大对象的引用,9大隐式对象是哪些以及各自的做用是什么?
request://就是Servlet里的request response: //就是Servlet里的response session: //就是Servlet里的session application: //就是servlet里的servletContext config: //就是Servlet里的servletConfig page: //就是Servlet本身 exception: //异常,只有errorPage才有 out://JSP页面输出 pageContext:<span style="font-family:Microsoft YaHei;">//</span>pageContext对象是JSP技术中最重要的一个对象,它表明JSP页面的运行环境
pageContext对象是JSP技术中最重要的一个对象,它表明JSP页面的运行环境,这个对象不只封装了对其它8大隐式对象的引用,它自身仍是一个域对象,能够用来保存数据。而且,这个对象还封装了web开发中常常涉及到的一些经常使用操做,例如引入和跳转其它资源、检索其它域对象中的属性等。
getException<span style="font-family:Microsoft YaHei;">() //</span>方法返回exception隐式对象 getPage<span style="font-family:Microsoft YaHei;">() //</span>方法返回page隐式对象 getRequest() //方法返回request隐式对象 getResponse() //方法返回response隐式对象 getgetServletContext() //方法返回application隐式对象 getServletConfig() //方法返回config隐式对象 getSession() //方法返回session隐式对象 getOut() //方法返回out隐式对象