全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JSP页面编译原理众所周知,每一个JSP页面都会被Web容器编译成一个Java类,供web容器调用,并且生成HTML页面回馈给用户。而了解其中的编译方法和规则,对我们学习JSP是非常有好处的,可以说学习好了这个编译原理,就已经学习好了大部分的JSP知识,剩下的工作就只剩下熟记一些tablib和反复应用以使自己更加熟练而已了。 先来看一下JSP页面所对应的Class的基本结构。每一个JSP页面都会被编译成成如下的格式样子,先给一个大致的印象,详细的说明在后面。public class My$jsp extends HttpJspBase static public date$jsp() private static boolean _jspx_inited = false; public final void _jspx_init() throws org.apache.jasper.runtime.JspException ; public void _JSP pageservice(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; String _value = null; try if (_jspx_inited = false) synchronized (this) if (_jspx_inited = false) _jspx_init(); _jspx_inited = true; _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType(text/html;charset=ISO-8859-1); pageContext = _jspxFactory.getPageContext(this, request, response, , true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); / HTML / begin file=/date.jsp;from=(0,0);to=(7,6) out.write(rnrnDatern + rnrnrn + The date isrn); / end / begin file=/date.jsp;from=(7,8);to=(7,57) out.println(new java.util.Date().toString(); / end / HTML / begin file=/date.jsp;from=(7,59);to=(10,7) out.write(rn rn rn); / end catch (Throwable t) if (out != null & out.getBufferSize() != 0) out.clearBuffer(); if (pageContext != null) pageContext.handlePageException(t); finally if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext); 我们可以清楚地看到,这里面最重要的函数就是pageservice,web容器在编译好一个JSP类以后,就申请这个类的对象,并且直接调用pageservice来获得Response,最后返回给客户。作为细节,我们可以总结如下:1. 所有的JSP页面翻译出来的class,都从HttpJspBase继承,并且命名为PageName$jsp 2. 在第一次调用pageservice函数的时候,该class会进行一次初始化,而这个初始化函数是_jspx_init,如果我们想,我们还可以自定义这个函数,来实现JSP页面的初始化。 3. 这样的代码被转换成什么了? 这样的代码被直接转成Java代码放到pageservice函数里面。 4. 这样的代码被转换成什么了? 这样的代码被翻译成成员函数和成员变量,也就是说,这些声明在JSP的生命周期内都是存在的。 5. HTML代码呢?html代码直接被写到PrintWriter里面回馈给用户。非常的直接 6. 为什么JSP页面有那么多省写方式,比如说session , out , page , context之类。这都是在pageservice里面定义的临时变量,具体的初始化可以参看上面的例子代码,每一次调用JSP页面,这些变量都会被重新初始化一次。当然我们也可以方便的声明自己的变量。 7. 省写方式 这么理解? 这种省写方式调用doSomething所得到的Object的toString(),然后直接写到out里面。相当于:out.print(object.doSomethiing().toString()8. JavaBean 里面的scope定义了作用域范围,这个范围在这里的意思是? 这是Bean对象句柄保存的地方的意思。我们可以想象一下,一个page范围的Bean只是pageservice里面的一个局部变量,当一次处理结束后,这个变量就会被Java虚拟机回收。而session变量。而request级别的Bean就应该是JSP页面的成员变量。而session和application则不能在JSP页面class里面保存,而应该保存在JSP页面的调用对象里面。 9. 关于命令,这个就太简单了,只是一个一个的对应为response.setContentType()的语句而已。 10. 关于JSP页面转向问题。这个语句被翻译为getServletContext().getRequestDispatcher(/List.jsp).forward(req, res);语句。 11. 遇到这个语句,JSP翻译器就会把这个文件的代码和现在文件的代码混合然后一起编译,生成JSP类。这个方法很好,可以让我们统一文档的样式,比如说吧header写成一个文件,而
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年家庭养老服务产业发展可行性研究报告及总结分析
- 2025年校园西餐推广项目可行性研究报告及总结分析
- 2025年农产品冷链物流可行性研究报告及总结分析
- 2025年新型电动汽车充电桩布局项目可行性研究报告及总结分析
- 变压器移交申请书范文
- 大学疫情期间查寝申请书
- 调查函申请书模板
- 5 2延时服务申请书
- 加盟2025年婚纱摄影连锁协议合同
- 大学2025年执业医师阶段测试卷
- (完整版)文明施工管理体系及保证措施
- 多联机空调安装施工方案
- 2024年中国中信金融资产江西分公司招聘2人笔试备考题库完整参考答案详解
- 2025年广西继续教育公需科目真题及答案
- 2024-2025学年上海市浦东区七年级(上)期中英语试卷
- 肿瘤心脏病学课件
- 项目管理教材
- 23《月迹》 课件 统编版 小学语文五年级上册
- 2025云南省交通投资建设集团有限公司普洱管理处招聘约350人笔试历年参考题库附带答案详解
- 电池(储能)安全事故应急预案(如使用)
- 冬季工地车辆安全培训课件
评论
0/150
提交评论