- 浏览: 14261 次
- 性别:
- 来自: 深圳
最近访客 更多访客>>
最新评论
-
Aether:
Here is include a jsp file!
Thi ...
JSP拾遗(五)——jsp文件包含指令
无代码无真相。这里我们来看看,一个简单的jsp页面,在被服务器解释执行时,到底发生了怎么样的转换。
在你的tomcat根目录下的webapps目录下,新建一个test目录。在新建的test目录里面,创建一个WEB-INF目录。将tomcat根目录下的conf目录里的web.xml目录拷贝到/webapps/test/WEB-INF目录下,这里的web.xml的可以把<web-app>标签里面的内容全部删除,因为conf里面已经声明过了。然后在/webapps/test目录下新建一个txt文档,并把名称改为MyJsp.jsp,注意后缀名是.jsp。
完成上面操作后的目录结构如下:
wbapps - test -
-MyJsp.jsp
-WEB-INF -
- web.xml
启动tomcat,在地址栏中输入http://127.0.0.1:8080/test/MyJsp.jsp。浏览器里一片空白,这是自然的,因为我们的MyJsp.jsp文件本身就什么内容也没有。
在tomcat的work目录中找到test目录,它的位置是/work/Catalina/localhos/下面,然后依次顺着目录找下去,在/work/Catalina/localhos/org/apache/jsp目录下面,你会发现一个MyJsp_jsp.java文件。这个文件就是MyJsp.jsp文件被翻译成的java文件。它并不是在jsp文件名后面加了Servlet,而是直接把"."变成"_"作为类名。
打开MyJsp_jsp.java文件:
package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class MyJsp_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static java.util.List _jspx_dependants; public Object getDependants() { return _jspx_dependants; } public void _jspService(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; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context); } } }
呵呵,原来即使是一个空白的jsp文件,也照样会生成这么长的一段代码的。没有看到servlet的字样?翻翻tomcat的api,你就会发现,MyJsp_jsp的父类HttpJspBase已经实现了javax.servlet.Servlet接口的。
下面我们在MyJsp.jsp文件中加入以下HTML代码:
<html>
<body>
This is my first JSP!
</body>
</html>
刷新一下浏览器,我们发现,MyJsp_jsp.java中, _jspService()方法中,增加了以下代码:
out.write("<html>\r\n");
out.write("<body>\r\n");
out.write("\tThis is my first JSP!\r\n");
out.write("</body>\r\n");
out.write("</html>");
原来,所有的HTML代码都要用out.write()方法输出出来的啊。所以可以想象,如果使用纯粹的Servlet编写一个复杂的web页面,将是一件多么麻烦的事情。 下面,我们来实验将jsp里面插入代码段的情况。教材里面说jsp里面的java代码段有两种形式,一种是<%! %>包围,一种是<% %>包围。(当然取值符<%= %>里面的表达式里也可以有“相当长”的java代码段,这个我们暂时不予考虑) <%! %>一般用来表示全局变量的声明,以及方法的声明,而<% %>则是普通的可执行程序段。什么意思呢?用代码来说话! 在MyJsp.jsp文件里面加入以下代码:
<%! double PI = 3.14159; int plus(int a, int b){ return a+b; } %> <% String hello = "Hello World!"; %>
再次刷新浏览器,查看MyJsp_jsp.java代码:
package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class MyJsp_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { double PI = 3.14159; //<%! %>里面的变量成为成员变量 int plus(int a, int b){//<%! %>里面的方法成为成员方法 return a+b; } private static java.util.List _jspx_dependants; public Object getDependants() { return _jspx_dependants; } public void _jspService(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; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; String hello = "Hello World!"; //<%%>里面的代码段 out.write("\r\n"); out.write("\r\n"); //HTML代码段 out.write("<html>\r\n"); out.write("<body>\r\n"); out.write("\tThis is my first JSP!\r\n"); out.write("</body>\r\n"); out.write("</html>"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context); } } }
我们发现,<%! %>里面声明的变量成为了MyJsp_jsp的成员变量,里面声明的方法成为了MyJsp_jsp类的成员方法,而<% %>的代码则被填充到了_jspService()方法中。
注意<% %>中的代码在_jspService()方法中的填充位置。这里的代码是被填充在一大堆对象的初始化之后,因此, _jspService()方法中的这一大堆对象就可以在<% %>里面直接拿来使用,这些对象就是所谓JSP的内置对象,除了_jspFactory对象没什么用处外,这里有八个内置对象,按照声明顺序依次是:request、response、pageContext、session、application、config、out、page。这些内置对象除了可以直接在你的<% %>代码段中使用外,还会在你试图声明和它们同名的对象时,优雅地给你报出一个错误。(废话)
发表评论
-
Hadoop从零开始(一)——环境准备
2012-07-12 23:17 1510一、Linux虚拟机安装 Hadoop要运行在Uni ... -
JSP拾遗(十四)——单点登录
2009-08-03 09:58 0todo -
JSP拾遗(十三)——文件上传
2009-08-01 19:53 0TODO -
JSP拾遗(十二)——分页查询
2009-08-01 19:52 0TODO -
JSP拾遗(十一)——注册验证
2009-08-01 19:52 0TODO -
JSP拾遗(十)——权限控制
2009-08-01 19:51 0TODO -
JSP拾遗(九)——中文乱码
2009-08-01 19:48 0TODO -
JSP拾遗(八)——Listener
2009-08-01 19:44 2051Javax.servlet中定义了三类监听器:ServletC ... -
JSP拾遗(七)——Filter
2009-08-01 18:48 1021一个过滤器必须要实现javax.servlet.Filter, ... -
JSP拾遗(六)——Servlet
2009-08-01 18:42 960在典型的J2EE中,我们的应用是通过应用服务器(如TOMCAT ... -
JSP拾遗(五)——jsp文件包含指令
2009-07-12 19:36 2195<%@include file=”fileName” ... -
JSP拾遗(四)——jsp页面标签
2009-07-10 22:41 1905第二节中,我们通过JSP编译成的java源文件对比出了 ... -
JSP拾遗(三)——jsp内置对象
2009-07-08 22:40 1230在看本章介绍的jsp ... -
JSP拾遗(一)——初识JSP
2009-06-16 21:53 1173我的java编程学习,即是从jsp开始。 什么是jsp ...
相关推荐
《Java Web开发基础——从Servlet到JSP》是一本深入探讨Java Web开发的教程,主要涵盖了从基础的Servlet到高级的JSP技术。这个压缩包包含的源代码是该书教学内容的实践部分,旨在帮助读者更好地理解和应用所学知识。...
【JSP源码——jsp+servlet+javaBean实现MVC】是基于Java Web技术构建的一种经典MVC(Model-View-Controller)模式的应用实例。在Web开发中,MVC模式被广泛采用,它将应用程序的业务逻辑、数据处理和用户界面分离,...
在IT行业中,尤其是在Web开发领域,`HttpSession`、`jsp`和`servlet`是三个非常重要的概念。这里我们将深入探讨这些技术,并结合一个名为"web26_session5示例1"的压缩包文件,来解析它们在实际应用中的综合运用。 ...
2. **音乐搜索**:用户可以按歌曲名、歌手名等关键字搜索音乐,这需要Servlet处理搜索请求,查询数据库,并将结果返回到JSP页面。 3. **播放列表**:用户可以创建、编辑和删除播放列表,Servlet需要处理这些操作,...
通过这些源文件,学习者可以跟随章节逐步深入,从基础概念到进阶应用,全方位地掌握JSP网络编程技术。实践中,可以通过运行和修改代码,加深对JSP工作原理的理解,从而提高实际开发能力。同时,结合理论讲解和实际...
### Servlet与JSP深入详解:基于Tomcat的Web开发 #### 一、Servlet技术概述 Servlet是一种用Java编写的服务器端应用程序接口(API),它扩展了Java Web开发的功能。Servlet可以响应HTTP请求,并且能够处理复杂的...
### JSP核心技术——JSP引擎内幕 #### 一、JSP引擎的工作原理 JSP(Java Server Pages)是一种基于Java的服务器端脚本技术,它允许开发者将动态内容嵌入到HTML网页中。JSP的核心功能是通过JSP引擎来实现的。JSP...
《库存商品管理(jsp)——试题讲解源码及资料》 在IT行业中,库存商品管理是企业运营的重要组成部分,尤其在电子商务与供应链管理领域更是不可或缺。本资源集合以"库存商品管理"为主题,通过JSP(JavaServer Pages...
【jsp+servlet 网上书城项目】是一个典型的Web应用程序示例,它结合了JavaServer Pages (JSP) 和Servlet技术,用于构建一个在线图书销售平台。该项目旨在帮助学习者掌握这两种核心技术,并且提供了Oracle数据库支持...
7. **JSP的生命周期和状态管理**:理解JSP页面从加载到销毁的过程,以及session和cookie等在管理用户状态中的应用。 8. **安全性与性能优化**:探讨JSP开发中的安全问题,如防止SQL注入和XSS攻击,以及提高JSP应用...
在本教程的"jsp网络编程——源文件(01——05)"中,我们将逐步学习JSP的基本概念、语法结构以及常用功能。 **章节概览** 1. **chap01:JSP基础** - JSP的起源与发展 - JSP与HTML、Servlet的关系 - JSP基本结构...
总之,这个JSP交友网站项目涵盖了Web开发的多个方面,从基础的JSP语法到高级的MVC设计模式,从数据库操作到前端交互,从服务器部署到安全防护,都是学习和实践JSP程序设计的绝佳案例。通过这个项目,开发者可以提升...
【标题】"jsp网络编程——源文件(10——11)"主要涵盖了JSP(Java Server Pages)技术在网络编程中的应用,这是Java Web开发的重要组成部分。这两个章节可能包括了第10章和第11章的学习内容,涉及到JSP的基础语法、...
【标题】"jsp网络编程——源文件(12——13)"主要涵盖了JSP(Java Server Pages)技术在网络编程中的应用,这部分内容通常包括了第十二章和第十三章的知识点。JSP是Java平台上的动态网页技术,它允许开发者在HTML或...
通过"JSP网络编程——多媒体(1——3)"的学习,初学者不仅可以掌握JSP的基本语法,还能了解到如何在实际项目中有效地处理和展示多媒体内容,这对于构建富媒体的Web应用程序至关重要。这个系列教程对于想要提升自己...
【jsp开发案例——租房系统jsp列子】 在IT行业中,JavaServer Pages(JSP)是一种广泛使用的服务器端脚本语言,用于动态网页开发。本案例是基于JSP技术开发的一个租房系统,它涵盖了用户登录、房屋信息查询以及会员...
在《Head First Servlet & JSP》中,你会了解到如何创建Servlet,包括Servlet生命周期、服务方法、初始化参数、会话管理以及如何在Servlet间进行协作。 JSP则是另一种用于生成动态网页的技术,它将HTML模板与Java...
**网络程序设计——JSP从入门到精通** JSP(JavaServer Pages)是Java平台上的一个标准技术,用于创建动态网页。它结合了HTML、Java代码和Java Servlet技术,允许开发者在服务器端生成HTML响应,提供了高效且灵活的...
JSP源码——ERP管理系统(jsp+servlet).zip
【jsp小游戏——猜数字相加大小】是一款基于JavaServer Pages(JSP)技术开发的简单游戏,旨在帮助用户更好地理解和掌握JSP的基本用法。在这个游戏中,系统会随机生成两个数字,玩家需要猜测这两个数字相加的结果是...