一.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>
效果图如下所示: