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
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
65 3
|
1月前
|
Java BI API
Java Excel报表生成:JXLS库的高效应用
在Java应用开发中,经常需要将数据导出到Excel文件中,以便于数据的分析和共享。JXLS库是一个强大的工具,它基于Apache POI,提供了一种简单而高效的方式来生成Excel报表。本文将详细介绍JXLS库的使用方法和技巧,帮助你快速掌握Java中的Excel导出功能。
69 6
|
1月前
|
Java API Apache
|
1月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
71 3
|
1月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
63 2
|
1月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
37 2
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
80 4
|
2月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
57 15
|
2月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
24 1
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
159 0
在Java中处理JSON数据:Jackson与Gson库比较
下一篇
DataWorks