博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP_EL_JSTL
阅读量:6770 次
发布时间:2019-06-26

本文共 6862 字,大约阅读时间需要 22 分钟。

hot3.png

一.jsp技术

1.作用:

将内容的生成和显示进行分离 

JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面,并使用JSP标识或者小脚本来生成页面上的动态内容

2.jsp脚本:

<%java代码%>:翻译到servlet中service方法中

<%=变量/表达式%>:翻译到servlet中service方法中的out.print();

<%!java代码%>:翻译成servlet中的全局部分

3.jsp注释:

html注释:<!-- 注释内容 -->  可见范围:jsp源码----翻译后的servlet----页面源码 都可见

java注释:在脚本中  //   /**/   /***/   可见范围:jsp源码 ---- 翻译后是servlet

jsp注释:<%-- jsp注释 --%>  可见范围:jsp源码

4.jsp的指令

三种jsp的指令 page  taglib  include

<%@ page %> 决定jsp的一些属性

language 页面使用的语言

import 导包

pageEncoding/content-type 决定页面编码

isErrorPage 可以获得页面的Exception对象

<%@ include %> 静态包含 , 两个页面会生成一个Java文件. 两个页面可以共享代码.

file 指定需要包含的页面路径

                        <%@ include file=""%>

<%@ taglib %> 引入EL函数库 或 JSTL标签库

prefix 前缀

uri 导包

                            <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>   引入JSTL函数库

5.JSP的九个内置对象

内置对象     类型

request          HttpServerletRequest 

response        HttpServerletResponse

session           HttpSession

exception       Throwable

application     ServletContext

config            ServletConfig

page Object

out JspWriter

pageContext PageContext(可见范围:就在该jsp中)

                        1> 本身是一个域对象

2> 还可以控制其他3个域

3> 引用了其他8个内置对象

                           pageContext的findAttribute(name) ---- 从四个域中寻找  顺序:page域--->request域--->session域--->application域

内置对象out与response的getWriter流的区别

out会在代码编写的地方输出

response流会在html标签之前进行输出

<%

    response.getWriter().write("a");

    out.print("b");

    response.getWriter().write("c");

    out.print("d");

     %>

输出结果:ac bd  

6. 域

 是用来存放数据

不同域: 共享数据的范围不同

    request: 一次请求范围内共享数据

    session: 一次会话范围内

    application: 整个项目内

     pageContext:当前页面中,页面对应的的servlet的service方法中

    域的本质: 本质就是Map.不同的域无非就是在不同的对象中放置的map.

page域    

    page域: 用来存放共享数据

    范围: 当前页面中.页面对应的servlet的service方法中.

    本质: pageContext对象的一个map.

1>. 操作: 

//设置域

    pageContext.setAttribute("name", "tom");

//获得域

    pageContext.getAttribute("name");

//删除域

    pageContext.removeAttribute("name");

2.> page域可以操作其他三个域

可以利用pageContext对象向request、session、application域中存取数据

通过pageContext操作request域向其中添加2个键值对

<%

      pageContext.setAttribute("name", "Tom", PageContext.REQUEST_SCOPE);

      pageContext.setAttribute("name02", "Sony", pageContext.REQUEST_SCOPE);

 %>

//获取request域中键为name的value值

      <%=pageContext.getAttribute("name",PageContext.REQUEST_SCOPE) %>

      <%=pageContext.getAttribute("name02",pageContext.REQUEST_SCOPE) %>

//获取request域中所有的键

      <%=pageContext.getAttributeNamesInScope(pageContext.REQUEST_SCOPE) %>

//删除request域中的键值对

      <% pageContext.removeAttribute("name", pageContext.REQUEST_SCOPE); %>

3.>

pageContext引用了其他八个内置对象    

    <%

    pageContext.getRequest();

    pageContext.getResponse();

    pageContext.getSession();

    pageContext.getServletContext();

    pageContext.getServletConfig();

    pageContext.getOut();

    pageContext.getPage();

    pageContext.getException();   

    %>

7. jsp动作标签

什么是标签及其作用

JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

Jsp中常用动作标签

jsp:forward

<jsp:forward>标签是用来做请求转发,它与RequestDispatcher接口的forward()方法一样,唯一不同的是它是在jsp页面中使用。

jsp:include

<jsp:include>标签的作用使用来包含其他jsp页面,之前学习的include指令属于静态包含,而include动作标签是动态包含,它和RequestDispatcher接口的include()方法一样,是运行级别的包含

jsp:param

<jsp:param>标签作为<jsp:forward>标签和<jsp:include>标签的子标签,用来给转发或包含的页面传递数据。

包含:

<jsp:include page="/index.jsp"></jsp:include>

<%

      //request.getRequestDispatcher("").include(request, response);

      %>

转发:

<jsp:forward page="/page01/demo02.jsp"></jsp:forward>

<%

//request.getRequestDispatcher("/index.jsp").forward(request, response);

%>

二.EL表达式

EL表达式的作用:

    1.取得域中的数据.

    2.EL表达式中内置了11个对象

    3.EL表达式支持的简单运算  

EL的语法: ${表达式内容}

<%     	//准备数据     	request.setAttribute("name", "requestTom");     	session.setAttribute("name", "sessionTom");     	application.setAttribute("name", "applicationTom");     	pageContext.setAttribute("name", "pageTom");     	      %>      EL的从域中取值:
              request域:${requestScope.name}
      session域:${sessionScope.name}
      application域:${applicationScope.name}
        page域:${pageScope.name}
                从小域到大域自动查找名为name的键值对:${name}
        从小域到大域自动查找名为name的键值对:<%=pageContext.findAttribute("name") %>       

        使用EL表达式.如果取到的值为null,那么不输出: ${abc}
        <%=request.getAttribute("abc") %>

223959_FSMH_1393804.png

     <%     	Cookie cookie = new Cookie("name","cookieTom");     	response.addCookie(cookie);      %>     5>pageContext: ${pageContext.request.contextPath} 
6>cookie代表浏览器发送的Cookie: ${cookie.name.value}     
//------以下不常用-------     
          7>param 代表浏览器发送的参数 :${param.name}
8>paramValues 代表浏览器发送的参数 :${paramValues.name[0]} 
9>header 代表浏览器请求头 :${header.Cookie}                        
10>headerValues 代表浏览器请求头 :${headerValues.Cookie[0]}                       
11>initParam 代表项目中的context-param参数 : ${initParam.name}

234629_Obi5_1393804.png

EL函数:

el可以调用java方法 ---- el函数库

jstl函数库中的函数

步骤:

    (1) 在jsp中使用taglib指令引入el函数库

    (2) 使用函数库

语法:${前缀:函数}

el常用函数示例:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>      
<%=basePath%>">        
My JSP 'demo05.jsp' starting page    
    
              fn:contanins:查看input中是否包含substring,包     含返回true,否则返回false;
     ${fn:contains("Java","J")} 
      

     fn:escapeXml:把input中“<”、“>“、”&“、”'“、“"”进行转义
     ${fn:escapeXml("

")}
     

     fn:indexOf:返回input中substring出现的索引位置;
     ${fn:indexOf("Swift","i") }
     

     fn:containsIgnoreCase:忽略大小写的情况下,判断"Java"中是否包含"A"
     ${fn:containsIgnoreCase("Java","A") }
     

     fn:endsWith:判断test.bak是否以.bak结束
     ${fn:endsWith("test.bak",".bak") }

  <%     String[] arr={"Java","PHP","Python","Swift","Go"};     request.setAttribute("array", arr);     %>     fn:join:将arr数组中的元素以“-”连接,并返回
      ${fn:join(array,"-") }
      

      fn:length:最终是将数组的元素以“-”连接,并返回
      ${fn:length(array) }
  

三.JSTL

jstl标准标签库 

主要使用core: 核心库和fmt:  格式化库

core:

    if

    choose

    when

   otherwise

    foreach

    url

    param

    redirect

     param

fmt:

    formatdate

    formatnumber

主要JSTL用法

foreach:

  	
        <%-- c:foreach 页面遍历标签         items属性: 填写需要遍历的集合&数组     var属性: 每次遍历,会将当前遍历的对象使用var属性值作为键放入page域          --%>            <%     List list = new ArrayList();     list.add("tom");     list.add("jerry");     list.add("jack");     list.add("rose");          request.setAttribute("list", list);     %>          
            姓名      索引      计数      当前是否是第一个元素      当前是否是最后一个元素           
     
      ${pageScope.name}      ${pageScope.st.index}      ${pageScope.st.count}      ${pageScope.st.first}      ${pageScope.st.last}                     

      <%-- c:foreach 页面数数      begin : 开始数数的位置     end: 数数结束的位置     step: 步长         --%>       
上一页   
     ${pageScope.num}       
下一页           

if与choose用法

     <%     	request.setAttribute("num01", 10);     	request.setAttribute("num02", 5);      %>      <%-- 
 判断标签 --%>      
             
       
 
num02}">num1大!  
一样大!  
num2大!
 
  

转载于:https://my.oschina.net/CentralD/blog/638164

你可能感兴趣的文章
cmd中ls命令的添加
查看>>
HttpClient4.3模拟登陆OSChina开源社区
查看>>
JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
查看>>
【插件开发一】开发简单OpenFire插件
查看>>
Android数据存储SQLite的事务操作
查看>>
EditText输入字数限制的三个方法
查看>>
Docker学习(五)—— 单机Redis安装与集群安装和分布式安装
查看>>
eclipse使用一段时间后很卡,如何解决?
查看>>
IS Decisions如何帮助企业提高安全标准
查看>>
华为HCNP/HCNA的小伙伴们,你们不能错过的资源都放这了!
查看>>
Linux 查看网卡流量iptraf
查看>>
深入分析ConcurrentHashMap
查看>>
Live your life that the fear of death
查看>>
基于Node.js的socket.io机制的陷阱,仅针对于客户端继承socket.io的问题的解决方案...
查看>>
ZooKeeper.分布式锁
查看>>
no route to host zabbix的解决办法
查看>>
SiteMesh的使用
查看>>
LAMP- CentOS 7平台三机FastCGI模型
查看>>
linux source命令及脚本的执行方式解析
查看>>
解决docker pull镜像速度慢的问题
查看>>