一、什么是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("<标签>"\r\n)向页面输出给浏览器

  简单的流程可以概述为

  找到.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>

JavaWeb基础—JSP的更多相关文章

  1. JavaWeb基础-Jsp基础语法

    jsp基础语法 JSP的组成 静态内容.指令.表达式.小脚本.声明.注释 JSP的生命周期 用户发出index.jsp ,服务端判断是否是第一次请求,若是第一次请求,则tomcat中的JSP引擎中的文 ...

  2. JavaWeb基础-Jsp的请求与响应

    JSP请求和相应 HTTP头信息 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的. HttpServletRequest类 r ...

  3. JavaWeb基础-Jsp内置对象

    request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应,它是HttpServlteRequest类的实例.Request对象具有请求域,即完成客户端 ...

  4. JavaWeb基础—JSP自定义标签入门

    自定义标签的作用:替换JSP页面的java代码 步骤:1.标签处理类(标签是一个对象,那也就需要先有类) 2.tld文件 它是一个xml(可以向c标签里借),一般放到WEB-INF下,不让客户端浏览器 ...

  5. JavaWeb基础: 学习大纲

    JavaWeb基础: Web应用和Web服务器 JavaWeb基础: Tomcat JavaWeb基础:HTTP协议和基于Restful的架构 JavaWeb基础: Web工程配置文件 JavaWeb ...

  6. javaweb学习--jsp

    阅读电子书<Java Web从入门到精通>密码:461c,学习JavaWeb基础知识.由于本人已有html基础,所以直接略过前面部分,进入jsp学习 jsp页面添加库引用,引入项目文件 引 ...

  7. JavaWeb基础知识总结

    JavaWeb基础知识总结.   1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...

  8. 超详细的Java面试题总结(四 )之JavaWeb基础知识总结

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...

  9. 关于java基础、多线程、JavaWeb基础、数据库、SSM、Springboot技术汇总

    作者 : Stanley 罗昊 本人自行总结,纯手打,有疑问请在评论区留言 [转载请注明出处和署名,谢谢!] 一.java基础 1.多态有哪些体现形式? 重写.重载 2. Overriding的是什么 ...

随机推荐

  1. html的button疑问

    button是可以自动垂直居中的,随便给个高度,它都会自动垂直居中.用控制台查看computed属性里也没有发现和垂直相关的,贴出来希望以后能够了解或有高手看到来解惑小弟:)

  2. Ionic Css样式详解

    Header是固定在屏幕顶部的组件.可以包含如标题和左右的功能按钮.Sub Header同样是固定在顶部,只是是在Header的下面,就算没有写Header这个,Sub Header这个样式也会距离顶 ...

  3. [UI] Pull menu interaction concept - 下拉菜单交互

    Pull menu interaction concept - 下拉菜单交互 http://freebiesbug.com/code-stuff/pull-menu-interaction-conce ...

  4. PowerShell管理SCOM2007R2

    get-operationsmanagercommand #定义RMS服务器名称(SCOM管理控制台所在服务器名称)#Connect to the RMS server and initialize ...

  5. Python入门-模块4(序列化----json模块和pickle模块)

    序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes.反之,把硬盘里面的数据读到内存里,叫反序列化.

  6. THE CUP OF LIFE即生命之杯。

    生命之杯 编辑 THE CUP OF LIFE即生命之杯. <生命之杯>(西班牙语:La copa de la vida,英语:The Cup of Life)是一首由波多黎各裔歌手瑞奇· ...

  7. DevExpress01、独立使用的控件

    XtraEditors 库提供了只能独立使用的控件,也就是说不能在容器控件的内置编辑中使用它们. 这些控件包括: 几种类型的列表框.数据导航控件.滚动条和一个按钮控件. 这些控件都是 BaseStyl ...

  8. JavaScript基础之数据类型部分总结

    JavaScript 是世界上最流行的脚本语言,被设计为向 HTML 页面增加交互性. 我把它的基础语法分为了三个部分:数据类型,运算符,流程控制语句.入门还是比较容易的. 基本概念: 标识符:指变量 ...

  9. 走向Node与Webpack 之路 - CommonJS 模块化

    走向Node与Webpack 之路 - CommonJS 模块化 1. 参考资料 JavaScript 标准参考教程(alpha) CommonJS规范(推荐 - 阮一峰写的) 官方网站 (看半天,不 ...

  10. JS相关知识点总结

    一.获取元素方法 1.document.getElementById("元素id号"); 可以使用内置对象document上的getElementById方法来获取页面上设置了id ...