分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

JSP、EL、JSTL

发布时间:2023-09-06 02:20责任编辑:熊小新关键词:暂无标签

一、JSP

1、什么是JSP

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

2、为什么有JSP

html多数情况下用来显示静态内容,一成不变的。但是有时候我们需要在网页上显示一些动态数据,比如:查询所有学生的信息,根据姓名去查询某个具体学生。这些动作都需要去查询数据库,然后在网页上显示。html是不支持写Java代码的,JSP里面可以写Java代码。

3、怎么用JSP

  3.1、三个指令

   指令写法:  <%@ 指令名字 %>

   1、page指令:

    *language:表示JSP可以写Java代码

    *contentType:说明文件是什么类型,告诉浏览器是什么内容类型以及用什么编码    

      contentType="text/html;charset=UTF-8"

      text/html MIMEType 这是一个文本,html网页

    *pageEncoding JSP内容编码

    *extends用于指定JSP翻译成Java文件后,继承的父类是谁,一般不用该

    *import导包使用的,一般不用手写

    *session

      可选值有true or false

      用于控制在这个JSP页面里面,能够直接用session对象

      具体的区别是:查看翻译后的Java文件,如果该值是true,那么在代码里面会有getSession()的调用,

      如果是false:那么就不会有该方法的调用,也就是没有session对象。在页面上自然就不能使用session了。

    *errorPage

      指的是错误的页面,值需要给错误的页面路径

    *isErrorPage

      上面的errorPage指定错误的时候跑到哪一个页面去。这个isErrorPage是用于声明某个页面到底是不是错误的页面。

   2、include指令:

      包含另外一个JSP的内容进来:<%@ include file="other.jsp"%>把另外一个页面的内容拿过来,所有元素标签都包含进来

   3、taglib指令:

      <%@ taglib prefix="" uri=""%>       uri:标签库路径,prefix:标签库的别名(固定搭配)

  3.2、三个动作标签

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

    <jsp:param value="" name=""/>

    <jsp:forward page=""></jsp:forward>

  jsp:include

    包含指定的页面,这里是动态包含,也就是把包含的页面所有元素标签全部

  jsp:forword

    前往哪一个页面。

   和<% request.getRequestDispatcher("").forward(request,response); %>效果相同

  jsp:param

    意思是:在包含某个页面的时候,或者在跳转到某个页面的时候,加入这个参数。

    

 ???<jsp:forward page="03.jsp"> ???????<jsp:param value="address" name="beijing"/> ???</jsp:forward>

  <%= request.getParameter("address")%>//在03.jsp中获取传入的值

  3.3、九个内置对象

     所谓内置对象,就是我们可以直接在jsp页面中使用这些对象。不用创建

    - pageContent

    - request

    -session

    -application

    以上是四个作用域对象(作用域:表示这些对象可以存值,我们的取值范围有限定。setAttribute和getAttribute)

 ???????使用作用域来存储数据<br> ???????<% ???????????pageContext.setAttribute("name", "page"); ???????????request.setAttribute("name", "request"); ???????????session.setAttribute("name", "session"); ???????????application.setAttribute("name", "application"); ???????%> ???????????????取出四个作用域中的值<br> ???????????????<%=pageContext.getAttribute("name")%> ???????<%=request.getAttribute("name")%> ???????<%=session.getAttribute("name")%> ???????<%=application.getAttribute("name")%> ???????????????

    作用域范围大小:pageContext(作用域仅限于当前页面,还可以获取到其他八个内置对象) -- request(作用域仅限于一次请求,

    只要服务器对该请求做出了响应。这个值域中存的值就没了) -- session(作用域仅限于一次会话(多次请求与响应)当中) 。

    -- application(整个工程都可以访问,服务器关闭后就不能访问了)

    -out

    -response

    -exception

    -page

    -config

二、EL表达式

  是为了简化JSP代码,具体一点就是为了简化在JSP里面写的那些Java代码。

  *写法格式:${表达式}

  如果从作用域中取值,会先从小的作用域开始取,如果没有就往下一个作用域取,一直把四个作用域取完都没有,就没有显示。

1、如何使用  

  1.1、取出四个作用域中存放的值

<% ???pageContext.setAttribute("name", "page"); ???request.setAttribute("name", "request"); ???session.setAttribute("name", "session"); ???application.setAttribute("name", "application");%>按普通手段取值<br><%=pageContext.getAttribute("name") %><%=request.getAttribute("name") %><%=session.getAttribute("name") %><%=application.getAttribute("name") %><br>使用EL表达式取出作用域中的值<br>${ pageScope.name }${ requestScope.name }${ sessionScope.name }${ applicationScope.name }<br>

  1.2、如果域中所存的是数组

<%String [] a = {"aa","bb","cc","dd"};pageContext.setAttribute("array", a);%>使用EL表达式取出作用域中数组的值<br>${ array[0] },${ array[1] },${ array[2] },${ array[3] }

  1.3、如果如果域中锁存的是集合

<% ???Map map=new HashMap(); ???map.put("name", "zhangsan"); ???map.put("age", 18); ???map.put("address", "北京.."); ???????map.put("address.aa", "深圳.."); ???????pageContext.setAttribute("map", map);%>

  1.4、取出Map集合的值

<br>--------------Map数据--------------<br><% ???Map map=new HashMap(); ???map.put("name", "zhangsan"); ???map.put("age", 18); ???map.put("address", "北京.."); ???????map.put("address.aa", "深圳.."); ???????pageContext.setAttribute("map", map);%>${ map.name },${ map.age },${ map.address },${ map["address.aa"] }

2、取值细节    

  2.1、从域中取值。得先存值

<% ???session.setAttribute("name", "张三");%><b>通过pageScorpe查找的结果为:</b>${pageScorpe.name}<!-- 直接指定去pageScropename作用域找name --><br><b>直接查找结果为:</b>${ name }<!-- 从page里找,如果没有去request中找,如果没有去session找,如果还没有去application中找 --><br><b>通过sessionScorpe查找的结果为:</b>${ sessionScope.name }

  2.2、取值方式

  如果这份值是有下标的,那么直接使用[],如果没有下标,直接使用.的方式去取。

<% ???String[] array = {"aa","bb","cc","dd"}; ???session.setAttribute("array", array);%><% ???User user = new User("zhangsan",18); ???session.setAttribute("u", user);%><b>这是用下标取到的内容:</b>${ array[0] },${ array[1] },${ array[2] },${ array[3] }<br><b>这是没有下标的情况</b>${ u.name },${ u.age }

  以上代码运行效果如下:

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

3、EL表达式11个内置对象  

${对象名.成员}

-pageContext

作用域相关的对象

-pageScope

-requestScope

-sessionScope

-applicationScope

头信息相关对象

-header

-headerValues

参数相关对象

-param

-paramValues

-cookie

全局初始化参数

-initParam 

三、JSTL

全称:JSP Standard Tag Library(JSP标签标准库)

简化JSP的代码编写。替换了<% %>写法。一般与EL表达式配合

1、怎么使用

1.1、导入jar文件到工程的WebContent/Web-Inf/bin jstl.jar standard.jar

1.2、在JSP页面上使用taglib指令来引入标签库

2、常用标签

<c:set></c:set>

<c:if test=""></c:if>

<c:forEach></c:forEach>

*c:set

<!-- 声明一个对象name,对象的值zhangsan,存储到page(默认),指定是session --><c:set var="name" value="zhangsan" scope="session"></c:set>

${sessionScope.name}

*c:if

判断test里面的表达式是否满足,如果满足,就执行c:if标签中的输出,c:if是没有else的 

<c:if test="${age>16 }" var="flag">年龄大于16岁......</c:if><c:if test="age>=26">年龄大于26岁...</c:if>

*c:forEach

<!-- 从1开始遍历到10,步长为2,得到的结果赋值给i,存储到page区域 --><c:forEach begin="1" end="10" var="i" step="2">${i }</c:forEach><%List list = new ArrayList();list.add(new User("zhangsan",18));list.add(new User("lisi",28));list.add(new User("wangwu",38));list.add(new User("maliu",48));pageContext.setAttribute("list", list);%><!-- var:遍历出来的每个元素用user去接收。item:表示遍历哪一个对象,注意,这里写的必须是EL表达式 --><c:forEach var="user" items="${list }">${user.name }--------${user.age }<br>

JSP、EL、JSTL

原文地址:https://www.cnblogs.com/wangbobobobo/p/9854411.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved