JSP 的“4379”
2016-02-17 22:18
591 查看
1.JSP 的“4379”
1.1导言
上一节我们说到的是JSP的基本原理,今天我们就要来说JSP的“4379”。那么何为“4379”呢?其实这是笔者的说法。“4379”是:JSP的4种基本语法、JSP的3个编译指令、JSP的7个动作指令、JSP脚本中的9个内置对象(注:以上是我们常用的)。接下来,笔者将会细说JSP的“4379”。1.2 JSP的4种基本语法
JSP的4种基本语法,其实就是:JSP注释、JSP声明、JSP输出表达式、 JSP的脚本。下面笔者用表格的形式来说明。基本语法 | 格式 | 例子 | 注意 |
JSP注释 | <%--注释内容--%> 或 <!—注释内容--> | <%--JSP注释部分--%> <!—HTML注释部分--> | |
JSP声明 | <%!声明部分%> | <!-- 下面是JSP声明部分 --> <%! //声明一个整形变量 public int count; //声明一个方法 public String info() { return "hello"; } %> <body> <% //将count的值输出后再加1 out.println(count++); %> <br/> <% //输出info()方法的返回值 out.println(info()); %> | 由于JSP声明语法的变量和方法对应于Servlet类的成员变量和方法,所以JSP声明部分定义的变量和方法可以使用private、public等访问控制符修饰,也可以使用static修饰,将其变成类属性和类方法。但不能使用abstract修饰声明部分的方法,因为抽象方法将导致JSP对应Servlet变成抽象类,从而导致无法实例化。 |
JSP输出表达式 | <%=JSP输出表达式%> | <%! public int count; public String info() { return "hello"; } %> <body> <!-- 使用表达式输出变量值 --> <%=count++%> <br/> <!-- 使用表达式输出方法返回值 --> <%=info()%> | 输出表达式语法后不能有分号 |
JSP脚本 | 包含Java代码的放入到<% %>中 | <table bgcolor="#9999dd" border="1" width="300px"> <!-- Java脚本,这些脚本会对HTML的标签产生作用 --> <% for(int i = 0 ; i < 10 ; i++) { %> <!-- 上面的循环将控制<tr>标签循环 --> <tr> <td>循环值:</td> <td><%=i%></td> </tr> <% } %> <table> | 实际上不仅JSP小脚本部分会转化成_jspService方法里的可执行代码,JSP页面里的所有静态内容都将由_jspService方法里输出语句输出,这就是JSP脚本可以控制JSP页面中静态内容的原因。由于JSP脚本将转换成_jspService方法里的可执行性代码,而java语法不允许在方法里定义方法,所以脚本里不能定义方法。 |
1.3 JSP的三个编译指令
1.3.1 三个编译指令
对于JSP来说,主要的编译指令有以下三个:1) page:该指令是针对当前页面的指令
2) include:用于指定包含另一个页面
3) taglib:用于定义和访问自定义标签
使用编译指令的语法格式如下:
<%@ 编译指令名 属性名=”属性值”····%>
接下来笔者主要讲的是page和include指令,对于taglib指令笔者将在后面的JSP标签中讲解。
1.3.2 page指令
1) page指令通常用于JSP页面的顶端,而且一个JSP页面可以含有多个page指令。page指令的格式如下:<%
[language="Java"]
[extends="package.class"]
[import="package.class|package.*,..."]
[session="true|false"]
[buffer="none|8KB|size kb"]
[autoFlush="true|false"]
[isThreadSafe="true|false"]
[info="text"]
[errorPage="relativeURL"]
[contentType="mimeType[;charset=characterSet]"|"text/html;charSet=ISO-8859-1"]
[pageEncoding="ISO-8859-1"]
[isErrorPage="true|false"]
%>
2) page各属性的意义
属性 | 意义 |
language | 声明当前JSP页面使用的脚本语言的种类,因为页面是JSP页面,该属性的值通常都是java,该属性的默认值也是java,所以通常无须设置 |
extends | 该属性的默认值编译所产生的Java类所继承的父类,或所实现的接口 |
import | 用来导入包。下面几个包是默认自动导入的,不需要显式导入。默认导入的包有:java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.* |
session | 设定这个JSP页面是否需要HTTP Session |
buffer | 指定输出缓存区的大小。输出缓存区JSP内部对象:out用于缓存JSP页面对客户浏览器的输出,默认值为8KB,可以设置为none,也可以设置为其他的值,单位为KB |
autoFlush | 当输出缓存区即将溢出时,是否需要强制输出缓存区的内容。设置为true时为正常输出,如果设置为false,则会在buffer溢出时产生一个异常。 |
info | 设置该JSP程序的信息,也可以看做其说明,可以通过Servlet.getServletInfo()方法获取该值。如果在JSP页面中,可直接调用 getServletInfo()方法获取该值,因为JSP页面的实质就是Servlet。 |
errorPage | 指定错误处理页面。如果本页面产生了异常或者错误,而该JSP页面没有对应的处理代码,则会自动调用属性所指定的JSP页面。 |
isErrorPage | 设置本JSP页面是否为错误处理程序。如果该页面本身已是错误处理页面,则通常无须指定errorPage. |
contentType | 用于设定生成网页的文件格式和编码字符集,即MIME类型和页面字符集类型默认的MIME类型是text/html;默认的字符集类型为ISO-8859-1 |
pageEncoding | 指定生成网页的编码字符集 |
1.3.3 include指令
1) 使用include指令,可以将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句(如果有的话)。这是个静态的include语句,它把目标页面的其他编译指令也包含进来,但动态include则不会变。2) include既可以是包含静态的文本,也可包含动态的JSP页面。静态include编译指令会将包含的页面加入本页面,融合成一个页面,因此被包含页面甚至不需要是一个完事的页面。如果被嵌入的文件经常需要改变,建议使用<jsp:include>操作指令,因为它是动态的include语句
3) 例子:<%@include file=”scriptlet.jsp”%>
1.4 JSP的7个动作指令
动作指令与编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作。编译指令在将JSP编译成Servlet时起作用;而处理指令通常可替换成JSP脚本,它只是JSP脚本的标准化写法。下面笔者依然通过一张表格来说明。动作指令 | 说明 | 格式 | 例子 | 注意 |
jsp:forward | 执行页面转向,将请求的处理转发到下一个页面 | <jsp:forward page=”{relativeURL|<%=expresssion%>}”> {<jsp:param…/>} </jsp:forward> | <jsp:forward page="forward-result.jsp" <jsp:param name="age" value="29"/> </jsp:forward> <!--forward-result.jsp获取参数--> <%=request.getParameter("age")%> | forward拿目标页面代替原有页面,而include则拿目标页面插入原有页面 |
jsp:include | 用于引入动态一个JSP页面 | <jsp:include page=”{relativeURL|<%=expression%>}” flush=”true”/> 或 <jsp:include page=”{relativeURL|<%=expression%>}” flush=”true”> <jsp:param name=”paramterName” value=”parameterValue”/> </jsp:include> | <jsp:include page="scriptlet.jsp" /> | 静态导入是将被导入页面的代码完全融入,两个页面融入合成一个整体;而动态导入则在Servlet中使用include方法引入被导入页面的内容。 静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是在插入被导入页面的body内容。 动态还包含可以增加额外的参数 |
jsp:param | 用于传递参数,必须与其它支持参数的标签一起作用 | <jsp:param name=”paramterName” value=”parameterValue”/> | 可以与jsp:include、jsp:forward、jsp:plugin一起用 | |
jsp:plugin | 用于下载JavaBean或Applet到客户端执行 | |||
jsp:useBean | 创建一个JavaBean的实例 | <jsp:useBean id=”name” class=”classname” scope=”page|reques|sesion|application”/> | <jsp:useBean id=”p1” class=”linjw.Person” scope=”page”/> | page:该JavaBean实例仅在当前页面有效;request:该JavaBean实例在本次请求有效;session:该JavaBean实例在本次Session内有效;application:该JavaBean实例在本应用内一直有效 |
jsp:setProperty | 设置JavaBean实例的属性值 | <jsp:setProperty name=”BeanName” Proterty=”propertyName”/> | <jsp:setProperty name=”p1” property=”name” value=”linjw”/> | |
jsp:getProperty | 输出JavaBean实例的属性值 | <jsp:getProperty name=”BeanName” proterty=”protertyName” | <jsp:getProperty name=”p1” proterty=”name”/> |
1.5 JSP 脚本中的9个内置对象
JSP脚本中包含9个内置对象,这9个内置对象都是ServletAPI接口的实例,只是JSP规范对它们进行了默认初始化(由JSP页面对应Servlet的_jspService()方法来创建这些实例化)。也就是说,它们已经是对象,可以直接使用。一样的,笔者通过表格形式来说明这9个内置对象。内置对象 | 说明 |
application | javax.servlet.ServletContext的实例,该实例代表JSP所属的Web应用本身,可用于JSP页面,或者在Servlet之间交换信息。常用的方法有getAttribute(String attName)、setAttribute(String attName,String attValue)和getInitParameter(String paramname)等 |
config | javax.servlet.ServletConfig的实例,该实例代表JSP的配置信息。常用的方法有getInitParameter(String parameterName)和getInitParameternames()等。事实上,JSP通常无须配置,也就不存在配置信息。因此,该对象更多地在Servlet中有效 |
exception | java.lang.Throwable的实例,该实例代表其他页面中的异常和错误。只有当页面是错误信息处理页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等 |
out | javax.servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流内容 ,形成HTML页面 |
page | 代表该页面本身,通常没有太大用处。也就是说Servlet中的this,其类型就是生成的Servlet类,能用page的地方就可用this. |
pageContext | javax.servlet.jsp.PageContext的实例,该对象代表JSP页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有getServletContext()和getServletConfig()等 |
request | javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户的请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数使用必须使用该对象。常用的方法有:getParameter(String paramname)、getParameterValues(String paramName)、setAttribute(String attrname,Object attrValue)、getAttribute(String attrName)和setCharacterEncoding(String env)等 |
response | javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的响应。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。而response对象常用于重定向,常用方法有getOutputStream()、sendRedirect(java.lang.String.location)等 |
session | javax.servlet.http.HttpSession的实例,该对象代表一次会话。当客户端浏览器与站点建立起连接时,会话开始;当客户端关闭浏览器时,会话结束。常用的方法有:getAttribute(String attrName)、setAttribute(String attrName,Object attrValue)等 |
1.6总结
JSP的4种基本语法、3个编译指令、7个动作指令和脚本中的9个内置对象,其实这些都是JSP中的简单用法,也是要学习JSP的必须了解的知识。相关文章推荐
- 自学javascript笔记_自用_解析W3school的代码
- 第2章{ 2-14 [选学]读懂bee的gulpfile.js }
- 第2章{ 2-13 使用抓包工具线上调试 }
- 第2章{ 2-12 使用gulp构建kissy工程 }
- 第2章{ 2-10 使用依赖表控制combo }
- js模拟Ctrl+C复制、Ctrl+V粘贴功能之tabindex、focus、keyCode
- 第2章{ 2-9 别名机制 }
- 第2章{ 2-8 使用combo配置减少请求 }
- 封装通信接口数据的方法-json
- 第2章{ 2-6 包配置 }
- javascript console 函数详解 js开发调试的利器
- 第2章{ 2-5 模块使用 }
- 第2章{ 2-4 Kissy模块规范 }
- JSP总结1
- 第2章{ 2-3 一个模块一个js文件 }
- 第2章{2-2 kissy工程构建器 — Bee }
- javascript 函数式编程
- hammer.js初识
- js判断字符串中出现次数最多的字符 并统计出现次数
- JavaScript eval() 函数