JSP

简介

概念:可以运行在服务器端的动态显示页面技术

作用:负责动态数据展示,替代servlet中view的servlet程序

书写:在HTML标签中,个别嵌套java代码

JSP脚本元素

可以书写Java代码标签

表达式脚本

1.作用:运行java代码,并产生结果    将结果显示给浏览器

2.语法给是:<%= java的表达式%>

3.注意事项:不能再java表达式结尾写 ;

声明脚本

1.作用: 声明变量(相当于view的servlet的属性),定义函数

2.语法格式: < %! 代码%>

普通脚本

1.作用: 书写并运行流程控制普通java代码

2.语法格式: <% 普通java代码 %>

3.注意问题: JSP中java脚本标签不能嵌套

JSP执行原理

  浏览器-->ABC.jsp---->tomcat将jsp翻译成servlet  ABC.java  ----(编译)----ABC.class---调用service方法

JSP指令元素

page页面指令
    语法:
        <%@ 指令名  属性名=‘值’%>
        <%@page 属性名='值’%>
常用指令属性:
    pageEncoding:tomcat读取jsp翻译成servlet时,使用字符流编码
    import:导包
    isErrorPage:boolean类型,是否为错误页面(true为错误页面,内置java对象exception)
    erroPage:指定错误页面(指定错误页面的rul-pattern)
    contentType:设置浏览器解析内容响应类型
    session:boolean类型(true 饿汉式  相当于req.getSession(); falst  懒汉式 相当于没有)

包含指令
    语法:
        <%@include file="被包含文件的url-pattern"%>
    作用:复用部分jsp代码
    原理: 源代码包含(静态包含)。存在java变量冲突问题

动作指令 语法:      
<jsp:动作名称 属性名=“属性值”/>    <jsp:include page="被包含的jsp的url-pattern“/> 作用:复用jsp的效果 原理:动态包含

JSP内置对象(9个)

  • 概念: 可以直接在java脚本中使用的对象(不需要创建和声明)
  • 原理:service方法的局部变量
  • 注意:内置对象只能在表达式脚本和普通脚本中使用

常见内置对象

  • 1.exception:只能在isErrorPage='true'
  • 2.request:代表请求对象,service方法的形参
  • 3.session:代表HttpSession
  • 4.application:servletContext对象
  • 5.response:代表响应对象response
  • 6.page: this 当前jsp翻译后的servlet的对象
  • 7.out:JspWriter(相当于PrintWriter),面向浏览器的输出流对象
  • 8.config:相当于ServletConfig   配置常量信息  init加载时
  • 9.PageContext(重要): 
作用域:当前JSP页面内的生命周期
  存:pageContext.setAttribute("name",值);
  取:pageContext.getAttribute("name");
    
管理4个作用域:   存值:
    pageContext.setAttribute(String 名字,Object 值,
int);   int参数:    PageContext.PAGE_SCOPE;将命名属性存入PageContext作用域   PageContext.REQUEST_SCOPE;存入request作用域   PageContext.SESSION_SCOPE;存入session作用域   PageContext.APPLICATION_SCOPE;存入application作用域   取值:
    pageContext.getAttribute(String 名字,
int 作用域常量值);  
管理其他8个内置对象   动态获得项目名:     req.getContextPath();   借助于pageContext动态获得项目名     pageContext.getRequest().getContextPath();

EL表达式

  • 作用:执行表达式,并且将表达式结果,响应输出浏览器
  • 语法:${el 表达式}

 获得作用域中的值

EL内置对象:
获得PageContext作用域: ${pageScope.命名属性的name}
获得request作用域:${requestScope.命名属性的name}
获得session作用域:${sessionScope.命名属性的name}
获得application作用域:${application.命名属性的name}

访问对象的属性

语法:${对象.属性名}
   ${对象.属性名.属性的属性名}

原理(重点):${对象.get属性的方法名取消get,首字母小写}

el内置对象:pageContext
动态获得项目名
方法:pageContext.getRequest().getContextPath();
EL:${pageContext.request.contextPath}

获得请求参数

请求参数:浏览器发送servlet的请求数据(超链接、form提交、地址栏)
servlet接收:req.getParameter("name");
JSP: ${param.请求参数名字}

访问list和map集合

EL访问List集合
    访问list集合中i下标的元素:${list集合[i]}    //相当于list.get(i)

EL访问Map集合
    根据map的key获得对应的值
    要求:key必须是数字或者字符串类型
    语法:${map.key}    key不能为数字
             ${map["key"]}  通用

访问cookie中值

${cookie.cookie的name.value}//得到对应name的cookie对象

 

JSTL标签库

   第三方提供的标签库

  语法:<前缀:if 属性名='值'></前缀:标签名>

  使用:

1.导入jstl标签库jar
2.在jsp中引入标签库
    <%@taglib uri="****"  prefix =' c 前缀名'%>
3.使用标签库
    <c: 标签名  属性名 = '值'></c:标签名>

  

  常见的jstl标签  

1.单条件判断
  <c:if test = "el表达式写条件"> 条件成立后执行的代码 </c:if> 2.多条件分支 <c:choose> <c:when test="条件1">条件1成立运行的代码</c:when> <c:when test="条件2">条件2成立运行的代码</c:hwen> <c:otherwise>所有条件都不成立,执行的代码</c:otherwise> </c:choose> 3.循环遍历
  List集合遍历:
<c:forEach var="p" items="被遍历的list集合"> 被循环执行的代码
     获得当前遍历对象//将p自动存入pageContext作用域中
     ${p}
</c:forEach> 常用属性: items:被遍历的集合 var:当前被遍历对象的名字 begin:起始下标 end:截止下标 step:步长 varStatus:描述下标和序号 varStatus=“**” ${**.count}//序号 从1开始的序号 ${**.index}//下标 从0开始的下标
  
  Map集合遍历:
  <c:forEach items="被遍历的map集合" var = "en">
    ${en} //Map.Entry 包含key-value
    en.key
    en.value
  </c:forEach>

4.c:set标签
  作用:可以向作用域中存入数据(命名属性:name value)
  本质:pageContext.setAttribute("name",value,int作用域);
  语法:<C:set var="name" value="值" scope="那个作用域"></c:set>
  scope可选值: page request session application
  <c:set var="命名属性的name" scope="作用域">
    值
  </c:set>

5.c:remove标签
  作用:从作用域中删除某个值
  语法:<c:remove var="命名属性的name" scope="那个作用域">

6.c:url标签
  作用:1.自动追加项目名
     2.在cookie被禁用的情况下,自动url重写
  语法:
     <c:url value="url-pattern路径"></c:url>

7.日期格式化显示标签
  需要先导入fmt标签路径
  语法:
     <fmt:formatDate value="" pattern=""/>
     value:需要格式化显示的日期
     pattern:格式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/lhl0131/p/13203663.html