表达式语言--在MVC中应用表达式语言

之前讲解的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>
原文地址:https://www.cnblogs.com/wujixing/p/5001039.html