java_web:EL表示式的使用

_小塵發表於2020-12-29

EL(Expression Language)表示式:

1.EL表示式可以代替jsp頁面中的java程式碼

傳統的jsp中用java程式碼顯示資料的弊端:型別轉換,需要處理null,程式碼參雜
	jsp示例:
	<%
		Student student=(Student)request.getAttribute("student");
		out.print(student.getSid());
	%>
使用EL表示式顯示資料的好處:直接獲取資料,未賦值的資料直接不顯示而非顯示null,提高jsp程式碼的可讀性
	EL示例:
	${requestScope.student.sid }
	${域物件.域物件中的屬性.屬性}

2.EL操作符

	a.點操作符.									使用方便
	b.中括號操作符[]					功能強大:可以包含特殊字元(. - ~)
	c.運算,邏輯,關係操作符			+,-,||,&&,>,<等
	d.empty運算子					判斷一個值是否為null,為空則返回true

3.El表示式的隱式物件

a.作用域訪問物件:
		pageScope < requestScope < sessionScope < applicationScope
		若不指定域物件,則會根據從小到大的順序依次取值
	b.引數訪問物件:
		jsp頁面獲取其他jsp頁面傳來的資料,通過表單,超連結,位址列傳輸資料
		${parm}:獲取單個欄位的值,作用等同於servlet中request.getParameter()方法
		${parmValues}:獲取陣列的值,作用等同於servlet中request.getParameterValues()方法
	c.jsp隱式物件:
		pageContext
		在jsp中可以通過pageContent獲取其他jsp隱式物件,使用pageContent來級聯獲取方法
		例:
		獲取session物件:${pageContext.session},作用等同於servlet中pageContext.getSession()方法

應用例項:使用EL表示式實現在servlet(增加資料)傳輸其資料到jsp(顯示資料)

el01.jsp

<%@page import="com.xiaochen.entity.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		out.print("傳統的jsp中使用java程式碼來取servlet中傳來的資料<br>");
		//從request域中取servlet中的資料
		Student student=(Student)request.getAttribute("student");
		out.print("姓名:"+student.getSid()+"<br>");
		out.print("學號:"+student.getSname()+"<br>");
		out.print("地址:"+student.getAddress()+"<br>");
	%>
	
	<br><br><br>
	使用EL表示式實現jsp頁面中獲取servlet中的資料<br>
	姓名:${requestScope.student.sid }<br>
	學號:${requestScope.student.sname }<br>
	地址:${requestScope.student.address }<br>
	
	<br><br><br>
	EL操作符<br>
	a.點操作符.<br>
	性別:${requestScope.my-sex }<br>
	b.中括號操作符[]<br>
	性別:${requestScope['my-sex'] }<br>
	
	<br><br><br>
	用EL表示式獲取陣列的值<br>
	愛好:${requestScope.hobbies[1] },${requestScope.hobbies[2] }<br>
	用EL表示式獲取HashMap的值<br>
	國籍:${requestScope.map.ch }
	
	<br><br><br>
	EL運算,關係,邏輯操作符<br>
	12>29:${3>2 },${3 gt 2 }<br>
	12+29=${12+29 }<br>
	12>29||29>12:${12>29||29>12 },${12>29 or 29>12 }<br>
	
	<br><br><br>
	empty操作符<br>
	<!-- request域中並不存在study該值 -->
	性別為空?:${empty(requestScope['my-sex']) }<br>
	學歷為空?:${empty(requestScope.study) }<br>
	
	


	
</body>
</html>

student.java

package com.xiaochen.entity;
public class Student {
	private int sid;
	private String sname;
	private String address;
	public int getSid() {
		return sid;
	}
	public void setSid(int sid) {
		this.sid = sid;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

ElServlet.java

package com.xiaochen.servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.tomcat.jni.Address;

import com.xiaochen.entity.Student;

/**
 * Servlet implementation class ElServlet
 */
@WebServlet("/ElServlet")
public class ElServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public ElServlet() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//建立好一個實體類並設定好值,用於servlet----->jsp的傳輸
		Student student=new Student();
		student.setSname("小塵");
		student.setSid(15);
		student.setAddress("江西省");	
		//將資料存到request域中
		request.setAttribute("student",student);
		
		//用於比較點操作符與中括號操作符
		request.setAttribute("my-sex", "男");
		
		//用EL表示式獲取陣列的值
		String[] hobbies=new String[] {"足球","籃球","乒乓球","排球","羽毛球","網球"};
		request.setAttribute("hobbies", hobbies);
		
		//用EL表示式獲取HashMap的值
		Map<String,Object> map=new HashMap<>();
		map.put("ch", "中國");
		map.put("us", "美國");
		request.setAttribute("map", map);	
		
		//請求轉發到el.jsp頁面,實現request域中資料的傳輸
		request.getRequestDispatcher("el01.jsp").forward(request, response);
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

執行結果圖
在這裡插入圖片描述
在這裡插入圖片描述
應用例項:使用EL表示式的引數訪問物件和jsp隱式訪問物件

el02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	獲取由form.jsp頁面傳來的表單資料<br>
	使用者名稱:${param.uname }<br>
	愛好:${paramValues.hobbies[1] },${paramValues.hobbies[2] }<br>
	
	<br><br><br>
	通過jsp隱式物件來獲取埠<br>
	請求的埠號為:${pageContext.request.serverPort }<br>
</body>
</html>

form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 此form表單傳遞到el.jsp頁面-->
	<form action="el02.jsp">
		使用者名稱:<input name="uname" type="text"><br>
		興趣:<br>
		足球<input name="hobbies" value="足球" type="checkbox">
		籃球<input name="hobbies" value="籃球" type="checkbox">
		乒乓球<input name="hobbies" value="乒乓球" type="checkbox">
		<br>
		<input type="submit" value="註冊">
			
	</form>
</body>
</html>

執行結果圖
在這裡插入圖片描述
在這裡插入圖片描述

相關文章