02. JSP 基本语法

JSP 基本语法

JSP 文件中除了可以直接包括 HTML 文本以外,还可以包含以下的内容:
  • JSP 指令(指示)语句
  • JSP 声明语句
  • JSP 脚本程序(Scriptlet)片段
  • JSP 表达式
  • JSP 行为指令语句
  • JSP 隐含对象



JSP 脚本程序片段


脚本程序可以包含任意量的Java语句、变量、方法或表达式,JSP的行为标签,表达式语句,JSTL 都可以看成是基于脚本程序的模板语言;
语法格式:
 
<% 代码片段; %>
以上的语法等同于以下的 XML 语句:
 
<jsp:scriptlet> 
    代码片段;
<jsp:scriptlet>
简单示例:
 
<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%
    out.println("Your IP address is " + request.getRemoteAddr());
%>
</body>
</html>

中文编码问题

如果要在页面中正确地显示中文,需要在 JSP 文件头部添加以下的指令语句:
 
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
等同于在 Servlet 中设置 response 对象的contentType、characterEncoding属性;

流程控制
JSP 中输出流程控制类似于 PHP 中的输出方式,如一个简单的循环输出如下:
 
...
<p>loop output test</p>
<% for(int i=0;i<10;i++){ %>
    <p>Count:<%= i %></p>
<% } %>
...
等同于:
 
...
<p>loop output test</p>
<% for(int i=0;i<10;i++){ 
    out.println("<p>Count:"+i+"</p>");
 } %>
...



JSP 声明语句

JSP 的声明语句用于声明与 JSP 对应的 Servlet 类的成员变量和方法,而在 JSP scriptlet 中声明的变量只是 JSP 对应 Servlet 类的 service() 方法中的局部变量;
语法格式:
 
<%! 声明语句[,声明语句,声明语句......]; %>
等同于以下 XML 标签
 
<jsp:declaration>
    声明语句;
<jsp:declaration>
示例
 
<%! int i=0; %>
<%! int a,b,c %>
<%! List<Integer> list = new ArrayList<Inetger>(); %>
<%! public int sum(int a,int b){
    return a+b;
}%>



JSP 表达式语句

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方;
表达式元素中可以包含任何符合Java语言规范的表达式,但是 不能使用分号来结束表达式;
语法格式:
 
<%= 表达式 %>
等同于以下 JSP 脚本程序片段
 
<% out.print(表达式) %>
等同于以下 XML 标签
 
<jsp:expression>
    表达式
</jsp:expression>
示例:
 
...
<p> Today is <%= new SimpleDateFormat("yyyy-MM-dd").format(new Date()) %> </p>
...



JSP 注释语句

JSP注释语句用于注释 .jsp 文件中的各种 JSP 语句
语法格式
 
<%-- 注释 --%>
在注释中如果要输出一些特殊常量的转义量:
<%<\%
%>%\>
'\'
"\''



JSP 指令语句

JSP指令语句用于设置与整个 JSP 页面相关的属性,页面编码,Java类库导入,与 JSP 对应的 Servlet 实现的接口等,一般放置在 JSP 文件的最开头部分
语法格式:
 
<%@ directive attribute="value">
主要的 directive 指令标签包括以下3种:
<%@ page ... %>
定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %>
包含其他文件
<%@ taglib ... %>
引入 JSTL 标签库的定义,也可以是自定义标签

Page 指令

page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
 
<%@ page attribute="value">
等同于以下XML 标签
<jsp:directive.page attribute="value" />
主要 attribute 属性参数如下:
buffer 指定out对象使用缓冲区的大小
autoFlush 控制out对象的 缓存区
contentType 指定当前JSP页面的MIME类型和字符编码
errorPage 指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends 指定servlet从哪一个类继承
import 导入要使用的Java类
info 定义JSP页面的描述信息
isThreadSafe 指定对JSP页面的访问是否为线程安全
language 定义JSP页面所用的脚本语言,默认是Java
session 指定JSP页面是否使用session
isELIgnored 指定是否执行EL表达式
isScriptingEnabled 确定脚本元素能否被使用
示例
 
<%@ page  contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" 
          import="java.io.*;java.util.List.*" %>

Include 指令

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行;
语法格式:
 
<%@ include file="文件的相对URL路径" %>
等同于以下XML语句
<jsp:directive.include file="文件的相对URL路径" %>
具体关于JSP的转发和包含见: 03. JSP 请求转发&包含

Taglib 指令

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签;
语法格式:
 
<%@ taglib uri="uri" prefix="prefixOfTag" %>
等同于以下XML标签
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />
具体用法见: 09. JSP 标准标签库 JSTL



JSP 行为标签

JSP行为标签使用 XML 语法结构来控制 servlet 引擎,它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等;
JSP 行为标签严格遵守 XML 格式,其语法如下:
 
<jsp:action_name attribute="value" />
动作元素基本上都是预定义的函数,JSP规范定义了一系列的标准动作,它用JSP作为前缀,可用的标准动作元素如下:
jsp:include 用于在当前页面中包含静态或动态资源
jsp:useBean 寻找和初始化一个JavaBean组件
jsp:setProperty 设置 JavaBean组件的值
jsp:getProperty 将 JavaBean组件的值插入到 output中
jsp:forward 从一个JSP文件向另一个文件传递一个包含用户请求的request对象
jsp:plugin 用于在生成的HTML页面中包含Applet和JavaBean对象
jsp:element 动态创建一个XML元素
jsp:attribute 定义动态创建的XML元素的属性
jsp:body 定义动态创建的XML元素的主体
jsp:text 用于封装模板数据
详细的各种动作标签的用法见: 03. JSP 动作标签




JSP 隐含对象

JSP 隐式对象 是 JSP 容器为每个页面提供的 Java Servlet 元素对象,可以直接使用它们而不用显式声明,隐式对象也被称为预定义变量;
JSP所支持的9大隐式对象:
requestHttpServletRequest类的实例
responseHttpServletResponse类的实例
outJspWriter类的实例,用于把结果输出至网页上
sessionHttpSession类的实例
applicationServletContext类的实例,与应用上下文有关
configServletConfig类的实例
pageContextPageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page类似于Java类中的this关键字
ExceptionException类的对象,代表发生错误的JSP页面中对应的异常对象
这些对象是 JSP 对应的 Servlet 的相应对象,其用法与在 Servlet 中基本一样;

application对象
  • application对象直接包装了 javax.servlet.ServletContext 类的对象实例;
  • 这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。
  • 通过向application中添加属性,则所有组成 web 应用的 JSP 文件都能访问到这些属性;

pageContext 对象
  • pageContext 对象是 javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面,该对象主要用来访问页面信息;
  • PageContext 对象存储了 request , response 对象的引用;application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。
  • pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL, 页面scope 等。
pageContext定义的比较重要的字段有以下4个:
PAGE_SCOPE
页面范围:(这是默认值)指定引用在此 PageContext 中继续可用,直到从当前 Servlet.service() 调用中返回。
REQUEST_SCOPE
请求范围:指定引用在与 Servlet 关联的 ServletRequest 中继续可用,直到当前请求完成
SESSION_SCOPE
会话范围(仅在此页面参与会话时有效):指定引用在与 Servlet 关联的 HttpSession(如果有)中继续可用,直到 HttpSession 无效
APPLICATION_SCOPE
应用程序范围:指定引用在 ServletContext 中继续可用,直到它被回收。
pageContext 对象 中的大部分方法引用自 javax.servlet.jsp.PageContext,在 JSP 中作为隐含对象中添加的比较的重要的方法有
removeArribute() ,用于移除 pageContext 中储存的对象的4个上面定义的字段;
如: pageContext.removeArribute("session"),移除 pageContext 中的 PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE 字段;
 pageContext.removeArribute("session", PAGE_SCOPE ) ,只移除其中的  PAGE_SCOPE 字段;





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值