之前讲解的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. c/s架构

    C/S 结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销.目前大多数应用软件 ...

  2. 学习笔记——命令模式Command

    命令模式,将具体操作Receiver封在Command中,调用类只需要知道Command即可.

  3. 只能在执行 Render() 的过程中调用 RegisterForEventValidation

    当用GridView导出Execl的时候,会发生只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误提示.有两种方法可以解决以上问题: 1.修改web ...

  4. SSH-KeyGen 的用法

    假设 A 为客户机器,B为目标机: 要达到的目的:A机器ssh登录B机器无需输入密码:加密方式选 rsa|dsa均可以,默认dsa 做法:1.登录A机器 2.ssh-keygen -t [rsa|ds ...

  5. Django:之安全、国际化和session

    Django 安全 以下是关于Django安全的一些特征,它包括如何使基于Django的网站的一些建议. 关于安全的官方文档:https://docs.djangoproject.com/en/dev ...

  6. html 时间单位

    <style>h1{font-size:16px;} .test{position:absolute;left:8px;width:200px;height:100px;margin:0 ...

  7. mysql数据库参数innodb_buffer_pool_size和max_connections

    接到报故,查看mysql数据库以下参数 1.innodb_buffer_pool_size 2.max_connections 该参数定义了数据缓冲区buffer pool大小,类似于oracle的d ...

  8. MySQL的索引创建、删除

    1_1.添加PRIMARY KEY(主键索引)  mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 1_2.添加UNIQUE ...

  9. MSSQL 字符串XML 合成列

    declare @str varchar(2000) set @str='1,2,3,4,6,8,5,9,10,11,12,13,14,15,16,17,18,19,20,29,30,31,32,33 ...

  10. C#获取周的第一天、最后一天、月第一天和最后一天

    [csharp] view plaincopyprint? public class DateTimeTool { /// <summary> /// 获取指定日期所在周的第一天,星期天为 ...