一.JSP的语法
    1.模版元素
        写在JSP中的html内容
        在翻译后的Servlet中, 直接被out.write原样输出

2.JSP脚本表达式
        格式: <%=  %>
        在翻译后的Servlet中, 计算表达式的值在原样输出

3.JSP脚本片段
        格式: <% 若干条java语句 %>
        在翻译后的Servlet中, 直接复制粘贴到对应的位置执行

多个片段之间的变量可以互相访问
        一个片段中的java代码可以不完整, 但是在翻译后的Servlet, 多个片段组成的java代码必须完整符合java语法
        片段中不能包含其他的jsp元素

~~4.JSP声明
        <%! %>
        写在jsp声明中的内容, 会和类中的方法平级成为类的成员

5.JSP注释
        <%-- 注释内容 --%>
        被jsp注释注释的内容在jsp翻译过程中会被丢弃
        
    6.JSP的指令
        (1) page指令
            <%@page 若干属性声明...%>
                session="true", 默认为true, 表示翻译后的Servlet会创建session对象
                如果不想创建session, 可以改为false

import 导包

pageEncoding 指定jsp解析引擎使用哪一个编码来翻译jsp

(2) include指令
            <%@include file="/xxx" %>
            实现请求包含效果, 是静态包含

(3) taglib指令
            用来导入tld文件

二.JSP的九大隐式对象
    page-------------Servlet
    request----------request
    response--------response
    config-----------ServletConfig
    application-----ServletContext
    session---------session
    exception------exception
    out
    pageContext

1.pageContext
        代表JSP运行环境的对象
        (1)入口对象, 可以用来获取其他八大隐式对象

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

(2)本身是一个域对象,  并且提供了入口来操作其他三大域对象

setAttribute(String name, Object value);
            setAttribute(String name, Object value, int scope);
            
            getAttribute(String name);
            getAttribute(String name, int Scope);
            
            removeAttribute(String name);
            removeAttribute(String name, int Scope);

getAttributeNames();

findAttribute();//按照从小到大的顺序去四大域中寻找指定名称属性, 找到就返回, 找不到就返回null

(3) 提供了便捷方法实现请求包含和转发
            pageContext.forward("xxx");
            pageContext.include("xxx");

三.JSP标签技术
    1.JSP标签(SUN公司提供)
        <jsp:forward></jsp:forward>
        <jsp:include></jsp:include>
        <jsp:param></jsp:param>

2.EL表达式
        只能获取不能遍历和设置
        ( 在开发使用时,若表达式有值时会直接在所在位置显示该值,若没有值则直接显示一个空不是null )

(1) 获取数据
            获取常量/变量  -->${ "aaa" }...
            获取数组中的数据-->${ username }... -->它会自动寻找与之对应的值并输出。这种el表达式在底层是用findAttribute()方法来实现的。
            获取map中的数据-->${ attr[0] }...
            获取集合中的数据-->${ list[0] }...
            获取javaBean中的数据-->${ map.key },${ map["key"] }...-->需要获取哪个属性值时不是由JavaBean内部定义的属性名来决定而是由get和set方法名来决定的。将方法名的get或set和方法后面的括号去掉以及首字母小写后这就是通过el表达式获取时需要的属性名。

 注意: 变量/集合/数组/map/JavaBean必须放在域中才可以通过el获取

(2) 执行运算
            算术运行
                +号在el中只能做运算符, 不能作为拼接符

逻辑运算

关系运算

三元表达式

empty运算
            为空返回true,反之返回false
            
        (3) 获取常用的开发对象
            !!!pageContext:唯一可在el表达式中直接获取域对象中的值

!!!pageScope:代表pageContext域
            !!!requestScope:代表request域
            !!!sessionScope:代表session域
            !!!applicationScope:代表ServletContext域

!!!param:代表所有参数的Map集合,可通过键获来获取值; Map<String, String>
            paramValues: 代表获取一个键对应的多个值;  Map<String, String[]>

header:代表请求头组成的map; Map<String, String>
            headerValues:Map<String, String[]>

!!!cookie:代表Cookie信息组成的map;  Map<String, Cookie>

            注意:通过cookie获取得到的是Cookie对象,需要进一步通过Cookie名来获取指定的Cookie值   ${ cookie.username.value}  //获取Cookie中的的username值

 <%
Cookie c = new Cookie("cook","222");
//pageContext.setAttribute("c",c);
response.addCookie(c);
%>
Cookie的值为:${ cookie.cook.value }

initParam:代表所有web应用初始化信息组成的map;  Map<String, String>
    3.JSTL标签库:
        导库:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  prefix:设置缩写成c

       <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" session="true|false"%>

      ---pageEncoding:可以指定  jsp文件保存的编码格式、传到浏览器时的编码格式、servlet响应到jsp参数的编码格式

        ---session:默认true ;为true表示一旦访问jsp时就会自动创建session对象,值为false则反之。
            
        <c:out value="<string>" default="<string>" escapeXml="<true|false>"/>

  !!!<c:set var="<string>" value="<string>" target="<string>" property="<string>" scope="<string>" />

  !!!<c:if test="<boolean>" var="<string>" scope="<string>">
           ...//为真时才会执行
        </c:if>

  !!!<c:forEach
             items="<object>"
             begin="<int>"
             end="<int>"
             step="<int>"
             var="<string>"
             varStatus="<string>"
        >

  底层封装了Java中的for,while,do-while循环。

  forEeach中的varStatus属性:

  !!!<c:choose><c:when><c:otherwise>

分分钟搞定 JSP 技术的更多相关文章

  1. 【原型实战】分分钟搞定Unsplash网站原型设计

    网站原型设计是我们在设计网页过程中必不可少的一步,激烈的市场竞争让我们不得不对产品进行快速迭代,如何高速有效的进行原型设计成为了设计师头疼的问题.本文将以unsplash网站为实例,教大家快速搞定we ...

  2. 分分钟搞定IOS远程消息推送

    一.引言 IOS中消息的推送有两种方式,分别是本地推送和远程推送,本地推送在http://my.oschina.net/u/2340880/blog/405491这篇博客中有详细的介绍,这里主要讨论远 ...

  3. Mockplus教程:分分钟搞定APP首页原型设计

    Mockplus是一款快速原型设计工具,支持包括APP原型在内的多种原型与线框图设计.除了快速,Mockplus广受欢迎更因为它极低的上手门槛.今天小编就为大家展示如何用Mockplus在3分钟内完成 ...

  4. 分分钟搞定redis

    随着科技不断的发展,使用到的技术也是更新换代,大家都知道当一个程序用户量上来之后,必然是要做数据缓存的,那么如何去实现的呢,在之前我们一直使用memcache去做数据缓存,现在众所周知主流的缓存技术已 ...

  5. “摆地摊“都找不到全栈工程师?JNPF帮你分分钟搞定!

    大街上捕捉野生程序员 都这样了还找不到全栈工程师 全栈工程师(Full-Stack Engineer)图鉴: 全栈工程师,也叫全端工程师(同时具备前端和后台能力),英文Full Stack  deve ...

  6. 转载:教你分分钟搞定Docker私有仓库Registry

    一.什么是Docker私有仓库Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候我们的服务器无法 ...

  7. 教你分分钟搞定Docker私有仓库Registry

    一.什么是Docker私有仓库Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候我们的服务器无法 ...

  8. 教你分分钟搞定Python之Flask框架

    用最短的时间开发一个数据操作接口,Python是王道! 一.安装pip .首先检查linux有没有安装python-pip包,终端执行 pip -V [root@ network-scripts]# ...

  9. 分分钟搞定Python之排序与列表

    排序时程序中用得比较多的方法了.在Python中,最简单的排序方法摸过与使用内置的sorted(list)这个函数了,该函数一一个列表作为参数返回一个新的列表,只不过是把旧列表中的元素排过序了.原列表 ...

随机推荐

  1. 玩转VFS(sys_open, overlayfs, rename)

    带着问题学习dentry 1)文件删除时 dentry的结构是如何变化的?是直接设置无效的吗?如果此时正好有个访问是在要删除目录下的一个文件,这咋办呢? 2)内核document目录下级联式地使用 d ...

  2. RPC里面的序列化反序列化以及拆包粘包

    1.序列化(1)什么是序列化? Java的序列化是把对象转换成有序字节流的过程.以便进行网络传输或者保存到本地.(2)为什么要序列化? 当两个进程进行远程通信时,如果需要发送各种各样的数据,文本.音频 ...

  3. [剑指Offer] 43.左旋转字符串

    题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abc ...

  4. BZOJ4399 魔法少女LJJ(线段树合并)

    注意到只有增加点/合并的操作.这些操作都可以用线段树完成,于是线段树合并一发就好了.注意乘积大小直接比较肯定会炸,取个对数即可.数据中存在重边. #include<iostream> #i ...

  5. Java23个设计模式的简明教程

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  6. IntellIJ IDEA 配置 Git,顺带解决Git Push rejected问题

    1.下载便携版本git https://git-scm.com/download/win 弹出的下载取消,重新选择 2.解压自压缩文件. 3.配置IDEA 4.测试 5.配置终端环境shell为bas ...

  7. 为什么比IPVS的WRR要好?

    动机 五一临近,四月也接近尾声,五一节乃小长假的最后一天.今天是最后一天工作日,竟然感冒了,半夜里翻来覆去无法安睡,加上窗外大飞机屋里小飞机(也就是蚊子)的骚扰,实在是必须起来做点有意义的事了!    ...

  8. [Leetcode] plus one 加一

    Given a number represented as an array of digits, plus one to the number. 题意:给定数以数组的形式存储,然后计算该数加1的值. ...

  9. JavaScript数组遍历map()的原型扩展

    在 JavaScript 1.6 里,javascript 数组增加了几个非常有用的方法:indexOf.lastIndexOf.every. filter. forEach. map. some,其 ...

  10. hive对有特殊值null的数据倾斜处理

    对有特殊值的数据倾斜处理 SET mapred.reduce.tasks=20;SET hive.map.aggr=TRUE;SET hive.groupby.skewindata=TRUE;SET ...