JavaWeb| JSTL标签库看这篇文章就够了!(含案例)

简介: JavaWeb| JSTL标签库看这篇文章就够了!(含案例)

1写在前面的话


     今天给大家写一篇Web系列的文章,大部分人可能会觉得Web的东西很基础,如果这方面你很精通了可以忽略,但是我还是想出一系列的文章去帮助刚刚入门的小伙伴。


      废话不多说,今天咱们来讲讲JSTL标签库。




2EL表达式


     在讲JSTL标签库之前,我首先给大家讲讲EL表达式,这个对于接触过web开发的人并不陌生。EL表达式全名Expression Language,它的主要目的就是简化JSP中的表达式的方法,让JSP中的代码更加的简化,他可以直接写在JSP页面当中,这样可以减少JSP脚本的编写。



EL表达式是如何从域中取数据呢?


我们用jsp脚本来获取域中的数据:


<%=request.getAttribute(name)%>


我们再用EL表达式来代替上面的脚本


${requestScope.name}

可以看到我们的代码量是减少了一些,而且可以直接通过“.”来获取数据,EL表达式最主要的作用就是获取四大域中的数据,其格式都是${EL表达式}


例如:


EL获得pageContext域中的值:$ { pageScope.key }

EL获得request域中的值:$ { requestScope.key }

EL获得session域中的值:$ { sessionScope.key }

EL获得application域中的值:$ { applicationScope.key }


如果你是这么写:$ {key} ,那么它会依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不会再继续向下寻找了。


实例:el.jsp


....
<%        pageContext.setAttribute("name","xiaoming");        
          request.setAttribute("name","小明");        
          User  user  =  new  User();//IDEA导包快捷键Art+enter        user.setName("小花");        user.setSex("女");        session.setAttribute("user",user);
          List  list=new  ArrayList<>();        
          User  user1=new  User();        
          user1.setName("小强");       
          user1.setSex("男");        
          User  user2=new  User();        
          user2.setName("小丽");        
          user2.setSex("女");        
          list.add(user1);        
          list.add(user2);        
          application.setAttribute("list",list); %> 
          <%=request.getAttribute("name")%> 
          <% User  user3=(User)session.getAttribute("user");        
          String  name  =user3.getName();        
          out.write(name); %> 
          <% List  list1=(List)application.getAttribute("list");        
          User  user4=list1.get(0);        
          out.write(user4.getName()); %> 
          ${requestScope.name} 
          ${sessionScope.user.name} 
          ${applicationScope.list[0].name} 
          ${name} 
          ${user.name} 
          ${list[0].name}


输出结果:


image.png




3EL的内置对象和执行表达式



  1. EL的内置对象



    获取JSP中域中的数据pageScope,requestScope,sessionScope,applicationScope


     接收参数param,paramValues  

相当于request.getParameter() 和 request.getParameterValues()


    获取请求头信息header,headerValues

相当于request.getHeader(name)


   获取全局初始化参数initParam()

相当于this.getServletContext().getInitParameter(name)


    web开发中的cookiecookie

相当于request.getCookies() --> cookie.getName() -->cookie.getValue()


    web开发中的pageContextpageContext

pageContext可获得其他八大对象


<%-    Created  by  IntelliJ  IDEA.    User:  Administrator    Date:  2018/7/14    Time:  15:33    To  change  this  template  use  File  |  Settings  |  File  Templates. --%> 
<%@  page  contentType="text/html;charset=UTF-8"  language="java"  %>
<%--    获取参数    --%> 
${param.userName} 
<%--    主机信息?--%> 
${header.host}


2. 执行表达式


${1+1}
${2>1} 
${2  eq  2} 
${2>1  ||  3>2} 
${2>1  ?  ture:false} 
${empty  user}


输出结果:


image.png


4JSTL简介


   JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面当中使用标签的形式完成业务逻辑等功能,JSTL出现的目的和EL是一样的,也是要代替jsp页面中的脚本代码。JSTL标准库有5个子库,但是目前比较常用的还是他的核心库(Core)。


image.png


首先,我们需要下载标签库,并且安装在idea当中:


下载地址:


http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglib s-standard-1.1.2.zip


具体的安装教程,这里就不多说,大家可以自行百度一下,非常的简单。


下面我通过一个案例来给大家演示这些标签:


案例】实现商品列表展示:


PhoneListServlet.java



import  zyw.bean.Phone;import  javax.servlet.ServletException; import  javax.servlet.annotation.WebServlet; import  javax.servlet.http.HttpServlet; import  javax.servlet.http.HttpServletRequest; import  javax.servlet.http.HttpServletResponse; import  java.io.IOException; import  java.util.ArrayList; import  java.util.List;@WebServlet(name  =  "PhoneListServlet",urlPatterns  =  "/phonelist") public  class  PhoneListServlet  extends  HttpServlet  {              protected  void  doPost(HttpServletRequest  request,  HttpServletResponse  respo nse)  throws  ServletException,  IOException  {        }        protected  void  doGet(HttpServletRequest  request,  HttpServletResponse  respon se)  throws  ServletException,  IOException  {                //通过servlet从数据库中获取数据,我们这里暂时通过手动创建数据                Phone  phone=new  Phone();//鼠标放在Phone上Alt+Enter快捷键建立Phone类                phone.setName("iphone6");                phone.setId(001);                phone.setImage("https://img10.360buyimg.com/n7/jfs/t277/193/1005339798/ 768456/29136988/542d0798N19d42ce3.jpg");                phone.setPrice("3900");                Phone  phone1=new  Phone();                                phone1.setName("坚果pro");                                phone1.setId(002);                                phone1.setPrice("1799");                                phone1.setImage("https://img13.360buyimg.com/n7/jfs/t5377/56/1578379545 /209772/32105f74/5911bcbdN7afa707b.jpg");                Phone  phone2=new  Phone();                                phone2.setName("vivo  x9");                                phone2.setPrice("2345");                                phone2.setId(003);                                phone2.setImage("https://img12.360buyimg.com/n7/jfs/t6067/340/210139037 6/231820/750cc50e/593aa83fN8b0829fc.jpg");                Phone  phone3=new  Phone();                                phone3.setName("oppo  A57");                                phone3.setId(004);                                phone3.setPrice("1399");                                phone3.setImage("https://img10.360buyimg.com/n7/jfs/t4978/185/135948089 /78285/f6a84203/58db6fa4N354322d9.jpg");                Phone  phone4=new  Phone();                                phone4.setName("诺基亚6");                                phone4.setId(005);                                phone4.setPrice("1699");                                phone4.setImage("https://img11.360buyimg.com/n7/jfs/t4930/86/192598423/ 86027/36a57ccf/58dcbfa5N5c41cbfd.jpg");                Phone  phone5=new  Phone();                                phone5.setName("小米MIX");                                phone5.setId(006);                                phone5.setPrice("3999");                                phone5.setImage("https://img13.360buyimg.com/n7/jfs/t4264/215/455518113 /309855/38fe41f1/58b4fc81N1d924112.jpg");                List  list=new  ArrayList<>();                                list.add(phone);                                list.add(phone1);                                list.add(phone2);                                list.add(phone3);                                list.add(phone4);                                list.add(phone5);                request.setAttribute("list",list);                request.getRequestDispatcher("/phone_list.jsp").forward(request,respons e);        } }



Phone.java



public  class  Phone  {               private  int  id;               private    String  name;               private  String  image;               private  String  price;        //Art+Ins快捷键加入get,set方法        public  int  getId()  {                return  id;      }        public  void  setId(int  id)  {                this.id  =  id;        }        public  String  getName()  {                return  name;        }        public  void  setName(String  name)  {                this.name  =  name;        }        public  String  getImage()  {                return  image;        }        public  void  setImage(String  image)  {                this.image  =  image;        }        public  String  getPrice()  {                return  price;        }        public  void  setPrice(String  price)  {                this.price  =  price;        } }


phone_list.jsp


<%--
  Created by IntelliJ IDEA.
  User: invinjun
  Date: 2017/6/16
  Time: 16:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>商品列表</title>
    <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" />
    <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
    <script src="js/bootstrap.min.js" type="text/javascript"></script>
    <!-- 引入自定义css文件 style.css -->
</head>
<body>
<c:forEach items="${list}" var="phone">
    <div class="col-md-2" style="height:250px">
        <img src="${phone.image}" width="170" height="170" style="display: inline-block;">
        </a>
        <p>
            <a href="product_info.html" style='color: green'>${phone.name}</a>
        </p>
        <p>
            <font color="#FF0000">商城价:&yen;${phone.price}</font>
        </p>
    </div>
</c:forEach>
</body>
</html>


效果图:


image.png



相关文章
|
2月前
|
Java 开发者 UED
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
41 3
|
2月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
21天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
176 37
|
21天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
5天前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
22 2
|
10天前
|
XML JavaScript Java
NekoHTML 是一个基于Java的HTML扫描器和标签补全器
**NekoHTML** 是一个基于Java的HTML扫描器和标签补全器(tag balancer),由J. Andrew Clark开发。它主要用于解析HTML文档,并能够“修正”许多在编写HTML文档过程中常犯的错误,如增补缺失的父元素、自动用结束标签关闭相应的元素,以及处理不匹配的内嵌元素标签等。这使得程序能够以标准的XML接口来访问HTML文档中的信息。 ### NekoHTML的主要特点包括: 1. **错误修正**:能够自动修正HTML中的常见错误,如未闭合的标签等。 2. **DOM树生成**:将HTML源代码转化为DOM(Document Object Model)结构,便
|
22天前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
1月前
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
|
2月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
25 2
|
2月前
|
安全 Java API
精通 Java 后台开发:案例分析与实践
精通 Java 后台开发:案例分析与实践
37 2
下一篇
无影云桌面