zoukankan      html  css  js  c++  java
  • 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领域,一个伴你成长的公众号!

  • 相关阅读:
    【git】Git回退代码到指定版本
    【ts】 VSCode自动编译TypeScript终端报错
    【js】 vue 2.5.1 源码学习(十二)模板编译
    【js】vue 2.5.1 源码学习 (十一) 模板编译compileToFunctions渲染函数
    【js】vue 2.5.1 源码学习 (十) $mount 挂载函数的实现
    【js】vue 2.5.1 源码学习 (九) 响应数组对象的变
    【js】Vue 2.5.1 源码学习 (八)响应式入口observe
    【js】vue 2.5.1 源码学习 (七) 初始化之 initState 响应式系统基本思路
    【js】 vue 2.5.1 源码学习(六) initProxy initLifeCycle 渲染函数的作用域代理
    antdv中表单添加电话校验
  • 原文地址:https://www.cnblogs.com/naihuangbao/p/9780862.html
Copyright © 2011-2022 走看看