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. Ubuntu 16.04.5安装docker

    一:安装Ubuntu 16.04.5   下载地址: 1.magnet:?xt=urn:btih:C3C5FE05C329AE51C6ECA464F6B30BA0A457B2CA 2.http://m ...

  2. Mysql创建、删除用户[转]

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 ...

  3. Ionic——下一代 APP 开发框架

    http://www.tuicool.com/articles/iY3ENvY 最近 Facebook React 团队释出了 React Native, 用来构建 Mobile Native 应用. ...

  4. python3入门之赋值语句介绍

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 本节主要介绍赋值语句,以及几种特殊的赋值.下面附有之前的文章: python3入门之print,import,input介绍 python入门之字 ...

  5. PHP curl 上传文件版本兼容问题

    [摘要:做微疑开辟挪用微疑接心上传文件时,总是返回 {"errcode":41005,"errmsg":"media data missing hin ...

  6. blog断更通知

    在HE无人进队的阴影下,考完APIO和CTS就真走了..不想写blog了,去冲刺2020高考了(滚回去学文化课了)

  7. C#使用Redis的基本操作

    一,引入dll 1.ServiceStack.Common.dll 2.ServiceStack.Interfaces.dll 3.ServiceStack.Redis.dll 4.ServiceSt ...

  8. SQL的CharIndex用法

    和C#一样判断一个字符串中是否包含另一个字符串举例1:select charindex('test','This Test is test!!')->返回 6 (空格也算一个 下标从1开始)2: ...

  9. 2019.4.2 HTML相关

    HTML页面的基本结构 html标签 页面的设置和文件的导入(页面标题) 要显示在页面上的标签 标签 h1---h6:一到六级标题 hr:分割线 br:换行 p:段落 em:斜体 strong:加粗 ...

  10. Vmtools的安装步骤

    目的:实现win和centos之间的相互复制功能 1.进入centos 2.点击vm菜单的->虚拟机->安装VMware Tools 3.centos会出现一个vm的安装包 4.将文件移动 ...