- 浏览: 22737 次
- 性别:
- 来自: 广州
最近访客 更多访客>>
最新评论
-
guoyanxi:
感谢,正准备考
IBM AIX认证资料(含000-103&000-104题库) -
nrxqq:
不是很懂
Swing中的线程探究-1
JSP介绍
JSP是一种动态的服务器端语言,其页面由HTML代码和嵌入其中的Java代码组成,服务器在页面被客户端请求后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
JSP的语法介绍
一个典型的JSP页面主要有5种元素,分别是:
1)模板元素:模板元素是指在JSP页面中的静态HTML(或XHTML等)内容,一般JSP的开发人员不怎么关心,主要由美工负责。
2)脚本元素:脚本元素的内容主要是Java代码,由声明、表达式和脚本(Scriptlets)组成。
3)指令元素:指令元素在编译期起作用,主要用来提供全局信息,如设置全局变量、声明类和要实现的方法等,它们不会向客户端输出任何东西,所有的指令都在JSP整个文件范围内有效,主要有page指令、include指令和taglib指令。
4)动作元素:动作元素在运行期起作用,在JSP规范里定义了一系列的标准动作,这些动作都用jsp作为前缀,当然程序员也可以开发自己的动作元素。在考试中常考的动作元素主要有<jsp:param>、<jsp:include>、<jsp:setProperty>和<jsp:useBean>。
5)注释元素:在JSP中注释分为HTML注释、隐藏注释和Java脚本中的注释,其中HTML注释使用<!--注释-->的形式,而隐藏注释使用<%--注释--%>,并且隐藏注释将不会发送给客户。
JSP的内建对象
JSP的内建对象也是考试中经常考查的内容,需要提醒的是必须注意每个内建对象所对应的Servlet类(如request对应javax.servlet.ServletRequest接口),并且注意每个对象的作用域。关于这部分的内容教程很多,这里不再赘述。
JSP的生命周期
JSP的生命周期与Servlet的生命周期息息相关,因为JSP会在第一次执行的时候转译成Servlet的Java代码,然后再编译为class文件,Servlet的声明周期有5个,而JSP则有7个,分别是:
1)转换:将JSP源文件转换成Servlet源代码。
2)编译:将Servlet源代码编译成类文件。
3)装载:将类文件装载到服务器中。
4)创建:创建一个Servlet类的实例。
5)初始化:调用jspInit()方法,最终调用Servlet类的init()方法。
6)服务:调用_jspService()方法,最终调用Servlet类的service()方法,将请求传递给相应的doXXX()方法处理。
7)销毁:调用jspDestroy()方法,最终调用Servlet类的destroy()方法,销毁对象。
注:jspInit()方法和jspDestroy()方法定义在javax.servlet.jsp.JspPage接口中,而_jspService()方法则定义在javax.servlet.jsp.HttpJspPage接口中。
JSP的编译原理
JSP在第一次执行的时候会自动被转译,然后这个JSP就驻留在内存当中。Servlet容器把JSP转译成Servlet后自动编译该Servlet,不需要程序员手动去编译。如果使用的Servlet容器是Tomcat,可以到其安装目录下的work/Catalina/localhost下找到相应的项目文件夹来查看被转译成的Servlet源文件。比如下面是一个简单的JSP页面
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>JSP Page</title> </head> <body> </body> </html>
将会被Servlet容器转换成如下的Java源文件
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory(); private static java.util.List _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.AnnotationProcessor _jsp_annotationprocessor; public Object getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName()); } public void _jspDestroy() { } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { 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 { 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; out.write("\n"); out.write("\n"); out.write("<html>\n"); out.write(" <head>\n"); out.write(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">\n"); out.write(" <title>JSP Page</title>\n"); out.write(" </head>\n"); out.write(" <body>\n"); out.write(" </body>\n"); out.write("</html>\n"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }
这里提示几个要点
1)每个类文件必须继承HttpJspBase类,HttpJspBase类继承了HttpJspPage接口,所以它也拥有jspInit()、_service()和jspDestroy()方法,并且注意HttpJspBase类中的_jspService()方法声明为abstract,不允许重写,但是service()方法则可以,但是不推荐。如果想了解更多可以查看Tomcat提供的JavaDoc文档和源代码。
2)_jspInit()方法是JSP初始化时调用的方法,可以在JSP页面中重写该方法,并提供一些初始化工作。
3)_jspDestroy()方法是销毁时调用的方法,可以重写。
4)_jspService()方法是JSP处理客户请求的方法,该方法由Servlet容器自动定义,不能在JSP页面中重写该方法。
5)JSP页面中的<%!%>被直接转译成成员变量和成员函数。
6)JSP页面中的<%%>被直接转译成Java代码并放到_jspService()方法中。
7)JSP页面中的<%@page%>被转译成一条条的response.setContentType()方法。
……
JSP文档
在JSP规范中定义了两种语法编写JSP页面,一种是标准的JSP语法格式,大多数的资料介绍的也是这种语法格式;另一种是XML语法格式。使用标准语法的JSP文件叫做JSP页面,使用XML语法的JSP文件叫做JSP文档。JSP页面的后缀名是jsp,而JSP文档的后缀名是jspx。下面给出一个JSP文档的例子
<?xml version="1.0" encoding="UTF-8"?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> <jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/> <!-- any content can be specified here, e.g.: --> <jsp:element name="text"> <jsp:attribute name="lang">EN</jsp:attribute> <jsp:body>Hello World!</jsp:body> </jsp:element> </jsp:root>
使用JSP文档一定要遵照XML格式良好的定义,由于JSP文档是由容器解释运行的,所以容器会检查JSP文档的格式,一旦出错则报告。使用前需要向容器表明这是一个JSP文档,方法有三种:
1)在web.xml中使用<jsp-property-group>元素的子元素<is-xml>来表明。
2)如果web.xml文件遵循Servlet 2.4规范,那么容器会自动将后缀名jspx的文件看成JSP文档。
3)如果JSP页面的元素是<jsp:root>,那么该文件就是JSP文档。
JSP文档使用XML名称空间来标识标准的指令、脚本、动作元素和自定义的动作元素。JSP规范中定义的标准动作元素在"http://java.sun.com/JSP/Page"名称空间中,如:
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
如果想使用JSTL,则必须声明如下:
<jsp:root xmlns:c="http://java.sun.com/jsp/jstl/core" version="2.0">
有一点需要注意的是在JSP文档中允许使用的指令元素只有page和include,taglib是不允许使用的,考试中经常会出现,如:
<jsp.directive.page language="java">和<jsp.directive.include file="">
并且在JSP文档中的注释只能采用HTML类型的注释,尽管这可能会在客户端暴露代码的实现细节问题。
发表评论
-
SCWCD之路——结束语
2010-01-12 19:46 1245写到这里,整个专题终于告一段落了。总的来说,S ... -
SCWCD之路——附加内容
2010-01-12 19:32 907介绍 ... -
SCWCD之路——表达式语言
2010-01-12 18:55 1024介绍 EL(Expressio ... -
SCWCD之路——标准标签库开发
2010-01-11 20:58 914介绍 JSTL(JSP ... -
SCWCD之路——自定义标签库开发
2010-01-11 16:45 936介绍 ... -
SCWCD之路——J2EE设计模式
2010-01-11 15:15 1399概述 J2EE目前的设计模式有 ... -
SCWCD之路——Web应用的安全性
2010-01-10 16:14 1399概述 Servlet技术规范规 ... -
SCWCD之路——Web应用的结构和部署
2010-01-10 14:33 1246概述 在Web应用中,有着其一 ... -
SCWCD之路——Servlet技术
2010-01-08 20:48 1223Servlet技术介绍 Ser ... -
SCWCD之路——前言
2010-01-07 20:43 1020SCWCD(Sun Certified Web ...
相关推荐
标题“SCWCD之路——前言”暗示了这是一个关于SCWCD(Sun Certified Web Component Developer)认证的学习历程或指南的开篇部分。SCWCD是Java EE(现在称为Jakarta EE)开发人员的一个专业认证,它专注于Web组件的...
标题“SCWCD之路——结束语”表明这是一个关于SCWCD认证学习的总结或结语。SCWCD,全称Sun Certified Web Component Developer,是Oracle(原Sun Microsystems)推出的一个Java Web开发领域的专业认证,主要考察...
本篇文章将探讨“SCWCD之路——Web应用的安全性”,并结合提供的文件`catalina.jar`和`tomcat-juli.jar`,深入讲解相关的安全知识点。 首先,让我们理解`catalina.jar`和`tomcat-juli.jar`。这两个文件都是Apache ...
"SCWCD之路——标准标签库开发"是一个关于Java Web开发中的重要主题,特别是与Servlet、JSP和自定义标签库相关的知识。SCWCD(Sun Certified Web Component Developer)是Oracle公司提供的一个Java Web开发认证,它...
这个认证主要针对那些希望在Java平台上从事Web应用程序开发的专业人士,特别是涉及到Servlet和JSP(JavaServer Pages)技术的开发者。 Servlet技术是Java Web开发的核心部分,它是一种用于扩展服务器功能的Java API...
SCWCD,全称为Sun Certified Web Component Developer,是Sun Microsystems(现为Oracle的一部分)提供的一个专业认证,主要针对Java Web应用开发中的Servlets和JavaServer Pages (JSP)技术。这个认证测试开发者在...
SCWCD,全称Sun Certified Web Component Developer,是Oracle(原Sun Microsystems)推出的Java EE(企业版)认证考试之一,主要考察开发者在构建Web应用程序方面的能力,包括Servlet、JSP、JSTL、EL表达式语言等...
这个认证主要针对那些希望在Java EE平台上从事Web组件开发的专业人士,包括Servlet、JSP(JavaServer Pages)以及相关的技术。SCWCD证书证明了持有者具备创建动态Web应用程序的能力。 一、Servlet技术 Servlet是...
SCWCD,全称Sun Certified Web Component Developer,是Oracle(原Sun Microsystems)推出的Java Web开发专业认证,专门针对Servlet和JSP技术。这个认证对于那些希望深入理解Java Web应用程序开发的程序员来说非常...
这个认证主要针对Servlet、JSP(JavaServer Pages)以及EL(Expression Language)等技术。在准备SCWCD认证考试的过程中,实际题目和答案的练习是非常关键的环节。 这份名为“SUN SCWCD认证考试真实题目一(有答案)...
这本书以其独特的教学方式,深入浅出地讲解了SCWCD考试所涵盖的核心技术,包括JavaServer Pages (JSP) 和Servlets。 SCWCD是Java Web开发领域的专业认证,主要考察开发者对Web组件设计和实现的理解能力。通过这个...
《Head First Servlet & JSP》是一本非常受欢迎的IT教程,专为准备SCWCD(Sun Certified Web Component Developer)认证的读者设计。本书以其独特的学习风格,深入浅出地介绍了Servlet和JSP(JavaServer Pages)这两...
SCWCD,全称Sun Certified Web Component Developer,是Java EE认证的一部分,主要涉及Servlet和JSP的开发。本文将深入探讨SCWCD学习中的关键概念,包括HTTP协议、Servlet容器的功能、HTTP方法的区别以及Servlet生命...
SCWCD,全称Sun Certified Web Component Developer,是Oracle(原Sun Microsystems)为Java开发者提供的一项专业认证,主要测试考生在构建动态Web应用程序方面的能力,包括Servlet、JSP(JavaServer Pages)、...
SCWCD,全称Sun Certified Web Component Developer,是Oracle(原Sun Microsystems)为Java开发者提供的一项专业认证,主要测试考生在开发Java Web应用程序方面的能力,包括JSP(JavaServer Pages)、Servlet、...