javaweb之jsp的九个隐含对象与基本语法

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领域,一个伴你成长的公众号!

原文地址:https://www.cnblogs.com/naihuangbao/p/9780862.html