zoukankan      html  css  js  c++  java
  • 表达式语言--在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>
  • 相关阅读:
    iOS iOS与html进行交互
    2. SwiftUI学习之_padding1()
    基础知识 1. 设计模式是什么?你知道哪些设计模式,请简要叙述?
    swift 5.0富文本
    ios 本地化
    ios报错:nw_protocol_get_quic_image_block_invoke dlopen libquic failed
    IOS开发没有开发者账号也可以进行测试
    swift项目中新的字体如何加入
    TestFlight用法 包教包会(iOS APP官方测试工具)
    IOS FMDB的使用
  • 原文地址:https://www.cnblogs.com/wujixing/p/5001039.html
Copyright © 2011-2022 走看看