1.在页面上可以不用声明直接使用的对象称为jsp页面的隐含对象。使用<% %>编写的java代码在_jspService方法中,如下:

 public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException { final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null; }

写在_jspService方法中的java代码可以用到的jsp页面的隐含对象包括:

PageContext pageContext;
HttpSession session;
ServletContext application;
ServletConfig config;
JspWriter out;
Object page=this;
HttpServletRequest request;
HttpServletResponse response;
exception;

1.request:HttpServletRequest的一个对象;

2.response:HttpServletResponse的一个对象(在jsp页面几乎不会调用response对象);

3.pageContext:页面上下文,是PageContext的一个对象,可以从该对象中获取到其他8个隐含对象,也可以获取到当前页面的其他信息;

4.session:代表浏览器和服务器的一次会话,是HttpSession的一个对象;

5.application:代表当前web应用,是ServletContext对象;

6.config:当前JSP对应的Servlet的ServletConfig对象(几乎不使用)。若需要访问当前JSP配置的初始化参数,需要通过映射的地址才可以。

7.out:JspWriter对象,调用out.println()可以直接把字符串打印到浏览器上。

8.page:指向当前JSP对应的Servlet对象的引用,但为Object类的方法,几乎不使用。

9.exception:只有咋辅助声明了page isErrorPage="true"时才可以使用。

其中page对象,request和response已经完成了实例化,而其它5个没有实例化的对象通过下面的方式实例化。

1 pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);
2 application = pageContext.getServletContext();
3 config = pageContext.getServletConfig();
4 session = pageContext.getSession();
5 out = pageContext.getOut();

2.JSP的基本语法

2.1 JSP模版元素

JSP页面中的静态HTML内容称为JSP模版元素,它定义了网页的基本骨架,即定义了页面的结构和外观。比如我新建一个,jsp文件,建好之后里面的内容如下:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'hello.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
This is my JSP page. <br>
</body>
</html>

在静态的HTML内容之中可以嵌套JSP的各种元素来产生动态内容和执行业务逻辑。

2.2 JSP表达式

JSP表达式提供了一个将java变量或表达式的计算结果输出到客户端的简化方式。它将要输出的变量或表达式直接封装在 <%= 和 %>之中。语法为:<%=变量或表达式%>。

例如,在上面创建的hello.jsp文件中,编写java代码:

<body>
<%
Date date=new Date();
out.println(date);
%>
<br>
<%=date%>
</body>
out.println(date);和<%=date%>的输出效果一致,运行后结果如下:

2.3 JSP脚本片段

JSP脚本片断(scriptlet)用于在JSP页面中编写多行Java代码。在JSP脚本片段中,可以定义变量,执行基本的程序运行,调用其他java类,访问数据库,访问文件系统等普通java程序所能实现的功能。语法:
    <%
            多行java代码
    %>

在<% %>中可以定义变量、编写语句,不能定义方法。需要注意:

1.JSP脚本片断中只能出现java代码,不能出现其它模板元素, JSP引擎在翻译JSP页面中,会将JSP脚本片断中的Java代码将被原封不动地放到Servlet的_jspService方法中。

2.JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。

3.在一个JSP页面中可以有多个脚本片断,在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。

多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况。单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句。

2.4 JSP声明

JSP页面中编写的所有代码,默认会翻译到servlet的service方法中, 而Jsp声明中的java代码被翻译到_jspService方法的外面。语法:
    <%!
        java代码
    %>
所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法 。多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象。

示例代码如下:

<%!
static {
System.out.println("loading Servlet!");
} private int globalVar = 0; public void jspInit(){
System.out.println("initializing jsp!");
}
%> <%!
public void jspDestroy(){
System.out.println("destroying jsp!");
}
%>

2.5 JSP注释

在JSP中,注释有两大类:

显式注释:直接使用HTML风格的注释:<!- - 注释内容- ->

隐式注释:直接使用JAVA的注释://、/*……*/

JSP自己的注释:<%- - 注释内容- -%>

JSP自己的注释和HTML注释的区别:JSP自己的注释可以阻止java代码的执行。

示例如下:

<body>
<%--
<% System.out.println("这个是JSP自己的注释"); %>
--%>
<!--
<% System.out.println("这个是HTML的注释"); %>
-->
</body>

运行后在控制台输出如下结果:

wx搜索“程序员考拉”,专注java领域,一个伴你成长的公众号!

javaweb之jsp的九个隐含对象与基本语法的更多相关文章

  1. Jsp的九个隐含对象

    JSP的9个隐含对象(内置对象) 不需要预先声明,就可以在jsp或者表达式中随意使用 out javax.servlet.jsp.JspWriter类型,代表输出流的对象.作业域:页面的执行期. re ...

  2. jsp中9个隐含对象

    在JSP中一共有9个隐含对象,这个9个对象我可以在JSP中直接使用.因为在service方法已经对这个九个隐含对象进行声明及赋值,所以可以在JSP中直接使用. - pageContext 类型:Pag ...

  3. 今天我们来认识一下JSP的九大内置对象

    虽然现在基本上我们都是使用SpringMVC+AJAX进行开发了Java Web了,但是还是很有必要了解一下JSP的九大内置对象的.像request.response.session这些对象,即便使用 ...

  4. EL表达式的语法介绍及九大隐含对象

    一. 简介 > JSP表达式 <%= %> 用于向页面中输出一个对象. > 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段. > 使用EL表达式来代 ...

  5. servlet的三大作用域对象和jsp的九大内置对象及其四大作用域对象

    servlet的三大作用域对象: request(HttpServletRequest) session(HttpSession): application(ServletContext):tomca ...

  6. jsp学习——九大内置对象

    JSP一共有九个内置对象,分别为:request.response.session.application.out.pagecontext.config.page.exception 博客:JSP的九 ...

  7. javaWEB总结(12):JSP页面的九个隐含对象

    前言 jsp本质上是一个servlet,而在jsp中有九个不用声明就可以使用的对象,我们叫他隐含对象.本文基于上文所写,如有需要可查看上一篇文章javaWEB总结(11):JSP简介及原理. 打开上次 ...

  8. jsp的九大内置对象及EL表达式的隐含对象

    九大内置对象: request         request对象具有请求域,即完成客户端的请求之前,该对象一直有效. response       response对象具有页面作用域,即访问一个页面 ...

  9. jsp的九大内置对象

    九大内置对象 jsp servlet   对象名 类型 使用范围 request HttpServletRequest 请求 浏览器--->服务器 response HttpServletRes ...

随机推荐

  1. RDLC报表的相关技巧四(报表内依照分组重置页码)

    报表中不同的组重置页数,如采购订单每一个PO显示的页数都是针对这个PO的,而不是总的页数. 步骤: 1.在各组实例中启用分页符2.用高级模式将组的属性中的ResetPageNumber设置为True3 ...

  2. HDU6184【Counting Stars】(三元环计数)

    题面 传送门 给出一张无向图,求 \(4\) 个点构成两个有公共边的三元环的方案数. 题解 orz余奶奶,orz zzk 首先,如果我们知道经过每条边的三元环个数\(cnt_i\),那么答案就是\(\ ...

  3. Java学习--多态

    1. 多态 多态:同一个对象(实物),在不同时刻体现出来的不同状态 多态的前提: A:要有继承关系 B:要有方法重写 C:要有父类引用指向子类对象 父类 f = new 子类() 多态中的成员访问特点 ...

  4. linux 内核知识参考

    内存映像 kcore:http://blog.csdn.net/dog250/article/details/5303663 elf文件 :http://www.cnblogs.com/xmphoen ...

  5. Web开发模式

    原文链接 开发模式的介绍(完善版) 在Web开发模式中,有两个主要的开发结构,称为模式一(Mode I)和模式二(Mode II). 首先我们来理清一些概念吧: DAO(Data Access Obj ...

  6. SPOJ 1811 Longest Common Substring(求两个串的最长公共子串 || 或者n个串)

    http://www.spoj.com/problems/LCS/ 题目:求两个串的最长公共子串 参考:https://www.cnblogs.com/autoint/p/10345276.html: ...

  7. BZOJ - 3263 三维偏序

    题意:定义元素为有序组(a,b,c),若存在x组(a_i,b_i,c_i)分别小于等于(a,b,c),则该元素的等级为x,求[0,n-1]等级的个数 cdq分治练手题,对a简单排序并去重,对b进行分治 ...

  8. 【车联网T-BOX】基于CANoe实现的远程服务业务自动化测试方案

    为满足项目过程中不同阶段绝大部分测试需求,更方便快捷构造测试场景,支持异常场景测试.更早介入,不依赖周边ECU的稳定情况,专注于被测ECU.更经济,不加油,不充电,时间节省,物料节省等维度考虑.我们需 ...

  9. linux 搭建gitlab server

    以root 身份进行登录linux 1.先安装相关依赖: sudo yum install -y curl policycoreutils-python openssh-server 2.开启SSH开 ...

  10. post调试postman

    载地址:https://www.getpostman.com/ 教程地址:http://www.cnblogs.com/s380774061/p/4624326.html