版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Coder_Boy_/article/details/82503775
相关概念辨析
EL和JSTL
EL案例
补充:EL表达式取的是Bean属性
class Student {
//对象属性
private String name;
//Bean属性:studentName
public String getStudentName() {
return this.name;
}
public void setStudentName(String name) {
this.name = name;
}
}
案例演示:
工程案例目录结构
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.study</groupId>
<artifactId>Jsp03</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javaee</groupId>
<artifactId>javaee-api</artifactId>
<version>5</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>Jsp03</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>web.DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
</web-app>
DemoServlet.java
package web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import entity.Course;
import entity.Student;
public class DemoServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {
//模拟一份数据
Student s= new Student();
s.setName("CANG");
s.setAge(40);
s.setSex("M");
s.setInterests(new String[]{"篮球","足球","排球"});
Course c = new Course();
c.setId(1);
c.setName("Java");
c.setDays(80);
s.setCourse(c);
//转发到JSP
req.setAttribute("stu", s);
//当前:/Jsp03/demo
//目标:/Jsp03/demo.jsp
req.getRequestDispatcher("demo.jsp").forward(req,res);
}
}
Student.java
package entity;
import java.io.Serializable;
public class Student implements Serializable {
private String name;
private Integer age;
private String sex;
private String[] interests;
private Course course;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String[] getInterests() {
return interests;
}
public void setInterests(String[] interests) {
this.interests = interests;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
}
Course.java
package entity;
import java.io.Serializable;
public class Course implements Serializable {
//对象属性courseId
private Integer courseId;
private String name;
private Integer days;
//Bean属性id
//EL访问的是Bean属性(get方法)
public Integer getId() {
return courseId;
}
public void setId(Integer courseId) {
this.courseId = courseId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getDays() {
return days;
}
public void setDays(Integer days) {
this.days = days;
}
}
demo.jsp
<%@page pageEncoding="utf-8"%>
<!-- 引入标签库 -->
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="/cheri-tag" prefix="s" %>
<!doctype html>
<html>
<head>
<title>EL和JSTL</title>
<meta charset="utf-8">
</head>
<body>
<h1>JSTL</h1>
<!-- if -->
<p>
<c:if test="${stu.sex=='M' }">男</c:if>
<c:if test="${stu.sex=='F' }">女</c:if>
</p>
<!-- choose -->
<p>
<c:choose>
<c:when test="${stu.sex=='F' }">男</c:when>
<c:otherwise>女</c:otherwise>
</c:choose>
</p>
<!--
forEach
varStatus用来声明循环状态,forEach在做
循环时,会自动创建一个状态对象,来记录
循环相关的状态数据,如循环次数。varStatus
就是用来给这个对象命名,以便引用它。
-->
<p>
<c:forEach items="${stu.interests }"
var="i" varStatus="s">
${i } ${s.index } ${s.count }
</c:forEach>
</p>
<hr>
<h1>EL</h1>
<!--
1.访问Bean属性:
语法:stu.name/stu["age"]
等价:request.getAttribute("stu").getName()
-->
<p>姓名:${stu.name }</p>
<p>年龄:${stu["age"] }</p>
<p>兴趣: ${stu.interests[0] }</p>
<!--
request.getAttribute("stu").getCourse().getId()
-->
<p>课程:${stu.course.id }</p>
<!--
EL的取值范围:
默认情况下,EL依次从4个对象中取值,
page/request(*)/session(*)/application,
这4个对象称之为EL的取值范围。
举例: stu.name
1. page.getAttribute("stu").getName()
2. request.getAttribute("stu").getName()
3. session.getAttribute("stu").getName()
4. application.getAttribute("stu").getName()
可以明确指定取值范围:
sessionScope.stu.name
applicationScope.stu.name
-->
<p>范围:${requestScope.stu.name }</p>
<!--
2.EL在取值时可以进行运算:
算术运算/逻辑运算/关系运算/判空运算
-->
<p>年龄-5:${stu.age-5 }</p>
<p>大于20吗:${stu.age >20 }</p>
<p>20-30间:${stu.age >=20 && stu.age <=30 }</p>
<p>判空:${empty stu }</p>
<p>判空:${stu==null }</p>
<!--
3. EL可以获取请求参数
param.user -> request.getParameter("user")
paramValues.city -> request.getParamValues("city")
-->
<p>参数:${param.user }</p><!-- ?数组如何获取指定的一个 -->
</body>
</html>
将Jsp03工程部署到Tomcat上,运行Tomcat启动案例工程,
浏览器录入http://localhost:8080/Jsp03//demo 即可:如果没有错误,最终页面显示效果应如下图:
浏览器录入http://localhost:8080/Jsp03//demo?user=jack 后页面显示如下