一、什么是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. Ubunt 安装mysql

    apt-get install mysql-client-core-5.6apt-get install mysql-client-5.6apt-get install mysql-server-5. ...

  2. 跳过ssh在首次连接出现检查keys 的提示

    1.将需要登陆主机得公钥添加到known_hosts ssh-keyscan 192.168.77.129 192.168.77.130 >> /root/.ssh/known_hosts ...

  3. oracle截取字符串去掉字段末尾指定长度的字符

    lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算string所占的字符长度:返回字符串的长度,单位是字符 eg: //去掉该 ...

  4. React:组件的生命周期

    在组件的整个生命周期中,随着该组件的props或者state发生改变,其DOM表现也会有相应的变化.一个组件就是一个状态机,对于特定地输入,它总返回一致的输出. 一个React组件的生命周期分为三个部 ...

  5. Error:Could not find com.android.tools.build:gradle:3.0.0

    Error:Could not find com.android.tools.build:gradle:3.0.Searched in the following locations:    file ...

  6. PHPredis安装

    一.PHPredis下载链接:https://pan.baidu.com/s/1bz0EaJgDpp2ADQJCJOHJGA 二.解压并进入目录 三.发现没有configure文件,需要安装autoc ...

  7. PHP利用二叉堆实现TopK-算法的方法详解

    前言 在以往工作或者面试的时候常会碰到一个问题,如何实现海量TopN,就是在一个非常大的结果集里面快速找到最大的前10或前100个数,同时要保证 内存和速度的效率,我们可能第一个想法就是利用排序,然后 ...

  8. 函数的应用 "注册" and "登录"

    登录 自己写 # 注册 registdef regist(): f = open("account", mode="r+", encoding="ut ...

  9. Aria2 无限制下载神器

    Aria2 是一款免费开源跨平台且不限速的多线程下载软件,Aria2的优点是速度快.体积小.资源占用少:支持 HTTP / FTP / BT / Magnet 磁力链接等类型的文件下载:支持 Win. ...

  10. HBase性能优化 Java Api

    1. 使用“连接池” 如果每次和Hbase交互时都去新建连接的话,显然是低效率的,HBase也提供类连接池相关的API. 1.1. HTablePool 早期的API中使用它,但很不幸,现在它已经过时 ...