session会话技术、EL、JSTL

目录

一、session会话技术

定义:

种差(内涵):

session的创建、获取

session值的存取、删除语法分析

案例:

二、EL

为什么使用EL?

定义:

种差(内涵):

EL语法:

EL语法-通过变量名取值

案例:

通过servlet跳转到一个jsp,在jsp中拿到用户数据的集合

1.不用el

2.使用el

EL语法-获取对象属性值

EL语法-获取集合元素-List

EL语法-获取集合元素-Map

EL语法-执行表达式

EL语法-执行表达式 empty空运算符

EL隐式对象

取对象:param

复选框取对象:paramValues

三、JSTL概述

定义:

种差(内涵):

JSTL使用步骤:

1.导包,直接粘贴到项目如图的lib里

 2.jsp页面粘贴如下固定指令

3.写

set标签:

out标签:

 if标签(条件判断)没有else但是可以用另一种形式:

循环标签:

遍历集合:

循环标签的起止和步长:


一、session会话技术

定义:

session是存放在服务器端,用于保存整个会话过程中会话数据的对象。 

种差(内涵):

1、信息保存在服务器端

2、信息以对象的形式存放

session的创建、获取

HttpSession session = request.getSession();

获取request中的HttpSession对象。

返回值若为null,创建session。

HttpSession session = request.getSession(boolean b);

参数为true,用法等同于方法无参。

参数为false,返回值若为null,即返回null,不会创建session。

session值的存取、删除语法分析

以键值对的形式存数据:

session.setAttribute(String name,Object obj);

通过key值取数据:

session.getAttribute(String name);

通过key值删除数据:

session.removeAttribute(String name);

案例:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//设置字符编码
	request.setCharacterEncoding( "utf-8");
	response.setCharacterEncoding("utf-8");
	//设置生成的属性
	response.setContentType("text/html");
	
	PrintWriter pw = response.getWriter();
	//创建Session对象
	HttpSession session = request.getSession();
	//向session中保存数据
	session.setAttribute("username","张三");
	//从session中删除数据
	session.removeAttribute("username");
	//从session中获取数据并打印数据到网页上
	pw.print(session.getAttribute("username"));
	pw.flush();
	pw.close();
}

二、EL

为什么使用EL?

提出问题:

一般JSP页面中是不是嵌入大量的Java代码?访问结构比较复杂的数据时,代码繁琐,是不是经常需要强制类型转换?  

<%
Employee employee =(Employee) request.getAttribute("employee");
Computer comp = employee.getComputer();
String brand= comp.getBrand();
%>

如何解决?

EL从域对象中获取数据,自动进行类型转换,使JSP的开发变得更加简单

${requestScope.employee.computer.brand}

定义:

EL是嵌入到JSP页面中,从域或内置对象中获取数据并且进行操作的表达式语言

种差(内涵):

1、嵌入到JSP页面中

2、从域或内置对象中获取数据3、可以对获取数据进行操作

EL语法:

${EL expression }

通过变量名取值

获取对象的属性值.

获取集合元素

执行表达式

EL语法-通过变量名取值

${ 变量名 } 例如:${ username }

//在Servlet或JSP中保存数据

request.setAttribute("username", "LiYang");

//在JSP中访问数据

姓名: ${username}

指定作用域:

作用域名称EL中的名称
pagepageScope
requestrequestScope
sessionsessionScope
application

applicationScope

案例:

通过servlet跳转到一个jsp,在jsp中拿到用户数据的集合

用两种方法:

1.不用el

TestELServlet.java里
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置字符编码
		request.setCharacterEncoding( "utf-8");
		response.setCharacterEncoding("utf-8");
		//设置生成的属性
		response.setContentType("text/html");
		
		List<User> users=new ArrayList<User>();
		User u1=new User(1,"张三","123");
		User u2=new User(2,"李四","123");
		User u3=new User(3,"王五","123");
		User u4=new User(4,"赵六","123");
		users.add(u1);
		users.add(u2);
		users.add(u3);
		users.add(u4);
		
		request.setAttribute("users",users);
		request.getRequestDispatcher("TestEL.jsp").forward(request, response);
}

TestEL.jsp里
<body>
	<%
	List<User> users=(List<User>)request.getAttribute("users");
	User u=users.get(2);
	out.print(u.toString());
	%>
</body>

2.使用el

TestELServlet.java里
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置字符编码
		request.setCharacterEncoding( "utf-8");
		response.setCharacterEncoding("utf-8");
		//设置生成的属性
		response.setContentType("text/html");
		
		List<User> users=new ArrayList<User>();
		User u1=new User(1,"张三","123");
		User u2=new User(2,"李四","123");
		User u3=new User(3,"王五","123");
		User u4=new User(4,"赵六","123");
		users.add(u1);
		users.add(u2);
		users.add(u3);
		users.add(u4);
		
		request.setAttribute("users",users);
		request.getRequestDispatcher("TestEL.jsp").forward(request, response);
}

TestEL.jsp里
<body>
	${users[2]}
</body>

EL语法-获取对象属性值

<%=( (User)request.getAttribute("user") ) .getName()%>

相当于如下:

点操作符:

${user.name}

[ ]操作符

${user["name"]}

EL语法-获取集合元素-List

//在Servlet或JSP中保存数据

List names = new ArrayList();names.add(0, "LiYang");

names.add(1,"WangHua");

request.setAttribute("names",names);

//在JSP中访问数据

姓名∶$names[0] }<br/>

姓名:${names[1] }<br/>

//使用[ ]指定元素下标

EL语法-获取集合元素-Map

在Servlet或JSP中保存数据

Map names = new HashMap();

names.put("one","LiYang");

names.put("two", "WangHua");

request.setAttribute("names", names);

//在JSP中访问数据

姓名∶${names.one }<br/>

姓名:${names["two"] }<br/>

//根据键值对里的键

EL语法-执行表达式

了解即可,EL中条件判断一般不用,现在都用JSTL

算术运算符说明示例结果
+${15+2}17
-${15-2}13
*${15*2}30
/或div${15/2}或${15 div 2}7
%或mod求余${15%2}或${15 mod 2}1
关系运算符说明示例结果
==(或eq)等于

${23==5}或${23 eq 5}

${"a" =="a"}或${"a" eq "a"}

false

true

!=(或ne)不等于${23!=5}或${23 ne 5}true
<(或lt)小于${23<5}或${23 lt 5}false
>(或gt)大于${23>5}或${23 gt 5}true
<=(或le)小于等于${23<=5}或${23 le 5}false
>=(或ge)大于等于${23>=5}或${23 ge 5}true
逻辑运算符说明示例结果
&&(或and)逻辑与如果A为true,B为false,则${ A && B } (或${ A and B } )false
||(或or)逻辑或如果A为true,B为false,则${ A || B} (或 ${ A or B } )true
! (或not)逻辑非如果A为true,则${ ! A } ( 或${ not A } )false

EL语法-执行表达式 empty空运算符

若为空或者 null, 返回true,

否则返回 false

用于确定一个对象或者变量是否为 null 或空

${empty name}

EL隐式对象

EL隐式对象是预先定义的,在表达式语言中可以直接使用的对象

取对象:param

复选框取对象:paramValues

三、JSTL概述

EL中条件判断一般不用,现在都用JSTL

解决绝大多数<% %>

定义:

JSTL是Web应用程序中用于编写各种通用核心功能的JSP标准标签库

种差(内涵):

1、在web应用程序中使用

2、用于编写各种通用核心功能

JSTL使用步骤:

1.导包,直接粘贴到项目如图的lib里

 2.jsp页面粘贴如下固定指令

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

prefix里的c指所有标签都用c开头,如果里面写m则用m开头

如图位置:

3.写<c:就会出现各个标签提示

例如:(都写body里)

set标签:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- set向域里面添加数据保存数据 -->
<!-- scope=""里面写什么就往哪里填数据 -->
<!-- value=""指想填什么 -->
<!-- var=""指想填在什么名下 -->
	<!-- 存数据 -->
	<c:set scope="session" var="username" value="淳淳"></c:set>
	<!-- 相当于
		HttpSession session = request.getSession( );
		session.setAttribute("usernamel","淳淳"); -->
		
	<!-- 取数据 -->
	${username}
</body>
</html>

out标签:

<!-- 打印数据 -->
	<c:out value="淳淳"></c:out>
	<!-- 相当于out.print("淳淳") -->

 if标签(条件判断)没有else但是可以用另一种形式:

<!-- 如果判断存的是淳淳,就输出在努力 -->
	<c:if test="${username=='淳淳'}">
		<c:out value="在努力"></c:out>
	</c:if>
	<!-- 相当于else if -->
	<c:choose>
		<c:when test="${username=='张三'}">
			<c:out value="在学习"></c:out>
		</c:when>
		<c:when test="${username=='李四'}">
			<c:out value="在上课"></c:out>
		</c:when>
		<!-- 相当于else -->
		<c:otherwise>
			<c:out value="要加油"></c:out>
		</c:otherwise>
	</c:choose>

循环标签:

<c:set scope="session" var="cities" value="'北京','上海','杭州'"></c:set>
	<!-- 循环 -->
	<!-- items属性指你想遍历的集合是什么 -->
	<!-- var属性指每一次遍历生成的是什么 -->
	<c:forEach items="${cities}" var="city">
		<c:out value="${city}"></c:out>
	</c:forEach>

遍历集合:

<c:forEach items="${users }" var="user">
		<c:out value="${user }"></c:out>
</c:forEach>

对应的Servlet
request.setAttribute("users",users);
//request.getRequestDispatcher("TestEL.jsp").forward(request, response);
request.getRequestDispatcher("TestJSTL.jsp").forward(request, response);
	

循环标签的起止和步长:

<c:forEach items="${cities }" var="city" begin="1" end="2" step="1">
		<c:out value="${city }"></c:out>
	</c:forEach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值