一.mvc模式介绍
下图是常用的mvc分层模式:
项目中的包命名规则,一般如下:
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>
结果:
注意: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>
效果图如下所示: