zoukankan      html  css  js  c++  java
  • JSP学习

    JSP

    全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1]  是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

    原理:

      jsp实质上是servlet,jsp访问时,会生成一个.java和.class文件来处理数据。通过out.write()进行输出(默认),其中的java类继承自httpServlet就是一个证据。

    当然也可以用response.getWrite().write进行输出文字。

    重定向和转发

    重定向-----修改用户请求

    转发------转发用户请求。

     四大域对象:

    java与jsp间常常通过域对象进行数据传递

    pageContext:整个页面共享

    request:转发的页面共享

    session:整个会话过程共享

    application:整个工程共享

    九大内置对象:

    request:请求对象,获取请求信息

    pageContext:当前页面上下文对象

    session:会话对象。可以获取会话信息。

    application:ServletContext对象实例,可以获取整个工程的一些信息。

    exception:异常对象只有在jsp页面的page 指令中设置 isErrorPage="true" 的时候才会存在

    config:ServletConfig对象实例,可以获取Servlet的配置信息

    out:输出流

    page:表示当前Servlet对象实例(无用,用它不如使用this对象)

    response:响应对象。可以设置响应信息

    九大内置对象,都是我们可以在【代码脚本】中或【表达式脚本】中直接使用的对象。

    jsp中的三种脚本介绍

    1)第一种,声明脚本:

    声明脚本格式如下:

    <%!   

    java 代码

    %>

    在声明脚本块中,我们可以干4件事情

    1.我们可以定义全局变量。

    2.定义static静态代码块

    3.定义方法

    4.定义内部类

    几乎可以写在类的内部写的代码,都可以通过声明脚本来实现

    2)第二种,表达式脚本(***重点,使用很多):

    表达式脚本格式如下:

    <%=表达式  %> 

    表达式脚本 用于向页面输出内容。

    表达式脚本 翻译到Servlet程序的service方法中 以 out.print() 打印输出

    out 是jsp的一个内置对象,用于生成html的源代码

    注意:表达式不要以分号结尾,否则会报错

    表达式脚本可以输出任意类型。

    比如:

    1.输出整型

    2.输出浮点型

    3.输出字符串

    4.输出对象

        <%-- 测试当前页面作用域 --%>
        <%=pageContext.getAttribute("key") %><br/>
        <%=request.getAttribute("key") %><br/>
        <%=session.getAttribute("key") %><br/>
        <%=application.getAttribute("key") %><br/>

    表达式脚本 用于向页面输出内容。

    3)第三种,代码脚本(*****重点,使用最多):

    代码脚本如下:

    <%  java代码  %>

    代码脚本里可以书写任意的java语句。

    代码脚本的内容都会被翻译到service方法中。

    所以service方法中可以写的java代码,都可以书写到代码脚本中

    <%
            // out输出
            out.write("这是out的第一次输出<br/>");
            // out flush之后。会把输出的内容写入writer的缓冲区中
            out.flush();
            // 最后一次的输出,由于没有手动flush,会在整个页面输出到客户端的时候,自动写入到writer缓冲区
            out.write("这是out的第二次输出<br/>");
            // writer的输出
            response.getWriter().write("这是writer的第一次输出<br/>");
            response.getWriter().write("这是writer的第二次输出<br/>");
        %>

    代码脚本执行代码逻辑

    在jsp中使用纯java代码或java表达式会使jsp页面太笨重,所以引进EL表达式和JSTL

    E L的全称:Expression Language,就是表达式语言。可以输出表达式的值。跟jsp的表达式脚本一样。计算表达式的值后输出。 

    EL表达式出现的目的是为了使JSP写起来更加简单,让jsp的代码更佳简化。
    EL表达式的最主要功能就是从域对象中获取数据,并且输出

    EL表达式,获取域对象数据(*****重点)

    使用EL表达式获取数据的语法: “${标识符}”

    第一点:当EL表达式输出的key不存在的时候,输出的是空串””

    第二点:EL表达式在域对象中搜索属性的顺序是pageContext,request,session。Application

    EL表达式可以从域对象中获取数据

    1、EL表达式获取域数据的顺序

    EL 表达式语句在执行时,会用标识符为关键字分别从page、request、session、application四个域中查找对应key的对象。

    找到则返回相应数据。找不到则返回空串。(注意,不是null,而是空字符串)

    1.2、EL表达式,获取域对象数据(*****重点)

    使用EL表达式获取数据的语法: “${标识符}”

    第一点:当EL表达式输出的key不存在的时候,输出的是空串””

    第二点:EL表达式在域对象中搜索属性的顺序是pageContext,request,session。Application

    EL表达式可以从域对象中获取数据

    1、EL表达式获取域数据的顺序

    EL 表达式语句在执行时,会用标识符为关键字分别从page、request、session、application四个域中查找对应key的对象。

    找到则返回相应数据。找不到则返回空串。(注意,不是null,而是空字符串)

    2、获取javaBean普通属性、数组属性、List集合属性,以map属性中的数据。

    例如:

    ${  user.username  }    // 获取user对象中。username属性值

    ${  list[0]  }                     // 访问有序集合(或数组)中给定索引的元素

    ${  map.key  }                        // 访问map集合中指定key的属性值

    ${      map[“key”]       }                 // 访问特殊字符串的key的属性值

    注意:[] 中括号除了可以访问带有顺序的集合和数组的元素之外。

    还可以访问特殊的key

    1.3、EL 表达式--运算。

    1)关系运算

    2)逻辑运算

    3)算数运算

    4)empty运算符(***常用)

    empty运算是判断一个对象或者集合是否为空。返回boolean值。

     

    对象为null时,返回true

    如果是空的字符串,返回true

    如果是空的Object数组(Object数组.length == 0),返回true

    空的集合,返回true

    空的map,返回true

    empty运算测试代码:

    <h1>EL empty 运算</h1>
    对象为null,empty为真 ---->>>>${ empty nullObject }<br/>
    空的字符串,empty为真------>>>>${ empty emptyStr }<br/>
    空的数组,empty为真------>>>>${ empty emptyArr }<br/>
    空的list集合,empty为真---->>>>${ empty emptyList }<br/>
    空的map集合,empty为真----->>>>${ empty emptyMap }<br/>

    1.4、EL表达式中11个隐含对象。

    EL表达式 中隐含11个对象,这11个对象我们都可以直接使用!!!

    1.5、EL表达式获取域对象中的数据(****重点)

    pageScope                       <=== 对应 ===>              pageContext        域中的属性

    requestScope                  <=== 对应 ===>              request                域中的属性

    sessionScope                   <=== 对应 ===>              session                 域中的属性

    applicationScope               <=== 对应 ===>              ServletContext    域中的属性

    <%     
        // 在四个域中存放数据,进行获取
        pageContext.setAttribute("key", "pageContext-value");
        request.setAttribute("key", "request-Value");
        session.setAttribute("key", "session-value");
        application.setAttribute("key", "application-value");
    %>
    <%-- 从不同的域中获取数据 --%>
    page域中key的值:${ pageScope.key }<br/>
    request域中key的值:${ requestScope.key }<br/>
    session域中key的值:${ sessionScope.key }<br/>
    application域中key的值:${ applicationScope.key }<br/>

    1.6、pageContext访问Jsp中内置对象(用的不多)。

    通过pageContext对象。我们可以直接获取jsp中的一些内置对象,

    比如:

    request对象,

    session对象,

    Servletconfig对象,

    ServletContext对象,

    然后获取一些我们需要的信息。

    常用的功能获取

    协议:

    服务器ip:

    服务器端口:

    获取工程路径:

    获取请求方法:

    获取客户端ip地址:

    获取会话的id编号:

    pageContext使用示例代码

    <body>
    协议:${ pageContext.request.scheme }<br/>
    服务器ip:${ pageContext.request.serverName }<br/>
    服务器端口:${ pageContext.request.serverPort }<br/>
    获取工程路径:${ pageContext.request.contextPath }<br/>
    获取请求方法:${ pageContext.request.method }<br/>
    获取客户端ip地址:${ pageContext.request.remoteHost }<br/>
    获取会话的id编号:${ pageContext.session.id }<br/>
    </body>

    pageContext对象最常用的功能就是获取上下文路径(也就是工程路径名)

     

    工程名(上下文路径):${ pageContext.request.contextPath }

    但是在实际项目中。为了缩短代码量,会把request对象放在pageContext域对象中。然后再使用,比如说

    <%

    // 先把request对象放到pageContext域对象中

    pageContext.setAttribute(“req”,request);

    %>

    然后EL表达式代码改为

    工程名(上下文路径):${ req.contextPath }

    1.7、EL表达式其他隐含对象的使用。

    jsp的常用标签(重点****)

    <%--  静态包含 --%>

    <%--  动态包含 --%>

    <%--  转发 --%>

    2、JSTL标签库(次重点****)

    JSTL标签库 全称是指 JSP Standard Tag Library  JSP标准标签库。是一个不断完善的开放源代码的JSP标签库。

    EL表达式主要是为了替换jsp中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个jsp页面变得更佳简洁。

    JSTL由五个不同功能的标签库组成。

    在jsp标签库中使用taglib指令引入标签库
      CORE 标签库

        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

      XML 标签库

        <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

      FMT 标签库 

        <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

      SQL 标签库

        <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

      FUNCTIONS 标签库

        <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

     此处省略...................................

    jsp的常用标签(重点****)

    1)静态包含--很常用

    <%@ include file="" %>

    静态包含是把包含的页面内容原封装不动的输出到包含的位置。

    2)动态包含--少用

            <jsp:include page=""></jsp:include>

    动态包含会把包含的jsp页面单独翻译成servlet文件,然后在执行到时候再调用翻译的servlet程序。并把计算的结果返回。

    动态包含是在执行的时候,才会加载。所以叫动态包含。

    3)页面转发--常用

        <jsp:forward page=""></jsp:forward> 

    <jsp:forward 转发功能相当于

    request.getRequestDispatcher("/xxxx.jsp").forward(request, response); 的功能。

  • 相关阅读:
    系统设计的一些原则
    分层开发思想与小笼包
    工作与生活
    Microsoft .NET Pet Shop 4 架构与技术分析
    用人之道(二) 如何管理软件开发团队
    也谈很多开发人员的毛病
    《3S新闻周刊》第10期,本期策划:“超女”营销带来的启示
    浅析ArcIMS
    MapX的坐标问题
    应用ArcIMS构建GMap风格的地图应用
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/7056911.html
Copyright © 2011-2022 走看看