本章目标
掌握表达式输出对象的操作;
掌握表达式语言的实际作用,并结合MVC设计模式应用表达式语言;
定义一个VO类 —— Dept.java
package cn.demo.ov;
public class Dept {
private int deptno;
private String dname;
private String loc;
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
}
将此对象保存在属性范围中,通过表达式语言输出
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" import="cn.demo.ov.*"%>
<html>
<head>
<title>将此对象保存在属性范围中,通过表达式语言输出</title>
</head>
<body>
<%
Dept dept=new Dept();//实例化VO对象
dept.setDeptno(10);//设置deptno属性
dept.setDname("chaoyi");//设置dname属性
dept.setLoc("阅谁问君诵,水落清香浮。");//设置loc属性
request.setAttribute("deptinfo", dept);//设置request属性
%>
<h3>部门编号:${deptinfo.deptno}</h3>
<h3>部门名称:${deptinfo.dname}</h3>
<h3>部门位置:${deptinfo.loc}</h3>
</body>
</html>
效果图:
使用MVC传递集合
一个JSP程序中应该只包含三类代码:接收属性、判断、输出,而且在JSP中最好只导入一个java.util包,所以此时要输出一个集合的话,那么还是要依靠Iterator完成,通过Iterator找出集合中的每一个元素,但表达式语言只能操作四种属性范围中的内容,所以就可以将每一个取出的对象(Object)存放在page范围中(因为每一个要输出的内容只在本页有效),之后再通过表达式输出即可
编写Servlet传递request属性
package cn.demo.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.demo.ov.Dept;
public class ELServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Dept dept=new Dept();//实例化VO对象
dept.setDeptno(10);//设置deptno属性
dept.setDname("chaoyi");//设置dname属性
dept.setLoc("阅谁问君诵,水落清香浮。");//设置loc属性
request.setAttribute("deptinfo", dept);//设置request属性
request.getRequestDispatcher("demo2.jsp").forward(request, response);//设置服务器跳转传递request属性
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);//调用doGet()
}
}
配置web.xml
<servlet>
<servlet-name>EServlet</servlet-name>
<servlet-class>cn.demo.servlet.ELServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>EServlet</servlet-name>
<url-pattern>/031004/ELServlet</url-pattern><!-- 页面的映射路径 -->
</servlet-mapping>
接收 request 属性并输出
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" import="cn.demo.ov.*"%>
<html>
<head>
<title>接收 request 属性并输出</title>
</head>
<body>
<h3>部门编号:${deptinfo.deptno}</h3>
<h3>部门名称:${deptinfo.dname}</h3>
<h3>部门位置:${deptinfo.loc}</h3>
</body>
</html>
效果图:
定义Servlet传递集合
package cn.demo.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.demo.ov.Dept;
public class ELListServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Dept> all=new ArrayList<Dept>();//实例化List接口
Dept dept=null;//定义Dept对象
dept=new Dept();//实例化OV对象
dept.setDeptno(10);//设置deptno属性
dept.setDname("chaoyi");//设置dname属性
dept.setLoc("阅谁问君诵,水落清香浮。");//设置loc属性
all.add(dept);//向集合中增加dept属性
dept=new Dept();//实例化OV对象
dept.setDeptno(11);//设置deptno属性
dept.setDname("chaoyv");//设置dname属性
dept.setLoc("夜半钟声镜雨来。");//设置loc属性
all.add(dept);//向集合中增加dept属性
request.setAttribute("alldept", all);//设置request属性
request.getRequestDispatcher("demo3.jsp").forward(request, response);//设置服务器跳转传递request属性
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);//调用doGet()
}
}
配置web.xml
<servlet>
<servlet-name>ELListServlet</servlet-name>
<servlet-class>cn.demo.servlet.ELListServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ELListServlet</servlet-name>
<url-pattern>/031004/ELListServlet</url-pattern><!-- 页面的映射路径 -->
</servlet-mapping>
使用表达式输出集合
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" import="cn.demo.ov.*"%>
<html>
<head>
<title>使用表达式输出集合</title>
</head>
<body>
<%
List all=(List)request.getAttribute("alldept");//接收List集合
if(all!=null){//判断是否为空
%>
<table border="1" width="30%">
<tr>
<td>部门编号</td>
<td>部门名称</td>
<td>部门位置</td>
</tr>
<%
Iterator iter=all.iterator();//实例化Iterator对象
while(iter.hasNext()){//迭代输出
pageContext.setAttribute("dept", iter.next());//设置page属性
%>
<tr>
<td>${dept.deptno}</td>
<td>${dept.dname}</td>
<td>${dept.loc}</td>
</tr>
<%
}
%>
</table>
<%
}
%>
</body>
</html>
效果图:
小结
表达式语言可以方便的进行对象属性的输出;
通过表达式语言输出集合时,需要使用page属性范围完成;
表达式结合MVC设计模式将发挥更大的作用。