day16-EL&JSTL
来源:互联网 发布:知著投资 编辑:程序博客网 时间:2024/06/07 17:14
EL表达式
JSTL
EL表达式:
什么是EL:简化JSP的写法.减少<% %> .
使用EL表达式:
* 语法:${ EL表达式 }
EL的功能:
* 获取数据:(是放在JSP的四个域中的)
* 执行运算:
* 操作WEB开发的常用的对象:
* 调用Java中方法:--很少用.
【EL获取数据】
<% //pageContext.setAttribute("name", "pValue"); %>
<%=pageContext.getAttribute("name")%><!-- 如果没找到返回null -->
${ pageScope.name } <!-- 返回的是"" -->不显示在页面上
${ name } <!-- 类似findAttribute("name")先从page域中查找,没找到去request域中查询,没有找到去session域中找,没有找到就去application域中找 -->
${ arrs[0] } 获取数组的数据
${ list[0] } 获取List集合的数据
${ map.aaa } 获取Map集合的数据
${ user.id } 获取对象的数据(前提是类中有setget方法)
User user1 = newUser(1,"aaa","123");
List<User> userList = newArrayList<User>();
userList.add(user1);
获取对象的集合的数据
${ userList[0].id } -${ userList[0].username } - ${ userList[0].password }
*****点 .和[]的区别.
* []用于有下标的数据(数组,list集合) .用于有属性的数据(map,对象)
* 如果属性名中包含有特殊的字符.必须使用[]
点出来的都是有get方法的
map.put("ddd.eee","李凤");
${ map[“ddd.eee”]}
又例如头数据的获取 , 常含特殊符号
对象中嵌套对象的情形:
User类中的成员变量中嵌套UserDtail类的对象,UserDtail中有age成员:
网页中的jsp可以写为: ${ user.ud.age }
【EL执行运算】
<%
pageContext.setAttribute("n1","10");
pageContext.setAttribute("n2","20");
pageContext.setAttribute("n3","30");
pageContext.setAttribute("n4","40");
%>
<h3>EL执行算数运算</h3>
${ n1 + n2 + n3 }
<h3>EL执行逻辑运算</h3>唯一有用的
${ n1 < n2 } -${ n1 ltn2 } <!-- less than--><br/>
${ n1 > n2 } - ${ n1 gt n2 } <!-- great than --><br/>
${ n1 <= n2 } - ${ n1 le n2 } <!-- less equal --><br/>
${ n1 >= n2 } - ${ n1 ge n2 } <!-- great equal --><br/>
${ n1 == n2 } - ${ n1 eq n2 } <!-- equal --><br/>
<h3>EL执行关系运算</h3>
${ n1<n2 && n3 < n4 } - ${ n1<n2 andn3 < n4 }<br/>
${ n1<n2 || n3 < n4 } - ${ n1<n2 orn3 < n4 }<br/>
${ !(n1 < n2) } - ${ not(n1<n2) }
<h3>EL执行三元运算</h3>
${ n1 < n2 ? "正确":"错误" }
<h3>empty运算</h3>
${ user == null } - ${ empty user }
${ user != null } - ${ not empty user }
【EL操作WEB开发的常用对象11个】
<!--
pageScope,requestScope,sessionScope,applicationScope-获取JSP中域中的数据
param ,paramValues -接收参数.
header,headerValues - 获取请求头信息
initParam - 获取全局初始化参数
cookie - WEB开发中cookie
pageContext - WEB开发中的pageContext.
-->
<h3>接收请求的参数.还有数组参数</h3>
<!-- 传统方式 -->
<%=request.getParameter("id")%>
<%=request.getParameter("name")%>
<%=Arrays.toString(request.getParameterValues("hobby"))%>
<hr/><!-- EL方式 -->
${ param.id }
${ param.name }
${ paramValues.hobby[0] }
${ paramValues.hobby[1] }
<h3>获取请求头</h3>
<%=request.getHeader("User-Agent")%>
<hr/>
${ header["User-Agent"] }
<h3>获取全局初始化参数</h3>
${ initParam.username }
<h3>获取Cookie中的值</h3> 用于记住用户名
${cookie.history.value }
<h3>获取PageContext中的对象</h3>
IP地址:${ pageContext.request.remoteAddr }显示请求端的IP,也就是自己的IP
工程路径:${ pageContext.request.contextPath }用于替换src中的工程名,但是直接写在src中的话会请求服务器很多次,所以用来定义成局部变量,
例如:
<%
String root =request.getContextPath();
%>
使用的方法 href= "<%=root %>/pages/reset.css"
JSTL
网页表单绕过前台校验的办法:网页保存到本地,打开本地源码把里面的校验js代码删除掉,保存,然后点开网页就可以绕过前台校验了..所以一般都需要设置前后台的校验才能安全.
什么是JSTL:是jsp的标签库.
为什么学习JSTL:
* JSTL和EL结合 替换页面中<%%>
JSTL版本:
* JSTL1.0 :不支持EL表达式.
* JSTL1.1 和 1.2 :支持EL表达式.
JSTL的标签库:包含了五类标签.
* core(核心标签), fn(JSTL提供EL函数库),fmt(国际化标签),xml(XML标签),sql(SQL标签),
使用JSTL:
* 引入JSTL的相关的jar包(2个).
standard.jar . jstl.jar
* 在页面中引入标签库.<%@ taglib uri=”” prefix=””%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
【JSTL的核心标签的用法】
* if
* forEach
<h1>JSTL的核心标签库:if标签</h1>
<c:setvar="n1"value="10"scope="page"></c:set>
<c:setvar="n2"value="20"scope="page"></c:set>
<c:iftest="${ n1 < n2 }"var="flag"scope="page">
n1 小于 n2
</c:if>
<c:iftest="${ n1 >= n2 }">
n1 大于等于 n2
</c:if>
<c:iftest="${ flag }">
n1 小于 n2
</c:if>
JSTL与El混搭(用于用户登录):
<c:if test="${user.name !='' }">
欢迎您${user.name }
</c:if>
<c:iftest="${user.name =='' }">
<ahref="">登录</a>
</c:if>
<h1>JSTL的常用的标签一</h1>
<c:setvar="i"value="张三"scope="page"></c:set>
${ i }
<c:setvar="city"value="上海"scope="page"></c:set>
<c:outvalue="${ city }"default="北京"></c:out> city没有值的时候输出北京
<c:out value="<h1>标题一</h1>"escapeXml="false"></c:out> 将<>当成标签,设置不转义
<h1>JSTL常用标签:forEach</h1>
<h3>遍历数组</h3>
<%
String[] arrs = {"李旭华","李冠希","董阳阳"};
pageContext.setAttribute("arrs", arrs);
%>
<c:forEachvar="i"items="${ arrs }"> items是要遍历的东西
${ i }
</c:forEach>
<h3>遍历List集合</h3>
<%
List list = newArrayList();
list.add("李旭华");
list.add("李冠希");
list.add("董阳阳");
pageContext.setAttribute("list", list);
%>
<c:forEachvar="i"items="${ list }">
${ i }
</c:forEach>
<h3>遍历Map集合</h3>
<%
Map<String,String> map =new HashMap<String,String>();
map.put("aaa","李旭华");
map.put("bbb","李冠希");
map.put("ccc","董阳阳");
pageContext.setAttribute("map", map);
%>
<c:forEachvar="entry"items="${ map }">
${ entry.key }-${ entry.value}
</c:forEach>
<h3>遍历从1到10</h3>
<c:forEachvar="i"begin="1" end="10" step="2"> 每次加2
${ i }
</c:forEach>
<h3>遍历从100到300</h3>
<c:forEachvar="i"begin="100"end="300"step="5" varStatus="status">
<c:iftest="${ status.count % 3 == 0 }"> 到第三个数的时候 ,count十个数,index是索引
<fontcolor="red">${ i }</font> 把字变红
</c:if>
<c:iftest="${ status.count % 3 != 0 }">
${ i }
</c:if>
</c:forEach>
【JSTL的提供EL的函数库】
<h1>JSTL提供的EL的函数库</h1>
${ fn:contains("Hello World","Hello")}
${ fn:length("HelloWorld") }
${ fn:toLowerCase("ABCDE") }
<c:forEach var="i" items='${fn:split("a-b-c-d","-") }'>
${i }
</c:forEach>
实现商品列表显示功能:
<body>
<h1>商品列表页面</h1>
<tableborder="1"width="100%">
<tr>
<td>商品编号</td>
<td>商品名称</td>
<td>商品价格</td>
<td>是否热门</td>
<td>商品描述</td>
</tr>
<c:forEachvar="p"items="${list }">
<tr>
<td>${ p.pid }</td>
<td>${ p.pname }</td>
<td>${ p.shop_price }</td>
<td>
<c:iftest="${ p.is_hot == 1 }">
是
</c:if>
<c:iftest="${ p.is_hot != 1 }">
否
</c:if>
</td>
<td>${ p.pdesc }</td>
</tr>
</c:forEach>
</table>
</body>
public class ProductDao {
publicList<Product> findAll()throws SQLException {
QueryRunnerqueryRunner =newQueryRunner(JDBCUtils.getDataSource());
Stringsql ="select *from product order by pdate desc";
List<Product>list =queryRunner.query(sql,newBeanListHandler<Product>(Product.class));
returnlist;
}
使用MVC设计模式完成转账的案例:
设计一个页面,输入三个值,一个是付款人,一个是收款人,一个是转账的金额.不能出现付款人的钱被扣除而收款人没有收到钱的情况发生.而且要使用MVC的设计模式.
对设计模式的理解:遇到非技术问题造成的维护不便或者实现过程复杂的时候,对整个代码的实现过程进行思考,到生活实际中的可能相似的事务流程中去寻找模式.内省:底层是基于反射的,但是只是拿到JavaBean的set和get方法.
前5天实用知识点总结
后台的servlet代码:
package review;import java.io.IOException;import java.net.URLDecoder;import java.net.URLEncoder;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class TestA */public class TestA extends HttpServlet {private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub//综合回顾//前后台交互 //1、前台向后台传递//request.getParameter(""); 获得前台传递的值扩展前台向后台的数据注入,比如在servlet类中定义一个private TestModel tm;并且生成set方法, 那么如果前台如果传过来的是name为TestModel.name的属性的话,那么这个传递过来的数据就会自动封装到tm中.//2、后台向前台传递//单个字符request.setAttribute("msg", "el表达式获得单个字符");//存model对象TestModel tm=new TestModel();tm.setId(1);tm.setName("java5");request.setAttribute("tm", tm);//数组List<TestModel> tms=new ArrayList<TestModel>();tms.add(tm);tms.add(tm);request.setAttribute("tms", tms);//sessionrequest.getSession().setMaxInactiveInterval(60);request.getSession().setAttribute("session1", "这是session对象");//cookieCookie cookie=new Cookie("cookie1", URLEncoder.encode("这是cookie对象","utf-8"));//cookie.setPath(uri);//cookie.setMaxAge(60);response.addCookie(cookie);//3、跳转//response.sendRedirect("/review/index.jsp");request.getRequestDispatcher("/index.jsp").forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub}}
前台的jsp页面:
<%@page import="java.net.URLDecoder"%><%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><span style=" font: 20px; color: red">EL表达式 获得单个字符的用法</span><br>${msg }<br><span style=" font: 20px; color: red">EL表达式 获得对象的用法</span><br>${tm.id}<br>${tm.name}<br><span style=" font: 20px; color: red">EL表达式 获得数组的用法</span><br><c:forEach var="tm" items="${tms }">${tm.id}-----${tm.name}</c:forEach><span style=" font: 20px; color: red">EL表达式 获得session的用法</span><br>${session1}<br><span style=" font: 20px; color: red">EL表达式 获得cookie的用法</span><br><%String info="";Cookie[] cookies=request.getCookies();for (Cookie cookie : cookies) {if("cookie1".equals(cookie.getName())){info=cookie.getValue();}}info=URLDecoder.decode(info, "utf-8");request.setAttribute("info", info);%><%=info %><br>${info }<span style=" font: 20px; color: red">jstl if的用法</span><br><c:if test="${tm.name== 'java5'}">hello ${tm.name}</c:if></body></html>
- day16-EL&JSTL
- jstl+el
- el+JSTL
- el,jstl
- EL&JSTL
- el+jstl
- EL、JSTL
- jstl el <%%>
- EL JSTL
- jstl el
- El、JSTL
- el jstl
- EL&JSTL
- EL,JSTL
- EL,JSTL
- EL、JSTL
- EL+JSTL
- el&jstl
- Oracle 存储过程练习小样例
- 基因组测序中N50和N90到底指什么?
- 判断浏览器
- LeetCode 515. Find Largest Value in Each Tree Row
- Cassandra 之 入门
- day16-EL&JSTL
- 引用与指针之间的故事
- Collection 线程安全
- 扎心了,老铁!mysql编码问题引发的血案
- Linux环境变量与文件查找
- 银行系统代码
- 哲学家就餐问题
- C#进阶 15 常量,枚举的声明,结构的声明
- 对于python和wamp中mysql数据库的交互