之前讲解的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>

表达式语言--在MVC中应用表达式语言的更多相关文章

  1. python3.x中lambda表达式的处理与python2不一样

    lambda表达式,在python2中的表达式和python3不同,原来只要: >>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])          ...

  2. C/C++ 语言中的表达式求值(原文作者:裘宗燕)

    经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4, ...

  3. C/C++ 语言中的表达式求值

    在此,首先向裘老师致敬! 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?” m = 1; n = m+++m++; 最近有位不相识的朋友 ...

  4. 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)

    1. Java语言主要由5中符号组成 标识符:数字.字母.美元符.下划线(注意不能数字开头) 关键字(被Java赋予特殊意义的单词,注意所有关键字都是小写):   goto和const保留了它们,但是 ...

  5. DML数据操作语言之谓词,case表达式

    谓词:就是返回值是真值的函数. 前面接触到的“>” “<” “=”等称为比较运算符,它们的正式名称就是比较谓词.因为它们比较之后返回的结果是真值. 由于谓词 返回的结果是一个真值 ,即tr ...

  6. c语言笔记3运算符与表达式

    运算符与表达式 知识点一 操作数:参与运算的具体对象. 运算符:指明了对操作数进行的某项运算. 表达式:表示一个求值得规则.它由变量.常量.运算符和函数.括号按一定规则组成. 书写表达式的细节:1,运 ...

  7. 简单易懂的程序语言入门小册子(3):基于文本替换的解释器,let表达式,布尔类型,if表达式

    let表达式 let表达式用来声明一个变量. 比如我们正在写一个模拟掷骰子游戏的程序. 一个骰子有6个面. 所以这个程序多次用到了6这个数字. 有一天,我们忽然改变主意,要玩12个面的骰子. 于是我们 ...

  8. C语言逗号运算符和逗号表达式

    在C语言中逗号","也是一种运算符,称为逗号运算符. 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式.其一般形式为:表达式1,表达式2 其求值过程是分别求两个表达式的 ...

  9. C语言入门4-运算符和表达式

    一.     分类 C语言一共有34种运算符,10种运算类型,本节我们要掌握的有( 7 种) 算术运算符(+.-.*./.%). 关系运算符(>.>=.==.!=.<.<=). ...

随机推荐

  1. split分割字符串时的一些特殊分隔符

    @Test public void testSplit() { String address = "上海.上海市.闵行区.吴中路"; String[] splitAddress = ...

  2. U盘做svn版本控制

    svn提供的访问方式有: file:///本地路径/to/svnrepo/ //访问本地磁盘 http://host/to/svnrepo/ //通过配置subversion的apache服务器的we ...

  3. Orace内置函数大全[转:http://www.cnblogs.com/lfx0692/articles/2395950.html]

    NewProgramer   Oracle SQL 内置函数大全(转) SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数;SQL> select ascii('A') A,a ...

  4. 字符串匹配算法之KMP

    字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD" ...

  5. php给数组key:value中的key加引号

    public function Ext_json_decode($str, $mode=false){ if(preg_match('/\w:/', $str)){ $str = preg_repla ...

  6. 关于LR监视Windows和linux的说明

    一.监控windows系统: 1.监视连接前的准备工作 1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) 和Remote Registry Ser ...

  7. 自定义NSOperation

    一直在思考,每次异步请求都会创建一个新线程,如果我同时发100个异步请求,这样会导致我的内存爆满,应用程序奔溃,因为iOS对开线程有着约束,不能开很多个线程,这就要求我们必须对异步请求进行控制,我一直 ...

  8. JavaScript在智能手机上的应用-测试是否支持滑动事件

    ---------------------------- <script type="text/javascript">                        ...

  9. git搜索--grep

    1. 查找某个关键字(比如函数名): $ git grep xmmap config.c: contents = xmmap(NULL, contents_sz, PROT_READ, ); git- ...

  10. web app 基础界面框架搭建

    一.问题的产生 基础框架界面如图1所示,目前app流行布局 图1 布局关注点: 1.Title和Footer部分为固定布局position:fixed,存在的争议是android2.x和IOS4一下说 ...