一.mvc模式介绍

 下图是常用的mvc分层模式:

表达式引擎 python_表达式引擎 python

项目中的包命名规则,一般如下:

com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包
com.amos.dao 封装dao层
com.amos.dao.daoimpl 实现dao层接口
com.amos.service 封装service层
com.amos.service.serviceiml 实现service层接口
com.amos.web.controller业务逻辑层
com.amos.web.listener 监听器
com.amos.web.filter 过滤器
com.amos.utils 存放工具类
com.amos.test 测试类
按照上面的分类,可以方便维护.
WEB-INF/jsp将jsp存放到WEB-INF目录下,这样可以增加安全性

 

二.el表达式

EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为””(注意,不是null)。
示例:使用EL表达式获取request、session、applection域中的数据。
EL表达式中也可以使用${customerBean.address}的形式来访问JavaBean对象的属性。
示例:使用EL表达式获取Bean属性。
EL表达式也可使用类如${1==1}的形式进行简单的逻辑判断。



<%@page import="java.util.*"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.amos.model.*"%>
<%@ page isELIgnored="false"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>el表达式学习</title>
</head>
<body>
    第一种,简单取值:
    <%
    String data = "hi,amos!";
    request.setAttribute("data", data);
%>
    ${data}
    <br> 第二种,从bean中取值:
    <%
        Person p = new Person();
        p.setName("amosli");
        session.setAttribute("person", p);
    %>
    ${person.name}
    <br>
    <%=((Person) session.getAttribute("person")).getName()%><br>
    第三种:从复杂bean中取值:
    <%
        Person person1 = new Person();
        Address a = new Address();
        a.setCity("上海");
        person1.setAddress(a);
        application.setAttribute("p1", person1);
    %>
    ${p1.address.city}
    <br> 第四种:从集合中取值:
    <%
        List list = new ArrayList();
        list.add(new Person("amos"));
        list.add(new Person("li"));
        list.add(new Person("amosli"));
        list.add(new Person("hi"));
        list.add(new Person("hi_amos"));
        application.setAttribute("personlist", list);
    %>
    ${personlist[0].name }
    <br>

    <%
        Map map = new HashMap();
        map.put("aa", new Person("aaaa"));
        map.put("cc", new Person("cccc"));
        map.put("dd", new Person("dddd"));
        map.put("ee", new Person("eeee"));
        map.put("11", new Person("111"));

        request.setAttribute("map", map);
    %>
    ${map.dd.name }<br> 
    <%-- ${map.11.name } 一般情况下用点号进行取值,如果点号取不出来值,那么可以用[]来代替. --%>
    ${map['11'].name }<br>
    
    获取当前应用的名称:
    ${pageContext.request.contextPath }
    
</body>
</html>



 

结果:

表达式引擎 python_web.xml_02

 

注意:el表达式不能用的解决方法,我这里是2.3版本的,web.xml中有如下代码:



<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >



解决方法是在jsp页面中加入:



<%@ page isELIgnored="false"%>



 

三.jstl标签库的使用

1.关于JSTL标签库

JSTL是sun公司开发的一套标签库,使用JSTL可以在页面中实现一些简单的逻辑,从而替换页面中的脚本代码。
在页面中使用JSTL标签需完成以下2个步骤:
1、导入jstl.jar和standerd.jar这两个JSTL的jar文件。
2、在JSP页面中使用<%@ tablib url=“” prifix=“” %>元素导入标签库。
JSTL标签库中常用标签:

<c:foreach var=“” items=“”>
<c:if test=“”>

 我这里用的是maven管理jar包的,所以只需要引入:



<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>



或者直接下载:http://repo1.maven.org/maven2/jstl/jstl/1.2/jstl-1.2.jar

2.引入标签库



<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>



 

3.示例:

 



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page isELIgnored="false"%>
<%@page import="java.util.*,com.amos.model.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jstl标签学习</title>
</head>
<body>
    <br> 从集合中取值:
    <%
        List list = new ArrayList();
        list.add(new Person("amos"));
        list.add(new Person("li"));
        list.add(new Person("amosli"));
        list.add(new Person("hi"));
        list.add(new Person("hi_amos"));
        application.setAttribute("personlist", list);
    %>
    ${personlist[0].name }
    <br>
    
    <c:forEach var="list" items="${ personlist}">
        <c:out value="${list.name }"></c:out><br>
    </c:forEach>

    <%
        Map map = new HashMap();
        map.put("aa", new Person("aaaa"));
        map.put("cc", new Person("cccc"));
        map.put("dd", new Person("dddd"));
        map.put("ee", new Person("eeee"));
        map.put("11", new Person("111"));
        request.setAttribute("maps", map);
    %>
    <c:forEach  var="map" items="${maps }">
     ${map.key}:${map.value.name }<br>
    </c:forEach>

</body>
</html>



效果图如下所示:

表达式引擎 python_web.xml_03