1: EL表达式
1):作用
向页面输出显示内容,可以用来替代我们的JSP表达式
2):JSP页面注意
在JSP页面中我们不建议写java代码或者是不写java代码,因为jsp作为一个页面来说,在里边写java代码会显得代码很乱,
所以建议尽量使用JSP标签和表达式(EL)
3): 语法: ${内容 }
4): EL中的隐藏对象
名称 作用
pageScope 获取pageContext域范围里的属性
requestScope 获取request域范围里的属性
sessionScope 获取session范围里的属性
applicationScope 获取ServletContext域里范围里的属性
param 相当于ServletRequest.getParameter(String name)
paramValues 相当于ServletRequest.getParameterValues(String name)
header 相当于ServletRequest.getHeader(String name)
headerValues 相当于ServletRequest.getHeaders(String name)
cookie 相当于ServletRequest.getCookies()
initParam 相当于ServletContext.getInitParameter(String name)
PageContext 表示JSP的PageContext
<%@page import="java.util.*"%>
<%@page import="com.tz.servlet.bean.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
request.setCharacterEncoding("utf-8");
%>
<!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>
<%
pageContext.setAttribute("aaa", "123");
%>
<%=pageContext.getAttribute("aaa") %>
${pageScope.aaa }
<hr>
<%-- EL表达式获取域对象中的数据 --%>
<%
pageContext.setAttribute("name", "青小蛙");
request.setAttribute("name", "小红");
session.setAttribute("name", "小明");
application.setAttribute("name", "小花");
%>
${pageScope.name }<br>
${requestScope.name }<br>
${sessionScope.name }<br>
${applicationScope.name }<br>
<hr>
<%-- EL表达式自动查找(如果没有指定域对象,则就会到四域对象里依次的查找指定属性) 相当于findAttribute()--%>
${name }
<hr>
<%-- EL表达 式获取对象的属性 --%>
<%
User user = new User("小梅","123");
pageContext.setAttribute("user", user);
%>
${pageScope.user }-- ${pageScope.user.userName }: ${pageScope.user.password }
<hr>
<%-- EL获取数组里的数据 --%>
<%
User user1 = new User("小红","123");
User user2 = new User("小花","456");
User user3 = new User("小梅","789");
User user4 = new User("小芳","123456");
User[] users = new User[]{user1, user2, user3, user4};
pageContext.setAttribute("userArray", users);
%>
${pageScope.userArray[0] }-- ${pageScope.userArray[0].password } <br>
${pageScope.userArray[1] }<br>
${pageScope.userArray[2] }<br>
${pageScope.userArray[3] }<br>
<hr>
<%-- EL表达式 获取 List 集合里的数据 --%>
<%
List<User> userList = new ArrayList<User>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
pageContext.setAttribute("userList", userList);
%>
${pageScope.userList[0] }<br>
${pageScope.userList[1] }<br>
${pageScope.userList[2] }<br>
${pageScope.userList[3] }<br>
<hr>
<%-- EL表达式获取Map里的数据 --%>
<%
Map<String, User> userMap = new HashMap<String, User>();
userMap.put("user1", user1);
userMap.put("user2", user2);
userMap.put("user3", user3);
userMap.put("user4", user4);
pageContext.setAttribute("userMap", userMap);
%>
${pageScope.userMap }<br>
${pageScope.userMap["user1"] }<br>
${pageScope.userMap.user2 }<br>
${pageScope.userMap.user3 }<br>
${pageScope.userMap.user4 }--${pageScope.userMap.user4.password }<br>
<hr>
<%-- EL中特殊字符处理 --%>
<%
pageContext.setAttribute("aa.bb", "123");
%>
${pageScope["aa.bb"] }
<hr>
<%
pageContext.setAttribute("bbb", null);
%>
<%=pageContext.getAttribute("bbb") %><br>
${pageScope.bbb }
<hr>
<%-- EL获取请求参数 --%>
用户名: ${param.userName }
密码: ${param.password }
<hr>
<%-- EL获取请求参数(多个值 如获取复选框值) --%>
兴趣: ${paramValues.hobby }<br>
${paramValues.hobby[0] }<br>
${paramValues.hobby[1] }<br>
${paramValues.hobby[2] }<br>
${paramValues.hobby[3] }<br>
<hr>
<%-- EL表达式获取Cookie的信息 --%>
<%
Cookie cookie = new Cookie("book1","java");
response.addCookie(cookie);
%>
${cookie.book1 }--${cookie.book1.name }: ${cookie.book1.value }
<hr>
<%-- EL算术运算符(+,-,*,/,%) --%>
${1+2+3 }<br>
${1+"2"+"3" }
<hr>
<%-- EL关系运算符(==, !=, >, >=等等) --%>
${1==2 } --> ${1 eq 2 }
${1<10 }
<hr>
<%-- EL逻辑运算符(并,或,非) --%>
${1==2 && 2==2 }
<%
User user5 = new User("aaa", "123");
pageContext.setAttribute("user5", user5);
%>
${pageScope.user5.userName == "aaa" && pageScope.user5.password == "123" }
<hr>
<%-- EL Empty表达式 (判断值是否空) 如果为空 则返回true --%>
<%
pageContext.setAttribute("abc", null);
pageContext.setAttribute("abc", "123");
pageContext.setAttribute("abc", "");
%>
${empty pageScope.abc }
<hr>
<%-- EL条件表达式 --%>
${1==2? "1等于2" : "1不等于2" }
</body>
</html>
2: JSP标签
1): 作用
替代JSP中的java代码
2): JSP标签可以分为 三大类
a): 内置标签 (直接使用,不需要另外导入)
b): jstl标签 (需要在jsp页面导入jstl标签库)
c): 自定义标签 (由程序员自定义,需要在页面导入自定义标签)
3: 内置标签
1): 转发标签
作用: 可以使用做页面的转发
如: <jsp:forward page="/index.jsp"></jsp:forward>
2): 页面包含标签
作用: 包含其它的页面
如: <jsp:include page="/a.jsp">
<%
<jsp:param value="狗娃" name="userName"/>
<jsp:param value="123" name="password"/>
</jsp:include>
与<%@include %>指令的对比:
a): <%@include %>指令叫做静态包含, <jsp:include>这种包含叫做动态包含
b): 动态包含可以设置参数传递到被包含页面, 而静态包含不能
c): 动态包含先把被包含的页面(jsp)翻译再合并,所以会生成多个java文件
静态包含会先合并,再翻译只会生成一个java文件
ps: 如果在获取参数时出现乱码 则可以在当前包含的页面设置请求编码(如: request.setCharacterEncoding("utf-8");)