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

Posted cyxy31521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

 

 
 
 
 

以上是关于jsp和el表达式,以及JSTL标签库的主要内容,如果未能解决你的问题,请参考以下文章

JSP常用标签——JSTL标签和EL表达式

EL(表达式语言)与JSTL(JSP标准标签库)

javaweb part6---jstl以及el表达式

Ognl 和 EL 和jstl区别

JavaEE实战——jsp入门El表达式JSTL标签库

JavaEE实战——jsp入门El表达式JSTL标签库