一、JSP简介

  JSP全称是Java Server Page,它和Servlet一样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范。其本质也是一个Servlet。

二、HTML、Servlet和JSP的关系

  HTML:只能开发静态资源,不能包含java代码,无法添加动态数据。

  Servlet:写java代码,可以输出页面内容,但是很不方便,开发效率极低。

  JSP:HTML+Servlet

三、JSP快速入门(输出当前时间)

四、分析JSP的原理以及生命周期

写在之前:

明确JSP就是一个Servlet。是一个特殊的Servlet。

JSP的原理:

  客户端提交请求——Tomcat服务器解析请求地址——找到JSP页面——Tomcat将JSP页面翻译成Servlet的java文件——将翻译好的.java文件编译成.class文件——返回到客户浏览器上。

五、JSP的语法

  5.1 模板元素

      jsp中的模板元素指的就是jsp中的html标签,在开发过程中,先写好这些模板元素,因为它们决定了页面的外观。

  5.2 Java程序片段

      在jsp中,可以使用java脚本代码。形式为:

      <%

        在里面写java程序脚本

        需要注意:这里面的内容由tomcat负责翻译,翻译之后是service方法的成员变量

      %>

  5.3 Java表达式

    使用<%=表达式%>

    翻译完后是out.print(表达式内容);

    <%out.print("当前时间);%>和<%="当前时间"%>是一样的

  5.4 JSP声明

    JSP的声明

    <%!

      声明可以是变量,方法,静态方法等

      需要注意的是:

      写在里面的内容将会被tomcat翻译成全局的属性或者类方法。

    %>

  5.5 JSP注释

    JSP中的注释:<%--注释--%>

    注意:

    在Jsp中可以使用html的注释,但是只能注释html元素,不能注释java程序片段和表达式。

    jsp的注释不仅可以注释java程序片段,也可以注释html元素。

  5.6 JSP指令

    5.6.1 简介

      JSP指令是为JSP引擎服务的,它不会产生可见输出,而是告诉引擎如何处理JSP的其余部分(非指令部分)。

      基本语法:

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

        一般把指令放在JSP页面的顶部(不是必须的)

      指令的属性可以写在一个指令的中,也可以分开写:比如:

      <%@指令 属性1=”值1” 属性2=”值2”%>.

      等价于:

        <%@指令 属性1=”值1” %>.

        <%@指令 属性2=”值2”%>.

    5.6.2 page指令

      属性:

        language:告知引擎,脚本使用的是java,默认是java,支持java。不写也行。

        extends:告知引擎,JSP对应的Servlet的父类是哪个,不需要写,也不需要改。

        import:告知引擎,导入哪些包(类)。

          注意:引擎会自动导入:java.lang.*,javax.servlet.*,javax.servlet.http.*,javax.servlet.jsp.*

          导入的形式:

            <%@page import=”java.util.Date,java.util.UUID”%>或者:

            <%@page import=”java.util.Date”%>

            <%@page import=”java.util.UUID”%>  用Eclipse:Alt+/ 自动导入

        session:告知引擎是否产生HttpSession对象,即是否在代码中调用request.getSession()。默认是true。

        buffer:JspWriter用于输出JSP内容到页面上。告知引擎,设定他的缓存大小。默认8kb。

        errorPage:告知引擎,当前页面出现异常后,应该转发到哪个页面上(路径写法:/代表当前应用)

          注意:当在errorpage上使用了isErrorPage=true之后,ie8有时候不能正常显示

          配置全局错误页面:web.xml

          当使用了全局错误页面,就无须再写errorPage来实现转到错误页面,而是由服务器负责跳转到错误页面。

        isErrorPage:告知引擎,是否抓住异常。如果该属性为true,页面中就可以使用exception对象,打印异常的详细信息。默认值是false。

        contentType:告知引擎,响应正文的MIME类型。contentType="text/html;charset=UTF-8"

            相当于response.setContentTYpe("text/html;charset=UTF-8");

        pageEncoding:告知引擎,翻译jsp时(从磁盘上读取jsp文件)所用的码表。

            pageEncoding="UTF-8"相当于告知引擎用UTF-8读取JSP

        isELIgnored:告知引擎,是否忽略EL表达式,默认值是false,不忽略。

      总结:

          属性众多,一般都用默认值。用起来很简单。

  5.6.3 include指令

    该指令是包含外部页面。

      属性:file,以/开头,就代表当前应用。

  5.6.4 taglib指令

    该指令用于引入外部标签

    uri:外部标签的URI地址,类似名称空间。

    prefix:前缀。

六、JSP的转发和包含

  6.1 转发

语法:<jsp:forward page="/forwarddemojsp"></jsp:forward> 是jsp的内置标签

该方式等价于:

参数:<jsp:param name="message" value="transfer" />

获取参数:

  注意:

    在使用forward带参数时,不能在中间添加除空格和换行之外的内容。否则报错。

  6.2 包含

    静态包含:只有一种,<%@include file=%>,又称为include指令。特点是将两个页面合成一个。在包含者中可以使用被包含者的属性。

    动态包含:除了include指令外,其余全是动态包含。

     jsp的动态包含语法:

      <jsp:include page="" />

        又称为include动作。

      动态包含的特点是,各编译各的,会产生多个java和class文件。只是合并输出结果。

七、JSP的九大隐式对象(重点)

隐式对象名称

类型

备注

request

javax.servlet.http.HttpServletRequest

 

response

javax.servlet.http.HttpServletResponse

 

session

javax.servlet.http.HttpSession

Page指令可以控制开关

application

javax.servlet.ServletContext

 

page

Java.lang.Object

当前jsp对应的servlet引用实例

config

javax.servlet.ServletConfig

 

exception

java.lang.Throwable

page指令有开关

out

javax.servlet.jsp.JspWriter

字符输出流,相当于printwriter

pageContext

javax.servlet.jsp.PageContext

很重要

八、PageContext抽象类(重要)

  8.1 PageContext抽象类概述

    它是JSP独有的对象,Servlet中没有这个对象。本身也是一个域(作用范围)对象,但是它可以操作其他3个域对象中的属性。而且还可以获取其他8个隐式对象。(自定义标签时用)

  8.2 PageContext生命周期

    它是一个局部变量,所以它的生命周期随着JSP的创建而诞生,随着JSP的结束而消失。每个JSP页面都有一个独立的PageContext。

  8.3 PageContext常用方法

    页面范围的方法:

      void setAttribute(String name,Object value);

      void removeAttribute(String name);

      Object getAttribute(String name);

    操作其他域属性的方法:

      比上面的三个方法多了一个参数 int scope。

        void setAttribute(String name,Object value,int scope);

        void removeAttribute(String name,int scope);

        Object getAttribute(String name,int scope);

      int scope:它本身是一个常量,有四个值,分别对应四个范围。

        APPLICATION_SCOPE 应用级

        SESSION_SCOPE 会话级

        REQUEST_SCOPE 请求级

        PAGE_SCOPE 页面级

      在四个范围内根据名称查找对象的方法:

        Object findAttribute(String name);

        查找顺序是:PAGE——>REQUEST——>SESSION——>APPLICATION。只要在一个范围内找到就不再继续查找。

        获取其他八个隐式对象的方法:(自定义标签时用)

        pageContext.getRequest();

        pageContext.getResponse();

        pageContext.getSession();

        pageContext.getServletConfig();

        pageContext.getServletContext();

        pageContext.getException();

        pageContext.getPage();

        pageContext.getOut();(此方法是其父类JspContext提供)

九、四大域对象

 实际开发中用于存放数据的。

域对象名称

范围

级别

备注

PageContext

页面范围

最小

因范围太小,开发中用的很少

ServletRequest

请求范围

比page大,比session小

不同的资源,只有转发用

HttpSession

会话范围

比request大,比application小

多次请求共享数据,但不同的客户端不能共享

ServletContext

应用范围

最大

尽量少用,如果对数据有修改需要做同步处理

十、JSP开发

Servlet:擅长处理业务逻辑,不擅长输出显示界面。在web开发中多用于控制程序逻辑(流程)。所以我们称之为:控制器。

JSP:擅长显示界面,不擅长处理程序逻辑。在web开发中多用于展示动态界面。所以我们称之为:视图。

例如:

M:model 封装的是数据模型

V:view 指的是jsp页面

C:Controller 指的是Servlet

注意:MVC模型针对的只是表现层的模型,和三层架构是没有关系的。

jsp相关基础知识的更多相关文章

  1. JAVA相关基础知识

    JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...

  2. iOS蓝牙开发(二)蓝牙相关基础知识

    原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...

  3. 深入理解mysql之BDB系列(1)---BDB相关基础知识

        深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富   一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1 ...

  4. 【RAC】RAC相关基础知识

    [RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁. ...

  5. JSP(1)—基础知识

    JSP(1)-基本知识 起源 在很多动态网页中绝大多数网页都是固定不变的只有局部内容需要动态产生和改变,如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的的静态内容,也需要程序 ...

  6. iOS蓝牙开发(一)蓝牙相关基础知识(转)

    转载自:http://www.cocoachina.com/ios/20150915/13454.html 原文作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad , ...

  7. IOS 蓝牙相关-基础知识(1)

    蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...

  8. iOS_SN_BlueTooth( 一)蓝牙相关基础知识

    原文  http://www.cocoachina.com/ios/20150915/13454.html 作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad ,ip ...

  9. ios蓝牙开发(一)蓝牙相关基础知识

    蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...

随机推荐

  1. finally知识讲解

    finally语句一定会执行吗,很多人认为一定会,其实未必,只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会执行.假如在try语句之前执行了return操作 ...

  2. Python_json数据检索与定位之jsonPath类库

    json数据检索与定位之jsonPath类库   by:授客 QQ:1033553122 实践环境 win7 64 Python 3.4.0 jsonpath_ng-1.4.3-py2.py3-non ...

  3. git 入门教程之忽略文件

    忽略文件 "并不是所有的牛奶都叫特仑苏",在版本控制系统中也有相似的表达,那就是"并不是所有的文件都需要提交". 有的是因为没必要提交,比如日志文件,系统缓存文 ...

  4. Node.js学习记录(一)--安装设置篇

    安装Node window window上安装node可选择以下两种方式: 方式一:直接进入官网下载安装 进入node.js官网点击windows,选择.msi后缀的,根据自己的电脑选择对应的64位或 ...

  5. Windows Server 2012更新补丁后导致Micosoft ODBC for Oracle出现问题

    上周由于WannaCry勒索病毒肆虐全球,14号系统管理员更新了一系列补丁后,导致一Windows Server 2012服务器上面部署的一些老旧的应用无法使用Microsoft ODBC for O ...

  6. MyBatis笔记----Mybatis3.4.2与spring4整合:增删查改

    结构图 刚之前没什么区别,多了一个applicationContext.xml 包图 由于之前出了一点错误,有些包可能多加上了 数据库图 model User.java package com.ij3 ...

  7. C#-运算符(四)

    算术运算符 +:两个操作数相加,例:2+3得5 -:第一个操作数减去第二个操作数 例:5-3得2 *:两个操作数相乘,例:2*3得6 /:分子除以分母,例:5/2得2 %:取模运算符,整除后的余数,例 ...

  8. Echarts在手机端y轴数据过大,显示不全

    解决办法: 减少y轴的margion,和格式化y轴 myChart.setOption({ ..., yAxis: { axisLabel: { margin: , formatter: functi ...

  9. Linux唤醒抢占----Linux进程的管理与调度(二十三)

    1. 唤醒抢占 当在try_to_wake_up/wake_up_process和wake_up_new_task中唤醒进程时, 内核使用全局check_preempt_curr看看是否进程可以抢占当 ...

  10. c 指针函数 vs 函数指针

    指针函数,函数指针 #include <stdio.h> int max(int a, int b){ return a > b ? a : b; } //函数指针,2个int参数, ...