zoukankan      html  css  js  c++  java
  • JSP基本的语法、3个编译指令、7个动作指令、9个内置对象

    感谢原文作者:clnchanpin
    原文链接:https://www.cnblogs.com/clnchanpin/p/7338000.html

    一、jsp概述

    JSP是java server page的缩写,其**==本质是一个简化的servlet**,是一种动态网页技术标准。jsp页面是在HTML页面中嵌入java程序段。使用jsp开发的应用程序能够跨平台。

    二、jsp基本的语法

    2.1 jsp表达式

    jsp表达式用于向页面输出信息。语法格式例如以下:

    <%= 表达式 %>
    

    如:<%= 5+6 %>
    注意:<%=之间不能有空格,与后面的表达式之间能够有空格,另外没有语句结束符号;

    2.2 jsp声明标识

    声明标识用语在jsp页面中定义全局的变量或者方法,通过声明标识定义的变量和方法能够被整个jsp页面訪问。语法格式例如以下:

    <%!声明变量或者方法的代码%>
    

    <%!String str = "test";%>
    注意:<%!之间不能有空格,!与其后面的代码之间能够有空格

    2.3 jsp代码段

    代码片段就是嵌在jsp页面中的java代码或脚本代码。会在页面请求的处理期间被运行,java代码能够实现定义变量、流程控制等功能。脚本代码能够通过使用jsp内置对象在jsp页面输出内容、处理请求和响应、訪问session等,代码片段的语法格式例如以下:

    <% java代码或者脚本代码 %>
    

    2.4 jsp注释

    2.4.1 HTML注释

    HTML注释格式:

     <!-- html凝视 -->
    

    html凝视不会显示在网页中。在浏览器中查看源代码的时候能够看到注释信息

    2.4.2 代码片段注释

    由于代码片段即为java代码或者脚本代码,代码片段的注释和java语法一样。单行注释写在//之后,多行注释写在/* */ 之间,文档提示注释写在/***/之间。

    //单行注释
    
    /*
      多行注释第一行
      多行注释第二行
    */
    
    /**
      文档注释   
    */
    

    2.4.3 隐藏注释

    html注释在查看网页源代码的时候能够看到,所以严格来说这样的注释并不安全,jsp提供的隐藏注释在浏览器和查看源代码的时候都看不到。安全性更高。

    隐藏注释写在<%–---%>之间:

    <%--jsp隐藏注释 --%>
    

    2.4.4 动态注释

    在html注释中嵌入jsp代码片段能够构成动态的html注释文本。
    演示样例:

    <!-- tody is <%=new Date()%>.动态注释 -->
    

    演示样例

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.util.*,java.util.ArrayList"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>hello world</title>
    </head>
    <body>
        <h1>jsp基本的语法</h1>
        <!--  html注释-->
        <!-- tody is <%=new Date()%>.动态注释 -->
        <%--jsp隐藏注释 --%>
        <%!String str = "test"; //jsp声明%>
        <%
            /**
              文档注释
            */
            //单行注释
    
            /*
              多行注释1
              多行注释2
            */
            String hello = "hello world";
            out.println(hello + "<br>");
            for (int i = 1; i <= 9; i++) {
                for (int j = 1; j <= i; j++) {
                    out.println(i + "*" + j + "=" + j * i + "&nbsp;&nbsp;&nbsp;&nbsp;");
                }
                out.println("</br>");
            }
            out.println(str);
        %>
    </body>
    </html>
    

    浏览器訪问:
    在这里插入图片描述

    三、jsp的3个编译指令

    jsp编译指令是通知jsp引擎的消息,它不直接生成输出,编译指令有默认值。常见的编译指令有3个:

    • page指令:该指令是针对当前页面的指令。
    • include指令:用于指定包括还有一个页面。
    • taglib指令:用于定义和訪问自己定义标签。

    编译指令的语法格式例如以下:

    <%@ 编译指令名 属性名1="属性值" 属性名2"属性值" ...  %>
    

    3.1 page指令

    pag指令经常使用属性

    属性 定义
    language =“语言” 主要指定JSP 容器 要用什么语言来编译JSP页。JSP 1.2 规范中指出,眼下仅仅能够使用Java 语言。只是未来不排除添加其他语言。如C、C++、Perl 等等。默认值为Java语言
    extends = “基类名” 主要定义此JSP 网页产生的Servlet 是继承哪个父类
    import= “包名” 定义此JSP 网页能够使用哪些Java类库
    session=”true或false” 决定此JSP 网页能否够使用session 对象。

    默认值为true

    buffer=”none或size in kb” 决定输出流(output stream) 是否有缓冲区。默认值为8KB 的缓冲区
    autoFlush=”true 或false” 决定输出流的缓冲区是否要自己主动清除,缓冲区满了会产生异常(Exception)。默认值为true
    isThreadSafe=”true 或 false” 告诉JSP 容器,此JSP 网页能否同一时候处理多个请求。默认值为true。假设此值设为false。 转义生成的Servlet会实现SingleThreadModel接口。
    info =”text” 表示此JSP 网页的相关信息
    errorPage=”error_url” 表示假设发生异常错误时。网页会被又一次指向指定的URL
    isErrorPage=”true或false” 表示此JSP Page 是否为专门处理错误和异常的网页
    contentType = “ctinfo” 表示MIME 类型和JSP 网页的编码方式,其作用相当于HttpServletResponse接口的setContentType()方法

    3.2 include指令(静态包含)

    include指令能够将一个外部文件嵌入到当前jsp文件里,同一时候解析这个页面中的jsp语句。include命令既能够包括jsp页面也能够包括静态文本。编译指令语法例如以下:

    <%@ include file="要导入的jsp页面或文本文件" %>
    

    如:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>include</title>
    </head>
    <body>
        <%@ include file="header.jsp"%>
        <%@ include file="text.txt"%>
        <%@ include file="footer.jsp"%>
    </body>
    </html>
    

    使用include指令注意事项
    1.file名不能为依变量。以下的样例是错误的:

    <%! String url="header.jsp" %>
    <%@ include="<%=url %>"
    

    2.file名后面不能传入參数。以下的样例是错误的:

    <%@ include file="header.jsp?username=abc" %>
    

    3.file的路径是相对于此jsp的路径

    3.3 taglib指令

    taglib指令用于引入一些特定的标签库,语法格式:

    <%@ taglib prefix="tagPrefix" uri="tagLibraryURI" %>
    

    如使用struts标签库:

    <%@ taglib prefix="s" taglib="/struts-tags" %>
    

    prefix=”tagPrefix “用于定制标记的前缀,jsp, jspx, java, javax, servlet, sun, 和sunw已被sun公司保留uri=”tagLibraryURI”统一资源标记库,制定一个特定的标记库,能够是相对路径,也能够是绝对路径。

    四、jsp的7个动作标签

    4.1forward动作

    forward指令用于将页面转发到另外的页面,能够是html页面、jsp页面、容器中的servlet.
    语法例如以下:

    <jsp:forward page="目标页面地址"></jsp:forward>
    

    传参
    假设转发的时候须要传递參数能够使用<jsp:param></jsp:param>指令进行设置。

    比方,訪问index.jsp页面时自己主动转发至login.jsp,须要把usernamepassword传递过去:

    index.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <jsp:forward page="login.jsp">
        <jsp:param value="yaopan" name="username" />
        <jsp:param value="123456" name="password" />
    </jsp:forward>
    <%--mac上按住comment键(windows下按住ctrl键),再点击login.jsp  forword以下的代码不会被运行 --%>
    站点主页
    

    login.jsp中能够使用getParameter方法获取传入的參数值:

    <%
      String name=request.getParameter("username");
      String pwd=request.getParameter("password");
      out.println(name);
      out.println("<br>");
      out.println(pwd);
    %>
    

    运行forword指令时用户请求的地址没有发生变化。页面内容被forward目标替代

    4.2 include动作(动态包含)

    include指令用于包括某个页面。但不会导入被include页面的编译指令。能够通过param指令传递參数:
    新建一个index.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <jsp:include page="head.html"></jsp:include>
    <jsp:include page="body.jsp">
       <jsp:param value="#1d99f6" name="bgcolor"/>
    </jsp:include>
    </html>
    

    body.jsp:

    <body bgcolor="<%=request.getParameter("bgcolor")%>">
    </body>
    

    4.3useBean、setProperty、getProperty动作

    这三个指令与javaBean相关,useBean用于在jsp页面中初始化一个Java实例setProperty为javaBean实例的属性赋值getProperty属性用于输出javaBean实例的属性

    假设jsp页面中须要反复使用某段代码,能够把这段代码定义成java方法,然后多个jsp页面调用该方法达到页面复用的效果。

    useBean的语法格式例如以下:

    <jsp:useBean id="beanID" class="java包名.类名" scope="page|request|session|application"></jsp:useBean>
    

    如:在ucas.ac.cn.jspstudy包下创建一个Student类,有nameagestuId三个属性和对应的settergetter方法。在jsp页面中创建javaBean实例:

    <%--创建Student对象,对象名为stu1 --%>
    <jsp:useBean id="stu1" class="ucas.ac.cn.jspstudy.Student" scope="page"></jsp:useBean>
    

    setProperty方法用于为javaBean实例的属性赋值:

    <%--给stu1的name属性赋值 --%>
    <jsp:setProperty property="name" name="stu1" value="张三"/>
    <%--给stu1的age属性赋值 --%>
    <jsp:setProperty property="age" name="stu1" value="20"/>
    

    getProperty用于输出javaBean实例的属性值:

    <%--输出stu1的name值 --%>
    <jsp:getProperty property="name" name="stu1"/>
    <%--输出stu1的age值 --%>
    <jsp:getProperty property="age" name="stu1"/>
    

    4.4plugin动作

    plugin主要用于下载server端的javaBean或applet到client运行。如今非常少使用。

    4.5param动作

    param指令用于设置參数值,该指令本身不能单独使用,单独的param指令没有意义,配合以下三个指令使用:

    • jsp:include

    • jsp:forward

    • jsp:plugin

    五、jsp脚本中的9个内置对象

    5.1 application对象

    jsp、servlet之间不能相互调用。为了解决jsp和servlet之间数据交换的问题,webserver提供了四个域对象,各自是application、session、request、page

    放入application对象中的数据对整个Web应用有效,一旦jsp、servlet将数据放入application对象之中,该数据能够被该应用下其他jsp、servlet訪问。

    5.2 config对象

    config对象代表当前jsp配置信息,但jsp页面通常无需配置,该对象在jsp页面中较少使用。在servlet中使用较多。

    5.3 exception对象

    exception对象是Throwable的实例。代表jsp脚本中产生的错误和异常,是jsp页面异常机制的一部分。把page指令的isErrowPage属性设置为true时能够訪问exception内置对象

    5.4 out对象

    out对象是javax.servlet.jsp.JspWriter的实例,代表jsp的输出流,永于输出内容形成html页面。
    out对象一些方法:

    • out.println():输出完毕后会换行,换行效果在页面中不显示仅仅在源代码中显示
    • out.print():输出后不换行
    • out.getBufferSize() :输出缓冲区大小
    • out.getRemaining() :输出剩余缓冲区大小
    • out.clear():清空缓冲区,不将数据发送至client
    • out.clearBuffer():将数据发送至client,再清空缓冲区
    • out.flush():输出缓冲区内容
    • out.close():关闭输出流

    5.5page对象

    代表该页面本身。通常没有太大用处。Object page=this;

    5.6 pageContext对象

    代表页面上下文,主要用于jsp之间的共享数据,使用pageContext对象能够訪问page、request、session、application范围的变量。

    5.7 request对象

    request对象是jsp中的重要对象,每一个对象封装着一次用户请求。而且所有对请求參数都被封装在request对象中,request对象是获取用户请求參数的重要途径。request对象的一些方法:

    • request.getMethod():获取请求的方法名。如get,post.
    • request.getRequestURI():获取请求资源名.如请求訪问:/jspstudy/08/request.jsp
    • request.getProtocol():获取请求使用的协议.如:HTTP/1.1
    • request.getServerName():获取请求使用的server,如:localhost.
    • request.getServerPort():获取请求使用的serverport。如:8080
    • request.getRemoteAddr():获取client的ip地址.
    • request.getRemoteHost():获取client主机.
    • request.getParameter():获取传递过来的參数值.
    • request.getParameterValues():请求參数有多个值时。该方法返回多个值组成的数组.
    • request.setAttribute():设置域信息。

    测试代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>request方法</title>
    </head>
    <body>
    
    <form action="" method="post">
      username:<input type="text" name="username"><br/>
      <input type="submit">
      请求方法名:<%=request.getMethod() %><br/>
      请求的资源:<%=request.getRequestURI() %><br/>
      请求使用的协议:<%=request.getProtocol() %><br/>
      请求使用的server:<%=request.getServerName() %><br/>
      请求使用的serverport:<%=request.getServerPort() %><br/>
      client的IP地址:<%=request.getRemoteAddr() %><br/>
      client主机:<%=request.getRemoteHost() %><br/>
      表单提交过来的值:<%=request.getParameter("username") %><br/> 
    </form>
    </body>
    </html>
    

    输出:

    请求方法名:POST
    请求的资源:/jspstudy/08/request.jsp
    请求使用的协议:HTTP/1.1
    请求使用的server:localhost
    请求使用的serverport:8080
    client的IP地址:0:0:0:0:0:0:0:1
    client主机:0:0:0:0:0:0:0:1
    表单提交过来的值:test
    

    5.8 response对象

    response对象用于server对client的响应,大部分时候使用out对象向页面输出。可是out对象时JspWriter对象的实例,JapWriter时Writer的字类。Writer是字符流,因此out对象无法输出非字符内容。jsp页面须要输出图片、pdf文档、excel等非字符对象时须要使用response作为响应输出.response还能够用于重定向。向client添加cookie.

    5.9 session对象

    session对象代表一次用户会话。一次用户会话的含义是:从client连接server開始。到client与server断开为止,这个过程就是一次会话。
    session通经常使用于跟踪用户的会话信息,如推断用户是否登录。购物车中跟踪用户购买的商品。
    session范围的属性能够在多个页面点跳转之间共享。一旦关闭浏览器,session结束。session范围内的属性就会所有丢失。

  • 相关阅读:
    java 单链表 练习
    大问题-简明哲学导论
    git的常见错误
    python在Ubuntu添加模块搜索路径
    前端
    TCP/IP图解
    调试
    Design program
    算法
    面向对象-聚集,程序比较发现
  • 原文地址:https://www.cnblogs.com/tfxz/p/13251768.html
Copyright © 2011-2022 走看看