之前讲解的MVC设计模式中一直有DAO存在,而且所有的对象都保存在VO之中,那么这时如果将一个VO传递到JSP文件中,那么JSP需要导入VO包,如果使用表达式语言的话,导入VO包就没有任何意义了。
VO包:
package org.lxh.eldemo.vo ; public class Dept { private int deptno ; private String dname ; private String loc ; public void setDeptno(int deptno){ this.deptno = deptno ; } public void setDname(String dname){ this.dname = dname ; } public void setLoc(String loc){ this.loc = loc ; } public int getDeptno(){ return this.deptno ; } public String getDname(){ return this.dname ; } public String getLoc(){ return this.loc ; } }
JSP程序:
<%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import="org.lxh.eldemo.vo.*"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head> <body> <% // 现在假设这些代码是由Servlet完成 Dept dept = new Dept() ; dept.setDeptno(10) ; dept.setDname("MLDN教学部") ; dept.setLoc("北京西城区") ; request.setAttribute("deptinfo",dept) ; %> <h3>部门编号:${deptinfo.deptno}</h3> <h3>部门名称:${deptinfo.dname}</h3> <h3>部门位置:${deptinfo.loc}</h3> </body> </html>
不需要调用任何getter方法就可以输出,现在肯定用的是反射机制。
如果想让这个程序发挥最好的效果,我们需要MVC模式:
创建servlet程序ELServlet.java:
package org.lxh.eldemo.servlet ; import org.lxh.eldemo.vo.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class ELServlet extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws java.io.IOException,ServletException{ Dept dept = new Dept() ; dept.setDeptno(10) ; dept.setDname("MLDN教学部") ; dept.setLoc("北京西城区") ; request.setAttribute("deptinfo",dept) ; request.getRequestDispatcher("dept_info.jsp").forward(request,response) ; } public void doPost(HttpServletRequest request,HttpServletResponse response) throws java.io.IOException,ServletException{ this.doGet(request,response) ; } }
dept_info.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head> <body> <h3>部门编号:${deptinfo.deptno}</h3> <h3>部门名称:${deptinfo.dname}</h3> <h3>部门位置:${deptinfo.loc}</h3> </body> </html>
web.xml:
<servlet> <servlet-name>ELServlet</servlet-name> <servlet-class>org.lxh.eldemo.servlet.ELServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ELServlet</servlet-name> <url-pattern>/eldemo_04/ELServlet</url-pattern> </servlet-mapping>
可以运行,可是如果传递到JSP文件中是一个类集呢?
只要是集合不管在任何情况下都是要通过Iterator输出,这是固定的。可是现在要通过EL完成输出,而且EL只能操作属性范围。
所以将集合通过Iterator找到每一个,之后将每一个对象放在page属性范围中,再通过EL找到。
JSP文件中唯一可以导入的包就是java.util包。
ELServlet.java:
package org.lxh.eldemo.servlet ; import java.util.* ; import org.lxh.eldemo.vo.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class ELServlet extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws java.io.IOException,ServletException{ List<Dept> all = new ArrayList<Dept>() ; Dept dept = null ; dept = new Dept() ; dept.setDeptno(10) ; dept.setDname("MLDN教学部") ; dept.setLoc("北京市西城区") ; all.add(dept) ; dept = new Dept() ; dept.setDeptno(20) ; dept.setDname("MLDN研发部") ; dept.setLoc("北京市东城区") ; all.add(dept) ; request.setAttribute("alldept",all) ; request.getRequestDispatcher("dept_list.jsp").forward(request,response) ; } public void doPost(HttpServletRequest request,HttpServletResponse response) throws java.io.IOException,ServletException{ this.doGet(request,response) ; } }
dept_list.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import="java.util.*"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head> <body> <% List all = (List) request.getAttribute("alldept") ; if(all != null){ %> <table border="1" width="90%"> <tr> <td>部门编号</td> <td>部门名称</td> <td>部门位置</td> </tr> <% Iterator iter = all.iterator() ; while(iter.hasNext()){ pageContext.setAttribute("dept",iter.next()) ; %> <tr> <td>${dept.deptno}</td> <td>${dept.dname}</td> <td>${dept.loc}</td> </tr> <% } %> </table> <% } %> </body> </html>