案例代码如下:
两个实体类:
package entity; import java.io.Serializable; import java.util.Arrays; public class Student implements Serializable { private static final long serialVersionUID = 1L; public Student() {} 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; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", sex=" + sex + ", interests=" + Arrays.toString(interests) + ", course=" + course + "]"; } } package entity; import java.io.Serializable; public class Course implements Serializable { private static final long serialVersionUID = 1L; public Course() {} //私有属性叫对象属性 private Integer courseId; private String name; private Integer days; /** * 1.和get/set对应的属性叫Bean属性 * 2.通过get/set反应出来的属性 * 3.去掉get,并将首字母小写的单词是Bean属性 * Bean属性一般和对象的属性一致(也可以不一致),本案例为了演示Bean属性,修改为不一致 */ 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; } @Override public String toString() { return "Course [courseId=" + courseId + ", name=" + name + ", days=" + days + "]"; } } servlet实现类:
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 FindStudentServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { //1.获取参数(本案例没有参数--略) //2.处理业务(查) //此处模仿数据库 Student stu = new Student(); stu.setName("张三"); stu.setAge(23); stu.setSex("M"); stu.setInterests(new String[]{"琴","棋","书","画"} ); Course c = new Course(); c.setId(1); c.setName("JAVA"); c.setDays(80); stu.setCourse(c);//到此Student实例初始化完成 //3.转发或重定向(转发) req.setAttribute("stu", stu); //当前:/jsp1/findStudent //目标:/jsp1/find_student.jsp req.getRequestDispatcher("find_student.jsp").forward(req, res); } }
jsp文件:
<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> <%-- 使用EL表达式时,不用import导入其他类的包,因为EL的底层采用了类反射机制 --%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!doctype html> <html> <head> <meta charset="utf-8" /> <title>EL和JSTL</title> <style type="text/css"> table{ border:2px soild #CCC; width:50%; text-align:center; border-collapse:collapse; } table td{ border:2px solid 3CCC; } </style> </head> <body> <h1>EL</h1> <%-- 1.利用EL获取Bean属性(2种方式) --%> <%-- ${stu.name }等价于 request.getAttribute("stu").getName()--%> <p>姓名:${stu.name }</p> <p>年龄:${stu["age"] }</p> <%-- 等价于 request.getAttribute("stu").getCourse().getId() 相当于是get/set方法,不是属性名 --%> <p>课程:${stu.course.id }</p> <p>兴趣:${stu.interests[2] }</p><%-- "琴","棋","书","画" --%> <%-- EL的取值范围: (1).默认从如下4个对象中依次取值: page,request,session application,这四个是默认的取值范围 (2).也可以指定取值范围 requestScope.stu.name 从request中取值 sessionScope.stu.name 从session中取值 (3).设置默认取值的目的是为了开发者不用经常写范围,简化EL表达式 --%> <p>性别:${sessionScope.stu.sex }</p><%--此处没有在session中存值,所以输出"" --%> <p>性别:${requestScope.stu.sex }</p><%--此处在request中存有值,所以输出"相应的值" --%> <%-- 2.EL支持运算 --%> <p>年龄+5:${stu.age+5 }</p> <p>20-30之间:${stu.age>=20 && stu.age<=30 }</p> <p>1+1:${1+1 }</p> <p>"100"+"200":${"100"+"200" }</p> <%-- 加号只能进行加法运算,不能连接 --%> <p>empty用于判断一个字符串是否为空</p> <p>stu判空:${empty stu }</p> <p>null判空:${empty null }</p> <p>""判空:${empty "" }</p> <!-- 3.EL表达式获取请求参数的值 --> <%-- 等价于request.getParamter("user") ${paramValues.city} request.getParamterValues("city")用于多选 --%> <p>获取请求参数:${param.user }</p> <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 == 'M' }">男</c:when> <c:otherwise>女</c:otherwise> </c:choose> </p> <%-- forEach --%> <%-- item:声明遍历的数据 var:给每次循环所获得的数据命名 --%> <p> <c:forEach items="${stu.interests }" var="in" varStatus="s"> <p>${s.count } ${in }</p> </c:forEach> </p> <%-- URL标签 使用可选的查询参数来创造一个URL--%> <%-- 模拟sossion中的数据,在jstl.jsp中读取--%> <% session.setAttribute("uname", "Lucy"); %> URL标签:<hr/> <a href="<c:url value='jstl.jsp' />" >访问jstl.jsp</a> <br><hr/> <%-- set标签用于保存数据 remove标签用于删除数据--%> <c:set var="num" scope="session" value="${1+5 }"></c:set> set之后num的值为:${sessionScope.num } <br><hr/> <c:remove var="num" scope="session"/> remove之后num的值为:${sessionScope.num } <%-- catch主要用来处理产生错误的异常状况,并且将错误信息储存起来 var:用来储存错误信息的变量 --%> <br><hr/>catch标记: <c:catch var="msg"> <% Integer.parseInt("ytg"); %> </c:catch> ${msg } <%-- import 将另一个页面嵌入到当前页面中 类似于include指令--%> <%-- import 将浏览器重定向至一个新的URL--%> <%-- <c:redirect url="https://www.baidu.com/"/> --%> <br><hr> <%-- <c:out>标签用来显示一个表达式的结果,与<%= %>作用相似 --%> <c:out value="${5+4 }"></c:out> <%-- out标签类似于${5+4 } --%> <br><hr> </body> </html>浏览器的请求路径为:http://localhost:8080/jsp1/findStudent?user=abc
输出结果为:
姓名:张三
年龄:23
课程:1
兴趣:书
性别:
性别:M
年龄+5:28
20-30之间:true
1+1:2
"100"+"200":300
empty用于判断一个字符串是否为空
stu判空:false
null判空:true
""判空:true
获取请求参数:abc
男
男
1 琴
2 棋
3 书
4 画
URL标签: