zoukankan      html  css  js  c++  java
  • JavaWeb基础—JSP

    一、什么是JSP

      JSP 全称是 Java Server Pages,是一种开发动态web资源的技术

      在原HTML上添加JAVA脚本(灵魂工程师,为页面添加灵魂),可以说 jsp = html + java代码 +jsp标签

    二、JSP的原理

      JSP基本原理:
      JSP本身是一个特殊的Servlet(类,即万物皆对象)
      JSP第一次被访问时,服务器会编译成JAVA文件(这个JAVA其实是Servlet类)
      然后创建对象
      调用对象的service()方法
      (第一次惩罚,第一次会慢一点)
      在tomcat的work的的对应jsp的.java文件(out.write(),java代码原封不动

      JSP的真身实际上是 Servlet,我们访问 index.jsp 时,实际上是访问它的真身 index_jsp 这个 Servlet

      并且是通过_jspService()这个方法处理请求,这个方法中放了 html 和 java 代码,所有java代码原样翻译过来,

       html 代码使用out.write("<标签>" )向页面输出给浏览器

      简单的流程可以概述为

      找到.jsp文件 ——> 转换为 .java文件 ——> 编译为 .class文件 ——> 服务器执行之

      若是第二次访问则直接找.class文件即可,若是进行了修改,则需要重新编译

    三、基本语法

      HTML代码称之为模板元素,也就是网页的骨架和布局

      jsp3种java脚本

        <%...%>【尽量不要使用】
          JAVA代码片段(方法内可以写的它都可以写,例如调用方法等,但不能定义方法)
          一个代码段中声明的变量,其它片段可以用
        <%=...%>(out.print())
          JAVA表达式 (常用于输出)response.writer.print()里面能放的,他都能放。注意不能输出多个,即不能有分号
        <%!...%>
          声明(作了解) 基本不用,但会被考虑到(类体中可以放什么,这里就可以放什么)

      jsp的注释

         <%-- --%>(编译成java文件时自动忽略.java .class都没有,客户端看不见)  ——jsp的注释
        <!-- -->(HTML的注释,右键查看源代码可以看到)——HTML的注释
        // /**/ java的注释,此注释也是隐式的 ——JAVA的注释

    四、JSP指令

      JSP指令(derictive)是用来告知引擎如何执行处理页面的

      JSP三大指令:

       1.page指令:最复杂,可以存在任意个指令

       2.include指令:静态包含

       3.taglib指令:导入标签库

      指令的格式:<%@ 指令 key="value" %>

      一、page指令:一般放在第一行,定义了整个页面的属性

            常用属性:
                pageEncoding:指定当前jsp页面编码,在服务器要把JSP编译成.java时用到
                contentType:相当于添加响应头:两人关系出现一个另外一个也相同。同时没有默认ISO
                import:用来导包的,可以出现多次
                errorPage和isErrorPage

                    如果没有设置isErrorPage="true",那么在jsp页面中是无法使用exception对象的
                  前者:页面出错要转到哪个页面去
                  后者:当前页面处理错误页面(500)
                  <!-- 默认的错误处理页面 -->

          例如:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

            可以在web.xml中为整个项目配置

     <error-page>  
            <error-code>403</error-code>  
            <location>/403.html</location>  
        </error-page>  
        <error-page>  
            <error-code>404</error-code>  
            <location>/404.html</location>  
        </error-page>  
        <!-- 仅仅在调试的时候注视掉,在正式部署的时候不能注释 -->  
        <!-- 这样配置也是可以的,表示发生500错误的时候,转到500.jsp页面处理。 -->  
        <error-page>   
            <error-code>500</error-code>   
            <location>/500.html</location>   
        </error-page>   
          
        <!-- 这样的配置表示如果jsp页面或者servlet发生java.lang.Exception类型(当然包含子类)的异常就会转到500.jsp页面处理。 -->  
        <error-page>   
            <exception-type>java.lang.Exception</exception-type>   
            <location>/500.jsp</location>   
        </error-page>   
          
        <error-page>   
            <exception-type>java.lang.Throwable</exception-type>   
            <location>/500.jsp</location>   
        </error-page>  
        <!--   
        当error-code和exception-type都配置时,exception-type配置的页面优先级高  
        及出现500错误,发生异常Exception时会跳转到500.jsp  
         -->  

      二、include指令

        两种形式:

            1.@include 静态包含

              与转发的包含类似{时间点不同} <%@include file="" %>,在生成.java时就包含了
              两页面合体了。作用主要是页面分解,将变量分离。以及实现可重用。建议包含的文件拓展名为 .jspf

           2.<jsp:inlcude> 动态包含

              先处理结果后包含,推荐的方式: <jsp:include page="top.jsp"></jsp:include>

      三、taglib指令 

          两个属性:prefix:指定本页面标签前缀 <pre:text>指定了前缀
          uri:指定标签库位置

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

    五、JSP九大内置对象

      九大内置对象由JSP引擎负责创建于传递(在调用相应的_jspServlet时)

        九大内置详细对象见下表:

    request 请求对象  类型 javax.servlet.ServletRequest 作用域 Request
    response 响应对象  类型 javax.servlet.SrvletResponse 作用域 Page
    pageContext 页面上下文对象(1顶9)  类型 javax.servlet.jsp.PageContext 作用域 Page
    session 会话对象  类型 javax.servlet.http.HttpSession 作用域 Session
    application 应用程序对象  类型 javax.servlet.ServletContext 作用域 Application
    out 输出对象  类型 javax.servlet.jsp.JspWriter 作用域 Page
    config 配置对象  类型 javax.servlet.ServletConfig 作用域 Page
    page  页面对象(this)  类型 javax.lang.Object 作用域 Page
    exception 例外对象  类型 javax.lang.Throwable 作用域 Page

     

        

        重点: >pageContext:1个顶9个,Servlet中有三大域对象,而JSP中有四大域对象,它就是最后一个。
            域对象它就有域对象的方法。

    • getException方法返回exception隐式对象
    • getPage方法返回page隐式对象
    • getRequest方法返回request隐式对象
    • getResponse方法返回response隐式对象
    • getServletConfig方法返回config隐式对象
    • getServletContext方法返回application隐式对象
    • getSession方法返回session隐式对象
    • getOut方法返回out隐式对象


            >ServletContext:整个应用程序
            >session:整个会话(锁定一个用户)
            >request:一个请求链中
            >pageContext:一个JSP页面(页面标签中共享数据)
            作为域对象,作为代理,获取其它内置对象,全域查找(从小到大)
            pageContext.setAttribute("aaa", "AAA", PageContext.SESSION_SCOPE);

      域对象:

      pageContext:page作用范围

        作用域仅限于当前页面对象,可以近似于理解为java的this对象,离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失。

      request:

        作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。如果通过redirect方式进行页面跳转,

      由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失。

      session:例如购物车数据

        session的作用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失。

      application:例如聊天数据

        作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。

    六、JSP标签(JSP动作)

       JSP动作标签:
        与HTML提供的标签有本质的区别,是由服务器来解释执行。在服务器端执行
        <jsp:forward /> 转发,与servlet中转发作用类似

        例如:<jsp:forward page="/forwarddemo02.jsp"/>

        <jsp:include /> 包含,与RequestDispecher.include()类似  

        例如:<jsp:include page="/jspfragments/head.jsp"/>
        对比:
    <%@include file="/jspfragments/demo.jsp"%>

        演示小案例
        <jsp:param>作为forward和include的子标签,作为传参标签。

        例如:

     <jsp:include page="/jspfragments/Inc.jsp">
         <jsp:param name="parm1" value="hello" />
         <jsp:param name="parm2" value="gacl" />
     </jsp:include>
  • 相关阅读:
    Hadoop WordCount改进实现正确识别单词以及词频降序排序
    两个栈实现一个队列
    数据库弱一致性四个隔离级别
    vs2008生成lib文件
    开始整理资料
    基于AKS素性检测的素数生成器
    生成指定位数的随机数
    Windows 7远程桌面 重启 关机 任务管理器 命令
    摩根IT实习经验谈及其他
    Hadoop下进行反向索引(Inverted Index)操作
  • 原文地址:https://www.cnblogs.com/jiangbei/p/6686205.html
Copyright © 2011-2022 走看看