表达式语言--在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>
表达式语言--在MVC中应用表达式语言的更多相关文章
- python3.x中lambda表达式的处理与python2不一样
lambda表达式,在python2中的表达式和python3不同,原来只要: >>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) ...
- C/C++ 语言中的表达式求值(原文作者:裘宗燕)
经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4, ...
- C/C++ 语言中的表达式求值
在此,首先向裘老师致敬! 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?” m = 1; n = m+++m++; 最近有位不相识的朋友 ...
- 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)
1. Java语言主要由5中符号组成 标识符:数字.字母.美元符.下划线(注意不能数字开头) 关键字(被Java赋予特殊意义的单词,注意所有关键字都是小写): goto和const保留了它们,但是 ...
- DML数据操作语言之谓词,case表达式
谓词:就是返回值是真值的函数. 前面接触到的“>” “<” “=”等称为比较运算符,它们的正式名称就是比较谓词.因为它们比较之后返回的结果是真值. 由于谓词 返回的结果是一个真值 ,即tr ...
- c语言笔记3运算符与表达式
运算符与表达式 知识点一 操作数:参与运算的具体对象. 运算符:指明了对操作数进行的某项运算. 表达式:表示一个求值得规则.它由变量.常量.运算符和函数.括号按一定规则组成. 书写表达式的细节:1,运 ...
- 简单易懂的程序语言入门小册子(3):基于文本替换的解释器,let表达式,布尔类型,if表达式
let表达式 let表达式用来声明一个变量. 比如我们正在写一个模拟掷骰子游戏的程序. 一个骰子有6个面. 所以这个程序多次用到了6这个数字. 有一天,我们忽然改变主意,要玩12个面的骰子. 于是我们 ...
- C语言逗号运算符和逗号表达式
在C语言中逗号","也是一种运算符,称为逗号运算符. 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式.其一般形式为:表达式1,表达式2 其求值过程是分别求两个表达式的 ...
- C语言入门4-运算符和表达式
一. 分类 C语言一共有34种运算符,10种运算类型,本节我们要掌握的有( 7 种) 算术运算符(+.-.*./.%). 关系运算符(>.>=.==.!=.<.<=). ...
随机推荐
- 多工段查询存放到DataTable到List<DataTable>集合在C#里面做汇总
private void btnQuery_Click(object sender, EventArgs e) { if (cboxFactory.Text=="") { Mess ...
- android 实践项目
电子词典 http://files.cnblogs.com/blogLYF/lyf_danci.apk
- .NET技术+25台服务器怎样支撑世界第54大网站
摘要:同时使用Linux和Windows平台产品,大量使用静态的方法和类,Stack Overflow是个重度性能控.同时,取代横向扩展,他们坚持着纵向扩展思路,因为“硬件永远比程序员便宜”. Sta ...
- js 交换表单中值
<html> <head> <meta charset="utf-8" /> <script type="text/javasc ...
- hdu_5734_Acperience
题目连接:hdu_5734_Acperience 多校的题我还是贴官方题解的好,方便快捷,省事!! #include<cstdio> #include<cmath> #defi ...
- HDU1379:DNA Sorting
Problem Description One measure of ``unsortedness'' in a sequence is the number of pairs of entries ...
- OpenCV——运用于pixels war游戏
// The "Square Detector" program. // It loads several images sequentially and tries to fin ...
- List列表 OrderBy
一个条件排序情况 list.OrderBy(item => tem.State); 多个条件的情况下 list.OrderBy(item => new {item.State, item. ...
- Entity Framework 学习中级篇3—存储过程(中)
目前,EF对存储过程的支持并不完善.存在以下问题: l EF不支持存储过程返回多表联合查询的结果集. l EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...
- anyremote源码分析
XTest 鼠标移动事件. XTestFakeMotionEvent 关于XTest的编程. http://lilydjwg.is-programmer.com/2011/9/21/using-x ...