JSP运行原理及九大隐式对象


  • 每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet),然后按理servlet的调用方式进行调用.翻译成的java文件存放路径:$tomcat/work/Catalina/localhost/webappName/org/apache/jsp下面
  • 由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会信息论是,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响
  • JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用.JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9个对象的引用

九个对象分别是:

  1. request                    即HttpServletRequest
  2. response                  即HttpServletResponse
  3. pageContext            即PageContext
  4. application               即ServletContext
  5. config                      即ServletConfig
  6. out                          即JspWriter
  7. page                        即this
  8. session                     即HttpSession
  9. exception                 错误页面中才有此对象<%@ page isErrorPage="true" %>,可通过exception.getMessage()获取异常信息


JSP被翻译成Servlet的java文件时:
1-4的内容是放在service方法内部,5是放在service方法外部

  1. 首先创建上面说到的9个对象
  2. html代码转变成out.write("html代码")
  3. <%  %>脚本片断   其中的java代码会被原样放到java文件中
  4. <%= time %>脚本表达式    转变成out.write(time)
  5. <%! %>声明   其中java代码转换成Servlet的 静态代码块 或  成员变量 或 方法
  6. <%--   --%>   JSP注释,会被忽略不作任何操作

因此:
1.脚本片断<%%>中不能写类或方法,因为方法内部不能再写类及方法;

2.<%!%>中可以写静态代码块,成员变量和方法
3.九大隐式对象只能在<%  %>,<%=  %>中使用,而不能在<%!  %>中使用


JSP也可以像Servlet一样在web.xml文件中配置映射路径

<servlet>
    <servlet-name>servletName</servlet-name>
    <jsp-file>index.jsp</jsp-file>
</servlet>
<!-- 也可以配servlet-mapping -->




你可能感兴趣的:(JSP运行原理及九大隐式对象)