如何通过EL,JSTL,JSP脚本元素在jsp页面显示

在日常开发中,jsp作为java服务器页面,其根本是一个简化的Servlet设计.每个人访问同一个jsp但是显示的确实不同的内容.这是动态网页的好处.下面我们就说一说如何显示这些后端数据.
如果
有什么方式可以将后端数据显示出来呢,主要有EL ,JSTL ,JSP脚本元素.

JSP脚本元素:

1)JSP表达式

表达式: 是对数据的表示,系统将其作为一个值进行计算。
语法:<%= expression %>
例如:<%= user.getName()%>

<input value=<%=1+6 %> />

表达式的本质:在将JSP页面转换成Servlet后,使用out.print()将表达式的值输出。这样如果user.getName()的返回值是”Tom”, 那么实际上在servlet中就将转换成out.print(“Tom”);
因此这里要注意以下两点:
1) 如果表达式是调用一个方法,那么这个方法必须要有返回值,而不应是void,也就是说void getName()这样的方法是不能被调用的。
2) 在方法的后面不能有分号;例如<%=getName();%>这是不允许的。

2)JSP脚本—-书写java代码段

脚本:就是在<% %>里嵌入Java代码,这里的Java代码和我们一般的Java代码没有什么区别,所以每一条语句同样要以”;”结束,这和表达式是不相同的

<% 
for(int i=0;i<10;i++){
%>

<option value=<%=1+i %>>

<%
}
%>

脚本的本质:就是将代码插入到Servlet的service方法中。

3)JSP声明–书写方法

语法:<%! code %>
例如:<%! String getName() {return name;} %>
实例代码:

<%!  
 int number=0;  
 synchronized void countPeople()  {  
      number++;  
 }  
 %>  
 <%  
 countPeople();  
 %>  
<p>您是第  
           <%=number%>  
           个访问本站的客户。  
<p>


声明的本质:其实就是将声明的变量加入到Servlet类(在任何方法之外),方法就成了Servlet的方法。

4)当然还有一个是指令元素
指令元素:<%@ … %> 一般做引入用


关于JSTL和EL:
两者关系?
JSTL在赋值时会大量用到EL表达式。可以简单理解成,EL只是JSTL中的一部分。
作用:
简化jsp页的书写;削弱jsp中调用servlet的Java代码,便于分层控制。只要是jsp能够完成的功能使用JSTL和EL表达式都可以完成。包括从和Servlet的数据交互、操作XML、格式化数据显示以及样式显示(控制表格的偶数行使用不同的颜色显示等)、Request中读取数据、控制循环(数组、Map等)、支持函数处理(trim、substring、join等)、还可以自定义函数等、操作数据库(违背分层原则,一般不这么使用)。

EL

Expression Language( 表达式语言)
EL表达式是就是我们日常开发常用的${}
当然,他可以从9个隐藏对象中取值,但是作为基础程序员面试必备题,虽然我很少用到,你们自己百度吧…..

1)后端java查询出我们需要的数据通过modelandview返回(类似key-value)

modelAndView.addObject("schoollist", schoollist);
return modelAndView;

通过c标签的循环标签把学校遍历展现在页面上(需要引入c标签)

<c:foreach var="item" items="${schoollist}">
<option value="${item.id}">${item.name}


**1.2)一般简单的情况下我们返回一个对象,或者一个实体类,就能通过get他们的属性然后显示,但是我们业务不可能一直这么简单.有时候我们需要多个对象值得属性遍历在页面上,那么返回实体的方法肯定是行不通的. 所以我们需要返回一个List

//简单案例 我们通过从两个对象中取值返回
List<Map<String,Object>> chargesinfolist=new ArrayList<Map<String, Object>>();
List<Charges> chargeslist=chargesService.queryList(pageBean,conditionmap);
for(Charges c:chargeslist){
    Map<String, Object> chargesinfo = new HashMap<String, Object>();
    chargesinfo.put("id", charges.getId());
    chargesinfo.put("adddate", charges.getAdddate());
    chargesinfo.put("name", charges.getName());
    Order order=orderService.getOrderBychargesid(charges.getId());
    chargesinfo.put("orderstatus",order.getstatus());
    chargesinfo.put("orderdata",order.getadddate());
    chargesinfolist.add(chargesinfo);
}
modelAndView.addObject("chargesinfolist", chargesinfolist);
return modelAndView;

前台jsp:

<c:foreach var="item" items="${chargesinfolist}">
    <tr>
        <td>${item.id}</td>
        //<td>${item.adddate}</td>//直接显示时间会导致多一位(因为他的标准时间是7位的)
        <td><fmt:formatDate value="${item.adddate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>//需要引入fmt标签
        <td>${item.name}</td>
        <td>${item.orderstatus}</td>
        <td>${item.orderdata}</td>

    </tr>
</c:forEach>    


2)通过页面引入对象的类,然后通过c:set标签生成的对象

<%@page import="com.ccb.entity.Charges"%>
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
.....................
<c:set var="status" value=<%=Charges.status %>>
<c:if test="${item.status==status}">//看这里
    <input type="button" onclick="fire()" />
</c:if>

JSTL:

(JSP Standard Tag Library,JSP标准标签库)

关于JSTL,不做过多的说明,jsp界面中的java代码,使用JSTL都可以替代,而且更加简洁,负责前台的人甚至可以不需要熟悉java代码。如果要使用JSTL,而不仅仅是EL,需要引入jstl.jar和standard.jar两个包.

其实这个最好解释,我就不写实例代码了 ,上面你应该也看到不少了.JSTL在javaweb项目中是不可或缺的东西.极大地提高了开发效率
除了上面我们使用的”c:foreach, c:set, c:if, fmt “这种常用的
还有一个非常重要那就是c:choose;

<c:choose>

<c:when test="${item.status==status}">
    <input   />启用
</c:when>
                                                                                                <c:otherwise>
    <input   />禁用                                                                                           </c:otherwise>

</c:choose>

JSTL 里是没有if else标签的 所以如果有分支,就用这个.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值