1 什么是JSP?

从用户角度看待,是一个网页
从程序员角度,其实是一个Java类,他继承了Servlet,所以可以直接说JSP就是一个Servlet

为什么会有JSP?
html多数情况下用来显示静态内容,是一程不变的,不支持Java代码。
jsp支持Java,动态网页

2 jsp三大指令  page include  taglib

page指令: pageCoding:jsp内容编码
               extends: 用于指定jsp翻译成java文件后,继承的父类是谁
               import:导包
               session: true or false ,用于这个jsp页面能否直接使用session对象。
                                      在代码的体现:有无getSession方法的调用,也就是有无session对象
               errorPage:错误界面,
               exception:需要开启isErrorPage为true
  include指令:包含另外一个jsp进来,例如:<%@ include file="index.jsp" %>
  taglib指令:uri:标签库路径   prefix:标签库的别名
   

3 jsp动作标签:

<jsp:include page=""/>
   <jsp:param value="" name=""/>
   <jsp:forward page=""/>

jsp:include:动态包含,不包含元素,而是把它的运行结果拿过来
jsp:param:跳转页面的时候把参数带过去
jsp:forward:前往哪个个页面

4 JSP四个作用域和五个内置对象(重点)

所谓内置对象 ,就是我们可以直接在jsp页面<%%>中使用这些对象,不用创建,
      
四大作用域的使用:      
      使用作用域来存取数据<br>
   <%
     pageContext.setAttribute("name", "pageContext");
     request.setAttribute("name", "request");
     session.setAttribute("name", "session");
     application.setAttribute("name", "application");
   %>
      取出四个作用域的值<br>
   <%=pageContext.getAttribute("name")%><br>
   <%=request.getAttribute("name")%><br>
   <%=session.getAttribute("name")%><br>
   <%=application.getAttribute("name")%><br>
   
     四个作用域的区别:
pageContext:作用域限于当前页面,在当前页面设置请求转发,跳转到另外一个页面后发现getAttribute为null
request:作用域限于一次请求,在当前页面使用重定向两次请求,第一次请求存的值,第二次跳转后发现getAttribute为null
session:作用域限于一次会话(多次请求与响应),重启浏览器,直接跳转04页面,第二次会话,setAttrubute为null
application:作用域限于整个工程,但服务器关闭就不能访问了
以上是四个作用域对象:可以存取数据,他们的取值范围有限定 setAttribute  getAttribute

五大内置对象:
out(JspWriter)
response(HttpResponse)

exception(throwable)
config(ServletConfig)
page(object)   就是这个jsp翻译成java类的实例对象

5 EL表达式:${}   为了简化jsp代码,简化jsp里面的java代码,EL表达式没有提示

用EL表达式取出四个作用域中存放的值:<br>
  ${ pageScope.name}<br>
  ${ requestScope.name}<br>
  ${ sessionScope.name}<br>
  ${ applicationScope.name}
 <br>--------------------------------<br>
  <%
    String[] a = {"aa","bb","cc","dd"};
    pageContext.setAttribute("array", a);
  %>
   使用EL表达式取出作用域数组的值<br>
  ${array[0]},${array[1]},${array[2]},${array[3]}
  <%%>
   <br>-------------集合数据-------------------<br>
   <%
      List list = new ArrayList();
      list.add("aa");
      list.add("1");
      list.add("2");
      list.add("aa");
      pageContext.setAttribute("array", list);
   %>
    使用EL表达式取出作用域集合的值<br>
    ${array[0]}, ${array[1]}, ${array[2]}, ${array[3]}
   <br>-------------Map数据-------------------<br>
   <%
      Map map = new HashMap();
      map.put("name","zhangsan");
      map.put("age",18);
      map.put("address.aa","北京1");
      pageContext.setAttribute("map", map);
   %>
    使用EL表达式取出作用域Map的值<br>
    ${map.name},${map.age},${map["address.aa"]}

取值方式与次序:

<!--     从域中取值,先要存值 -->
  <%
//      pageContext.setAttribute("name", "pageContext");
//      request.setAttribute("name", "request");
     session.setAttribute("name", "session");
//      application.setAttribute("name", "application");
   %>
<!--    直接指定,去这个作用域找name<br> -->
   ${pageScope.name}<br>
<!--    先从page找,然后是request、session、application找<br> -->
   ${name}<br>
<!--    指定从session找 -->
   ${sessionScope.name}
   
<br>-------------domain.User-------------------<br>   
   <%
      User user = new User("zhangsan",18);
      session.setAttribute("u", user);
   %>
   ${u.name},
   ${u.age}
<!--    判断是否为空 -->
   ${empty user }

一般使用EL表达式,取出的都是从一个对象中取出它的属性值,比如取出一个学生的姓名

6 EL表达式的11个隐式对象,可以直接操作

${对象名.成员}
pageContext,实例对应于当前页面的处理

以下全是map相关的
四个作用域:
pageScope
requestScope
sessionScope
applicationScope

请求头:
header
headerValues
请求参数:
param
params

Cookie:
cookie

初始化参数:
initParam

7 JSTL表达式  JSP Standard Tab Library  jsp标准标签库

简化jsp的代码编写,替换<%%>,一般与EL表达式配合,EL只能做取值的工作,JSTL可以做遍历等操作

注意:如果要使用EL表达式,那么要使用1.1版本,1.0版本不支持EL表达式
引入标签库<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="s"%>

常用标签库
 
<c:set></c:set>         :声明了一个变量,存到域里面,域可以指定,默认为page
<c:if test=""></c:if>   : 判断test里面,如果符合条件,就输出中间的内容
<c:forEach></c:forEach> : forEach遍历,其中items属性必须写EL表达${}

<!-- 相当于声明了一个String类型的变量,存到域里面,域可以指定,默认为page -->
<c:set var="name" value="zhangsan" scope="session" ></c:set>
${sessionScope.name }

<br>-----------------<br>
<c:set value="18" var="age"></c:set>
<c:set value="15" var="age1"></c:set>
<c:if test="${age>16}">
 年龄大于16岁
</c:if>
<c:if test="${age1<16}">
年龄小于16岁
</c:if>
<br>-----------------<br>
<c:forEach var="i" begin="1" end="10" step="2">
${i }
</c:forEach>

<c:forEach var="user" items="${list}">
  ${user.name}----${user.age}<br>
</c:forEach>

十一 JSP&EL&JSTL的更多相关文章

  1. JavaEE之动态页面技术(JSP/EL/JSTL)

    动态页面技术(JSP/EL/JSTL) JSP技术 jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%= ...

  2. JavaWeb之JSP & EL & JSTL

    JSP & EL & JSTL JSP Java Server Page 什么是JSP 从用户角度看,就是一个网页.从程序员角度看,就是一个Java类,它继承Servlet,所以可以说 ...

  3. jsp&el&jstl mvc和三层架构

    jsp:java在html中插入java 一.JSP技术 1.jsp脚本和注释 jsp脚本:(翻译成servlet,源码位置apache-tomcat-7.0.52\work\Catalina\loc ...

  4. 动态页面技术JSP/EL/JSTL

    本节内容: jsp脚本和注释 jsp运行原理 jsp指令(3个) jsp内置/隐式对象(9个) jsp标签(动作) EL技术 JSTL技术 JavaEE的开发模式 动态页面技术:就是在html中嵌入j ...

  5. 回锅的美食:JSP+EL+JSTL大杂烩汤

    title: Servlet之JSP tags: [] notebook: javaWEB --- JSP是什么 ? JSP就是Servlet,全名是"JavaServer Pages&qu ...

  6. request+response+jsp+el+jstl

    response: 1.设置响应行的状态码: response.setStatus(int sc); 2.设置response缓冲区的编码:response.setCharacterEncoding( ...

  7. JSP & EL & JSTL

    JSP 什么是JSP 用户角度看待 ,就是是一个网页,从程序员角度看待 ,是继承了servlet的java类,所以可以直接说jsp 就是一个Servlet. 为什么用JSP 用于显示一些动态数据,可以 ...

  8. javaweb(3)之JSP&EL&JSTL

    JSP(Java Server Page) 介绍 什么是 JSP ? 从用户角度看,JSP 就是一个网页. 从开发者角度看,它其实就是一个继承了 Servlet 的 java 类,所以可以直接说 JS ...

  9. 04 jsp,EL,JSTL

    jsp:Java Server Page  什么是jsp?从用户角度看待 ,就是是一个网页 , 从程序员角度看待 , 其实是一个java类, 它继承了servlet,所以可以直接说jsp 就是一个Se ...

随机推荐

  1. netty代理http&https请求

    (1)关键代码 package test; import java.security.cert.CertificateException; import javax.net.ssl.SSLExcept ...

  2. mybatis源码探索笔记-5(拦截器)

    前言 mybatis中拦截器主要用来拦截我们在发起数据库请求中的关键步骤.其原理也是基于代理模式,自定义拦截器时要实现Interceptor接口,并且要对实现类进行标注,声明是对哪种组件的指定方法进行 ...

  3. Codeforces Round #592 (Div. 2)G(模拟)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;long long a[1000007],b[ ...

  4. case语句!

    1.case 语句概述(1)case 语句的作用使用 case 语句改写 if 多分支可以使脚本结构更加清晰.层次分明.针对变量的不同取值,执行不同的命令序列.2.case 语句的结构:case 变量 ...

  5. 《JavaScript高级程序设计》读书笔记(序)

    1.现大三暑假中,计划9月初北上找前端工作,大三一年时间都在健身和学习专业课知识,技术有点荒废了,7月份忙于学校安排的实习javaweb方向的,到现在才有整段的时间好好把基础巩固一. 2.这几天也在关 ...

  6. 4 CSS导航栏&下拉菜单&属性选择器&属性和值选择器

    CSS导航栏 熟练使用导航栏,对于任何网站都非常重要 使用CSS你可以转换成好看的导航栏而不是枯燥的HTML菜单 垂直导航栏: <!DOCTYPE html> <html> & ...

  7. 基于Modelsim的视频流仿真

    一.前言 最近在看牟新刚写的<基于FPGA的数字图像处理原理及应用>,书中关于FPGA数字图像处理的原理的原理写的非常透彻,在网上寻找了很久都没有找到完整的源代码工程,因此尝试自己做了补充 ...

  8. c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)

    运算符重载规则: 只有已经存在的运算符才能被重载,不能自己制造一个c++中没有的运算符进行重载 重载可以在类或枚举类型内进行,也可以是全局函数,但int.float这种已有的类型内是不被允许的 不能二 ...

  9. 认识gets&read(buffer over flow is bof)

    gets不会检查输入的长度,从而有数据覆盖的风险,

  10. 谈谈spring mvc与struts的区别

    1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...