jsp-指令标签和动作标签图
- 格式:ppt
- 大小:2.02 MB
- 文档页数:12
JSP 页面基本结构一个JSP 页面有两部分组成,一部分是JSP 页面的静态部分,如HTML ,CSS 标记等,用来完成数据显示和样式;一部分是JSP 页面的动态部分,如脚本程序,JSP 标签等,用来完成数据处理。
JSP 静态部分可以用任何通常使用的Web 制作工具编写,编写方式也和原来的一样。
JSP 页面动态部分包括四部分,分别为脚本元素(Scripting Element ),指令(D irective ),动作(Action )和注释。
脚本元素用来嵌入Java 代码,这些Java 代码将成为转换得到的Servlet 的一部分,脚本元素又可以划分为声明、表达式和脚本执行程序;JSP 指令用来从整体上控制Servlet 的结构;动作用来引入现有的组件或者控制JSP 引擎的行为。
为了简化脚本元素,JSP 定义了一组可以直接使用的变量(预定义变量),比如前面代码片断中的request 就是其中一例。
JSP 页面构成元素详细信息如图2-1所示:c图2-1 JSP 页面构成元素我们来看一个完整的JSP 案例,其中包括了大多数JSP 页面结构元素。
具体代行号0是page指令的用法。
行号1是taglib指令的用法。
行号2-8、33、34是HTML语法中的元素用法。
行号9-11、20-22是JSP隐藏注释的用法。
行号12是include指令的用法。
行号13、14、30、32是JSP动作元素的用法。
行号15是自定义标记,它与行号中的内容相关。
行号16是脚本元素中JSP表示式的用法。
行号17、18、19是脚本元素中JSP声明的用法。
行号23-29、31是脚本元素中JSP脚本小程序的用法。
JSP <jsp:include>包含动作<jsp:include>动作指令表示在当前的JSP页面中,包含静态或动态资源。
前面已经介绍过include指令,它是在JSP文件被转换成Servlet的时候引入文件,而这里的jsp:include动作不同,插入文件的时间是在页面被请求的时候。
<jsp:include>动作的文件引入时间决定了它的效率要稍微差一点,而且被引用文件不能包含某些JSP代码(例如不能设置HTTP头),但它的灵活性却要好得多。
<jsp:include>动作可以在当前JSP文件中包含txt文件、JSP文件、HTML文件和Servlet文件。
例如:下面对jsp:include标签具体格式中的参数说明如下:●page="{relativeURL | <%= expression %>}该参数为一相对路径,或者是代表相对路径的表达式。
如果路径以“/”开头,那么路径主要是参照JSP应用的上下关系路径。
如果路径是以文件名或目录名开头,那么这个路径就是正在使用JSP文件的当前路径。
●flush="true"注意,这里用户必须使用flush="true",不能使用false值,默认值为false。
●<jsp:param name="parameterName" value="{parameterValue | …/><jsp:param>子句能用来传递一个或多个参数给动态文件,用户可以在一个页面中使用多个<jsp:param>来传递多个参数。
<jsp:include>和<%@ include %>指令不同的是,<jsp:include>包含的内容可以是动态改变的,它在执行时才确定,而<%@ include %>包含的内容是固定不变的,一经编译,就不能改变。
jsp:include动作指令与include指令include动作指令可以在JSP页⾯中动态包含⼀个⽂件,这与include指令不同,前者可以动态包含⼀个⽂件,⽂件的内容可以是静态的⽂件也可以是动态的脚本,⽽且当包含的动态⽂件被修改的时候JSP引擎可以动态对其进⾏编译更新。
⽽include指令仅仅是把⼀个⽂件简单的包含在⼀个JSP页⾯中,从⽽组合成⼀个⽂件,仅仅是简单的组合作⽤,其功能没有include动作指令强⼤。
includeActon.jsp:<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%><html><head><title>include动作指令使⽤⽰例程序</title></head><body><font size="2"><jsp:include flush="true" page="header.txt"></jsp:include>这是⼀个JSP动作标签include的使⽤⽰例程序。
<br><jsp:include flush="true" page="footer.jsp"></jsp:include></font></body></html>header.txt:这⾥⽤include动作指令包含⼀个静态的⽂本⽂件。
<br>footer.jsp:<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%><html><body><%out.print("这⾥⽤include动作指令包含⼀个动态的JSP页⾯!");%></body></html>include.jsp:<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%><html><head><title>include指令使⽤⽰例程序</title></head><body><font size="2">这是include指令的使⽤⽰例程序。
一、Include指令<jsp:include>标签表示包含一个静态的或者动态的文件。
语法:<jsp:include page="path" flush="true" />or<jsp:include page="path" flush="true"><jsp:param name="paramName" value="paramValue" /></jsp:include>注:1、page="path" 为相对路径,或者代表相对路径的表达式。
2、flush="true" 必须使用flush为true,它默认值是false。
3、<jsp:param>子句能让你传递一个或多个参数给动态文件,也可在一个页面中使用多个<jsp:param> 来传递多个参数给动态文件。
二、Forward指令<jsp:forward>标签表示重定向一个静态html/jsp的文件,或者是一个程序段。
语法:<jsp:forward page="path"} />or<jsp:forward page="path"} ><jsp:param name="paramName" value="paramValue" />……</jsp:forward>注:1、page="path" 为一个表达式,或者一个字符串。
2、<jsp:param> name 指定参数名,value指定参数值。
参数被发送到一个动态文件,参数可以是一个或多个值,而这个文件却必须是动态文件。
JSP 使用JavaBean我们知道,JavaBean是从JSP页面中分离出来的Java代码,是JSP页面的动态部分。
在这里可以以面向对象的方式来看待JSP页面和JavaBean之间的关系,JSP 页面是一个独立的对象,JavaBean是一个独立的对象,其形式如图4-1所示:图4-1 JSP页面和JavaBean关系从上图中可以看出,JSP页面和JavaBean组件都是独立对象,JSP页面如果要使用JavaBean,必须通过相应语句调用JavaBean,即JSP动作标记。
1.useBean标记在JSP页面中使用JavaBean,必须在JSP页面中有调用另外一个JavaBean对象的语句。
该语句为JSP的动作标签<jsp:useBean>,<jsp:useBean>动作标签主要功能调用一个JavaBean,这里需要注意的是,在使用JavaBean的JSP页面中,最好使用import指令(<@page import=“包名.类名”>)把JavaBean类引入到JSP页面中。
记为useBean标记,语法格式为:上面useBean标记的两种语法格式作用相同,都是创建Bean或从服务器获得现有Bean。
第一个语法格式可以称为空标记,即没有结束标记;第二种语法格式为非空标记,有开始标记和介绍标记。
两种语法格式里面包含的属性含义相同。
●id属性表示在整个页面引用Bean的惟一值,即JavaBean类被引入到当前文件中实例化对象的名称。
该名称具有惟一性、区分大小写、第一个字符必须为字母和不允许有空格等特性。
可以在同一个JSP页面,多次引用一个JavaBean类,但需要为该JavaBean指定不同的id值。
●class属性表示在JSP页面中引入的JavaBean的类名,即JavaBean所处位置。
其写法有两种形式,第一种形式为JavaBean不属于特定的包,如下所示:第二种形式是JavaBean属于一个特定的包,其语法格式如下所示:有四个值,分别为page、request、session、application。
Jsp详解1.简介2.Jsp的运行原理3.Jsp的语法1.Jsp模板元素2.Jsp中的脚本表达式3.Jsp中的脚本片段4.Jsp的声明5.Jsp注释6.Jsp指令1.首先我们来看一下page指令的用法2.下面在来看一下include指令3.最后来看一下taglib指令7.Jsp中内置的9个隐式对象8.JSP标签库1.jspinclude标签2.jspforward标签3.jspparam或者jspparams标签4.jspuseBean标签jspsetProperty标签jspgetProperty标签9.Jsp中怎么排查错误简介:JSP全称是JavaServer Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
JSP这门技术的最大的特点在于,写jsp就像在写html,但:它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。
不管是JSP还是Servlet,虽然都可以用于开发动态web资源。
但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。
其原因为,程序的数据通常要美化后再输出:让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。
让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。
因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。
Jsp的运行原理:目标:Web服务器是如何调用并执行一个jsp页面的?Jsp页面中的html排版标签是如何被发送到客户端的?Jsp页面中的java代码服务器是如何执行的?Web服务器在调用jsp时,会给jsp提供一些什么java对象?思考:JSP为什么可以像servlet一样,也可以叫做动态web资源的开发技术?其实Jsp就是一个Servlet,所以我们要先介绍Servlet的相关技术,当我们第一次访问Jsp 的时候,Jsp引擎都会将这个Jsp翻译成一个Servlet,这个文件存放在Tomcat中的work目录中,这里,我们新建一个MyJsp.jsp页面,然后访问以下,我们看一下翻译后的源码:1.<%@ page language="java"import="java.util.*"pageEncoding="utf-8"%>2.3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01 Transitional//EN">4.<html>5.<head>6.7.<title>My JSP 'MyJsp.jsp' starting page</title>8.9.</head>10.11.<body>12. This is my JSP page. <br>13.</body>14.</html>1.package org.apache.jsp;2.3.import javax.servlet.*;4.import javax.servlet.http.*;5.import javax.servlet.jsp.*;6.import java.util.*;7.8.public final class MyJsp_jsp extends org.apache.jasper.runtime.HttpJspBase9.implements org.apache.jasper.runtime.JspSourceDependent {10.11.private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();12.13.private static java.util.List _jspx_dependants;14.15.private javax.el.ExpressionFactory _el_expressionfactory;16.private org.apache.AnnotationProcessor _jsp_annotationprocessor;17.18.public Object getDependants() {19.return _jspx_dependants;20. }21.22.public void _jspInit() {23. _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();24. _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class .getName());25. }26.27.public void _jspDestroy() {28. }29.30.public void _jspService(HttpServletRequest request, HttpServletResponse response)31.throws java.io.IOException, ServletException {32.33. PageContext pageContext = null;34. HttpSession session = null;35. ServletContext application = null;36. ServletConfig config = null;37. JspWriter out = null;38. Object page = this;39. JspWriter _jspx_out = null;40. PageContext _jspx_page_context = null;41.42.43.try {44. response.setContentType("text/html;charset=utf-8");45. pageContext = _jspxFactory.getPageContext(this, request, response,46.null, true, 8192, true);47. _jspx_page_context = pageContext;48. application = pageContext.getServletContext();49. config = pageContext.getServletConfig();50. session = pageContext.getSession();51. out = pageContext.getOut();52. _jspx_out = out;53.54. out.write("\r\n");55. out.write("\r\n");56. out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");57. out.write("<html>\r\n");58. out.write(" <head>\r\n");59. out.write(" \r\n");60. out.write(" <title>My JSP 'MyJsp.jsp' starting page</title>\r\n");61. out.write(" \r\n");62. out.write(" </head>\r\n");63. out.write(" \r\n");64. out.write(" <body>\r\n");65. out.write(" This is my JSP page. <br>\r\n");66. out.write(" </body>\r\n");67. out.write("</html>\r\n");68. } catch (Throwable t) {69.if (!(t instanceof SkipPageException)){70. out = _jspx_out;71.if (out != null && out.getBufferSize() != 0)72.try { out.clearBuffer(); } catch (java.io.IOException e) {}73.if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);74. }75. } finally {76. _jspxFactory.releasePageContext(_jspx_page_context);77. }78. }79.}我们看到,这个类继承了org.apache.jasper.runtime.HttpJspBase,要想看到这个类的源码,我1./*2. * Licensed to the Apache Software Foundation (ASF) under one or more3. * contributor license agreements. See the NOTICE file distributed with4. * this work for additional information regarding copyright ownership.5. * The ASF licenses this file to You under the Apache License, Version 2.06. * (the "License"); you may not use this file except in compliance with7. * the License. You may obtain a copy of the License at8. *9. * /licenses/LICENSE-2.010. *11. * Unless required by applicable law or agreed to in writing, software12. * distributed under the License is distributed on an "AS IS" BASIS,13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.14. * See the License for the specific language governing permissions and15. * limitations under the License.16. */17.18.package org.apache.jasper.runtime;19.20.import java.io.IOException;21.22.import javax.servlet.ServletConfig;23.import javax.servlet.ServletException;24.import javax.servlet.http.HttpServlet;25.import javax.servlet.http.HttpServletRequest;26.import javax.servlet.http.HttpServletResponse;27.import javax.servlet.jsp.HttpJspPage;28.import javax.servlet.jsp.JspFactory;29.30.import piler.Localizer;31.32./**33. * This is the super class of all JSP-generated servlets.34. *35. * @author Anil K. Vijendran36. */37.public abstract class HttpJspBase38.extends HttpServlet39.implements HttpJspPage40.41.42.{43.44.protected HttpJspBase() {45. }46.47.public final void init(ServletConfig config)48.throws ServletException49. {50.super.init(config);51. jspInit();52. _jspInit();53. }54.55.public String getServletInfo() {56.return Localizer.getMessage("");57. }58.59.public final void destroy() {60. jspDestroy();61. _jspDestroy();62. }63.64./**65. * Entry point into service.66. */67.public final void service(HttpServletRequest request, HttpServletResponse response)68.throws ServletException, IOException69. {70. _jspService(request, response);71. }72.73.public void jspInit() {74. }75.76.public void _jspInit() {77. }78.79.public void jspDestroy() {80. }81.82.protected void _jspDestroy() {83. }84.85.public abstract void _jspService(HttpServletRequest request,86. HttpServletResponse response)87.throws ServletException, IOException;88.}好吧,看到了,继承了HttpServlet类,所以说其实Jsp就是一个ServletJsp的语法:1.JSP模版元素2.JSP表达式3.JSP脚本片段4.JSP注释5.JSP指令6.JSP标签7.JSP内置对象8.如何查找JSP页面中的错误Jsp模板元素JSP页面中的HTML内容称之为JSP模版元素。