jsp和el表达式,以及JSTL标签库

1,jsp

1,概念

2,jsp的三种方式

out.write(65);字符 字符串 字符数组

1) <%

中间写java代码

out.println("任何类型");

out.write(65);

response.getWriter().println();

response.getWriter().write();

%>

2)定义成员变量

<%!

int num = 10

public void test(){}

%>

3)表达式定义方式,输出字符串:直接在页面输出内容,在service方法中起作用,等价于response.getWriter().println()

<%="你好世界"%>

response 不带缓存,输出时候首先输出

out 带缓存的语句,输出时候先在缓存区,刷新后才可以输出,不要两种混用,会出现bug,优先使用out.println

<%

out.println()

response.getWriter().write();

%>

4)需要换行的话

在jsp代码中拼接<br>

response.getWriter().println("println" + "<br>");

2、EL表达式

1, EL全称: Expression Language

作用:代替jsp中脚本表达式的功能,简化对java代码的操作,从【域对象】中取值。 EL表达式简化<%= %>方式取值

EL语法表达式的格式:${表达式内容}

2,jsp的四大域对象

page域,request域,session域,application域

page域 pageScope page域指的是当前jsp页面,其中存储的数据只在当页面有效

request域 requestScope 一次请求或者请求链中request域

session域 sessionScope 一次会话过程中,session域

application applicationScope 服务器启动后整个项目对应的ServletContext域

3,域对象保存值,与取出值的代码

<%--
分别往request域,session域,servletContext域和pageContext中存值
--%>
<%
request.setAttribute("requestName","requestScope中的值");
request.getSession().setAttribute("sessionName","sessionScope中的值");
request.getServletContext().setAttribute("servletContextName", "servletContext中的值");
pageContext.setAttribute("pageName","page域中的值");
%>
<%--
使用EL表达式从上述3个域中取值
--%>
从request域中取值:${requestScope.requestName}<br>
从session域中取值:${sessionScope.sessionName}<br>
从servletContext域中取值:${applicationScope.servletContextName}<br>
从page域中取值:${pageScope.pageName}

EL最主要的作用是获得四大域中的数据,格式${EL表达式}

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

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

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

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

4,域对象访问顺序

从小到大的顺序

page request session application

---同样是依次从pageContext域,request域,session域,application域中 获取属性,在某个域中获取后将不在向后寻找

5,通过EL表达式,获取Cookie的name和值

${cookie.JSESSIONID} <%--根据cookie的名字获取cookie对象 --%>
${cookie.JSESSIONID.name} <%--获得cookie的名称,对应方法getName()--%>
${cookie.JSESSIONID.value} <%--获得cookie的值,对应方法getValue() --%>

从cookie中获取cookie对象:${cookie.JSESSIONID}<br>

从cookie中获取name值:${cookie.JSESSIONID.name}<br>

从cookie中获取value值:${cookie.JSESSIONID.value}<br>

6,EL的运算符

1)算数运算符

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
pageContext.setAttribute("n1", "10");
pageContext.setAttribute("n2", "20");
%>

加法运算:${n1+n2}<br>
减法运算:${n1-n2}<br>
乘法运算:${n1*n2}<br>
除法运算:${n1/n2}或${n1 div n2}<br>
取余运算:${n1%n2}或${n1 mod n2}<br>
</body>
</html>

2)关系运算符

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
pageContext.setAttribute("n1", "10");
pageContext.setAttribute("n2", "20");
%>

==:${n1 == n2}或 ${n1 eq n2}<br>
!=:${n1 != n2}或 ${n1 ne n2}<br>
>:${n1 > n2}或 ${n1 gt n2}<br>
>=:${n1 >= n2}或 ${n1 ge n2}<br>
<:${n1 < n2}或 ${n1 lt n2}<br>
<= :${n1 <= n2}或 ${n1 le n2}<br>
</body>
</html>

3)逻辑运算符

${true && false}
${true || false}
${!false}

4)三元运算符

${n1 >0 ?"正数":"负数"}

5)empty运算符

empyt运算符对以下数据运算返回true:

1,字符串:"";

2,空集合(size=0):List list = new ArrayList();

3,空对象(null):Student stu = null;

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.heima.domain.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
String str = "";
List list = new ArrayList();
Student student = null;

request.setAttribute("str", str);
request.setAttribute("list", list);
request.setAttribute("student",student);
%>

空字符串:${empty str}<br>
集合size=0:${empty list}<br>
空对象null:${empty student}<br>
</body>
</html>

3,JSTL标签库

1,介绍

用于解决常用问题的自定义标签库,这套标签库被SUN公司定义为标准标签库(The JavaServer Pages Standard Tag Library),简称JSTL。

2,使用步骤

1)安装导包

javax.servlet.jsp.jstl.jar

jstl-impl.jar

2)将标签库资源引入JSP页面

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3)在jsp页面中使用jstl标签

<c:out value="hello world"></c:out>

3,常见标签

1)c:if标签

作用相当于java中的if判断语句

属性:test: if的判断条件

<body>
<h1>首页 -- JSP页面</h1>

<%--
判断session中的loginUser是否为空:
1.如果不为空,获取session中的信息,并将用户名显示在页面上;
2.如果为空,则提示用户登录;
--%>

<c:if test="${not empty loginUser}">
<h3>欢迎您!${loginUser.userName}</h3>
</c:if>
<c:if test="${empty loginUser}">
<h3>对不起,请先<a href="login.html">登录</a></h3>
</c:if>
</body>

2)c:foreach标签的使用

<c:foreach>标签的作用相当于java中的for循环。主要是对数据和集合进行遍历。

属性:

var:在不循环对象的时候,保存的是控制循环的变量;在循环对象的时候,保存的是被循环对象中的元素

items:指定要循环的对象

varStatus:保存了当前循环过程中的信息(循环的开始、结束、步长、次数等)

begin:设置循环的开始

end:设置循环的结束

step:设置步长——间隔几次循环,执行一次循环体中的内容

使用案例一:数组遍历

<%--
需求一:遍历普通数组
--%>
<%
String[] strArr = new String[5];
strArr[0] = "hello";
strArr[1] = "world";
strArr[2] = "你好";
strArr[3] = "世界";
strArr[4] = "世界你好";
request.setAttribute("strArr",strArr);
%>

<c:forEach items="${strArr}" var="str">
${str} <br>
</c:forEach>

使用案例二:遍历Student的list

<%--
需求二:遍历Student的list集合
--%>

<%
List<Student> stuList = new ArrayList<>();
Student stu1 = new Student(1, "张三1", "123");
Student stu2 = new Student(2, "张三2", "123");
Student stu3 = new Student(3, "张三3", "123");
stuList.add(stu1);
stuList.add(stu2);
stuList.add(stu3);
request.setAttribute("stus",stuList);
%>

<c:forEach items="${stus}" var="stu">
${stu.name} <br>
</c:forEach>

案例三,遍历map集合

<%
Map<String, String> map = new HashMap<>();
map.put("张三", "123");
map.put("李四", "123");
map.put("王五", "123");
request.setAttribute("maps",map);
%>

<c:forEach items="${maps}" var="stuMap">
${stuMap.key} = ${stuMap.value}<br>
</c:forEach>

3)choose标签的使用

<c:choose >用于指定多个条件选择的组合边界,它必须与c:when和c:otherwise标签一起使用。

介绍 c:when,相当于else if(){}。

c:when标签含有test属性,作用与if相同 c:otherwise,相当于else{}。

案例代码

<%
request.setAttribute("num", 4);
request.setAttribute("flag", 1);
%>
<!‐‐ c:choose 表示那些when 和 otherwise是一组的 ‐‐>
<c:choose>
<c:when test="${num == 1 }">星期一</c:when>
<c:when test="${num == 2 }">星期二</c:when>
<c:when test="${num == 3 }">星期三</c:when>
<c:when test="${num == 4 }">星期四</c:when>
<c:when test="${num == 5 }">星期五</c:when>
<c:when test="${num == 6 }">星期六</c:when>
<c:when test="${num == 7 }">星期日</c:when>
<c:otherwise>参数不合法</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${flag == 1 }">白天</c:when>
<c:when test="${flag == 2 }">黑夜</c:when>
<c:otherwise>参数不合法</c:otherwise>
</c:choose>

标签结合的实际应用案例

删除案例:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserService userService = new UserServiceImpl();
List<User> userList = userService.queryAll();

request.setAttribute("userList",userList);

request.getRequestDispatcher("/list.jsp").forward(request,response);

}

<script>
function deleteUser(id){
var flag = window.confirm("确定删除");
if(flag){
location.href = "deleteUserServlet?id=" + id;
}
}
</script>
<script>
function queryUserUp(id){
location.href = "queryUserById?id=" + id;
}
</script>

<c:forEach items="${userList}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.sex}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td><a class="btn btn-default btn-sm" href="javascript:void(0);" onclick="queryUserUp(${user.id})">修改</a>&nbsp;
<a class="btn btn-default btn-sm" href="javascript:void(0);" onclick="deleteUser(${user.id})">删除</a></td>
</tr>
</c:forEach>

注册案例:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
Map<String, String[]> properties = request.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user,properties);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}

UserService service = new UserServiceImpl();
boolean result = service.queryUserByName(user);

if(result){
response.sendRedirect("/tiaozhuan.html");
}else{
request.setAttribute("msg","重名了,注册失败");
request.getRequestDispatcher("add.jsp").forward(request,response);
}
}

注册失败后,在网页上显示错误信息,为空则不显示

<div><%=request.getAttribute("msg")==null?"":request.getAttribute("msg")%></div>

原文地址:https://www.cnblogs.com/cyxy31521/p/9417010.html

时间: 2024-10-01 01:22:12

jsp和el表达式,以及JSTL标签库的相关文章

Java实战之04JavaWeb-04JSP、EL表达式、JSTL标签库

一.jsp部分 只要是与页面显示相关的都是重点 1.jsp的脚本 <%java代码%>:被翻译到service方法内部,局部变量,局部的功能 <%=表达式或变量%>:翻译成service方法中out.write(表达式或变量) <%!java代码%>:被翻译成servlet的全局的内容,方法,全局变量 2.jsp的运行原理 jsp在运行时翻译成servlet index.jsp------>work/index_jsp.java----->work/inde

JavaWeb基础—EL表达式与JSTL标签库

EL表达式: EL 全名为Expression Language.EL主要作用 获取数据(访问对象,访问数据,遍历集合等) 执行运算 获取JavaWeb常用对象 调用Java方法(EL函数库) 给出一个小案例: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="com.jiangbei.domain

Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用

<转载> 我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用   Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求.Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供

EL表达式和JSTL标签库使用详解

JavaBean在JSP中的局限 获取JavaBean属性必须要实例化 强制类型转化 <% Employee employee = (Employee)request.getAttribute("employee"); Computer comp = employee.getComputer(); String manufacturer = comp.getManufacturer(); %> 如果页面编写出现逻辑错误,将会导致代码执行错误,并且JSP页面编译页面时也会产生

JAVA Web基础 EL表达式与JSTL标签库

一.EL表达式语言1.EL表达式全称expression language,用于在JSP页面获取其内置对象的内容语法:${...}在jsp中page指令有一个属性是isELIgnored, 用来标记此页面是否忽略EL表达式, 默认为false,即不忽略2.用法说明常规写法举例:<%= request.getAttribute("test")>EL表达式写法:${test}//当作用域属性名都是唯一时可以这么写            ${requestScope.test}/

EL表达式 与 JSTL标签库

EL表达式 什么是el jsp内置的表达式语言 el表达式的作用 代替脚本 el如何获取数据 1.获取域中的数据 简单数据:${域中的key值} 注意:如果多个域中的key值一样 那么取出的顺序? 从范围小的开始查找,查找到以后就返回 如果没有查询到对应的key 返回""(空字符串) 例如: <% pageContext.setAttribute("num", 5); request.setAttribute("num", 1); sess

EL表达式和JSTL标签库

1 EL表达式 1.1 EL的概述 EL,全名为Expression Language. 主要作用: ①EL表达式主要用于替换jsp页面中的脚本表达式,以便于从各种类型的web域中检索java对象(某个web域中的对象),获取数据(访问javabean的属性.访问List集合.访问Map集合.访问数组). ②执行运算. ③利用EL表达式可以在jsp页面中执行一些基本的关系运算.逻辑运算和算数运算,以便于在jsp页面完成一些简单的逻辑运算. ④获取web开发常用的对象. ⑤EL表达式定义了一些隐式

在EL表达式或者Struts标签库中格式化日期对象,即将Date转换为yyyy-MM-dd格式

一.EL表达式 首先,在jsp页面引入<fmt> tags,<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>. 其次,将EL表达式作为fmt标签属性的value值.再增加pattern参数,为日期制定需要格式化的格式,如yyyy-MM-dd.例如: <fmt:formatDate value="${object.dateproperty}&quo

JavaWeb(七)Cookie,EL表达式,标准标签库

Cookie Cookie概述 Cookie译为小型文本文件或小甜饼,Web应用程序利用Cookie在客户端缓存服务器端文件.Cookie是以键值对形式存储在客户端主机硬盘中,由服务器端发送给客户端,客户端再下一次访问服务器端时,服务器端可以获取到客户端Cookie缓存文件. Cookie是由服务器端创建的,然后由服务器端发送给客户端,客户端以键值对形式存储Cookie,并标注Cookie的来源.客户端再次访问服务器端时,存储的Cookie会保存在请求协议中,服务器端可以获取上次存储的缓存文件内

EL表达式、 jstl标签

EL表达式(Expression Language) 目的:为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化. 1.语法结构 ${expression} 2.[ ]与.运算符 EL 提供"."和"[ ]"两种运算符来存取数据. 当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用"[ ]".例如