第七章Servlet基础
1、Servlet 是一个 Java程序,是在服务器上运行以处理客户端请求并做出响应的程序
2、Servlet体系结构:
①接口:
Servlet概述
定义了所有Servlet需要实现的方法
Servlet接口的常用方法:
ServeltConfig概述
在Servlet初始化过程中获取配置信息,一个Servlet只有一个ServletConfig对象
ServletConfig的常用方法
②抽象类:
1)GenericServlet概述
提供了Servlet与ServletConfig接口的默认实现方法
GenericServlet的常用方法
2)HttpServlet概述
继承于GenericServlet
处理HTTP协议的请求和响应
HttpServlet的常用方法
Servlet的生命周期:
实例化 Servlet 容器创建 Servlet 的实例
初始化 该容器调用 init() 方法
请求处理 如果请求 Servlet,则容器调用 service() 方法
服务终止 销毁实例之前调用 destroy() 方法
3、Servlet的应用:
创建Servlet
实现doPost()或doGet()方法
部署Servlet
编辑部署描述文件web.xml(添加<servlet>和<servlet-mapping>)
启动Tomcat,访问Servle
总结:
1)Servlet的应用:
创建Servlet:实现doPost()或doGet()方法
部署Servlet:编辑部署描述文件web.xml
启动Tomcat,访问Servlet
2)Servlet初始化参数配置
<init-param>
<param-name>initParam</param-name>
<param-value>Hello Servlet</param-value>
</init-param>
3)Servle上下文参数配置
<web-app>
<context-param>
<param-name>contextParam</param-name>
<param-value>Hello Servlet</param-value>
</context-param>
<!--省略其他配置-->
</web-app>
getServletContext().getInitParameter("contextParam")
1、什么是EL
Expression Language(表达式语言)
2、EL的功能
替代JSP页面中的复杂代码
3、EL的特点
自动转换类型
EL得到某个数据时可以自动转换类型
使用简单
4、EL表达式:
${ EL exprission }
使用变量名获取值
获取对象的属性值
获取集合
5、使用变量名获取值
${变量名}:
Eg:<% request.setAttribute("username","LiYang"); %>
姓名: ${requstScope.username}
6、变量属性范围名称
7、获取对象的属性值
点操作符
${user.name}
[ ]操作符
${user["name"]}
Eg:<%
User user = (User )request.getAttribute("user");
user.getName();
%>
8、获取集合-List:
<%
List names = new ArrayList();
names.add(0, "LiYang");
names.add(1,"WangHua");
request.setAttribute("names",names);
%>
姓名:${names[0]}<br/>
姓名:${names[1]}<br/>
9、获取集合-Map:
<%
Map names = new HashMap();
names.put("one","LiYang");
names.put("two","WangHua");
request.setAttribute("names",names);
%>
姓名:${names.one}<br/>
姓名:${names["two"] }<br/>
10、${ EL exprission }
关系操作符
逻辑操作符
Empty操作符
变量 a不存在,则${empty a}返回的结果为true
${not empty a}或${!empty a}返回的结果为false
11、EL隐式对象:作用域访问对象,参数访问对象,JSP隐式对象
作用域访问对象:pageScope,requestScope,sessionScope,applicationScope
参数访问对象:param,paramValues
JSP隐式对象:pageContext
12、EL隐式对象介绍:
13、什么是JSTL?
JSP标准标签库(JavaServerPages Standard Tag Library)
14、JSTL 的优点:
提供一组标准标签
可用于编写各种动态 JSP 页面
JSTL通常会与EL表达式合作实现JSP页面的编码
15、JSTL的环境内搭:
使用JSTL的步骤:
在工程中引用JSTL的两个jar包和标签库描述符文件
在JSP页面添加taglib指令
使用JSTL标签
<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c%>
16、JSTL标准标签库内的标签:
通用标签:set out remove
条件标签: if choose
迭代标签: forEach
17、
①set:设置指定范围内的变量值
//将value值存储到范围为scope的变量variable中
<c:set var="index" value=" 8 " scope=" request "/>
//将value值设置到对象的属性中
<c:set value="value" target="target" property="property" />
<%
User user = new User();
request.setAttribute("user", user);
%>
<c:set target="${user}" property="name" value="defaultName " />
②out:计算表达式并将结果输出显示
不指定默认值:
<c:out value="value" />
指定默认值
<c:out value="value" default="default" />
<%
User user = new User();
request.setAttribute("user", user);
%>
<c:set target="${user}" property="name" value="defaultName " />
<c:out value="${user.name}" default="noUserName" />
通用标签的使用:
//引入使用核心标签的指令
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<body>
//set 标签用于给变量设置值和作用范围
//scope= "page|request|session|application"
<c:set var= "example" value="${100+1}" scope="session" />
//out 标签在页面上显示信息或变量值
<c:out value="${example}"/>
//remove 标签用于删除作用域内的变量
<c:remove var= "example" scope="session"/>
</body>
③条件标签的应用
<body>
<c:set var="isLogin" value="${empty sessionScope.user}"/>
<c:if test="${isLogin}">
…登录表单
</c:if>
<c:if test="${! isLogin}">
已经登录!
</c:if>
</body>
④choose:实现Java语言中if-else if-else语句的功能
<c:choose var="varName" scope="scope">
<c:when test="condition">
主体内容
</c:when>
<c:otherwise>
主体内容
</c:otherwise>
</c:choose >
⑤ forEach:实现对集合中对象的遍历
<%
List products = GoodsDao.getAllProducts();
request.setAttribute("products", products);
%>
…
<!-- 循环输出商品信息 -->//循环遍历集合
<c:forEach var="product" items="${requestScope.products}" varStatus="status">
<!-- 如果是偶数行,为该行换背景颜色 -->//判断奇偶
<tr <c:if test="${status.index % 2 == 1 }">style=""</c:if>>
//输出商品信息
<td>${product.name }</td>
<td>${product.area }</td>
<td>${product.price }</td>
</tr>
</c:forEach>
⑥通过迭代标签遍历Map
<%
Map<String,String> map=new HashMap<String,String>();
map.put("tom", "美国");
map.put("lily", "英国");
map.put("jack","中国");
request.setAttribute("map", map);
%>
<c:forEach var="entry" items="${map}">
${entry.key}
${entry.value}<p>
</c:forEach>
⑦ forEach:指定迭代的次数
<c:forEach begin="start" end="end" step="count">
…循环体代码…
</c:forEach>
<c:forEach begin="1" end="5" step= "2">
<c:out value="*"></c:out>
</c:forEach>
总结:
EL表达式的语法有两个要素:$ 和 {}
EL表达式可以使用“.”或者“[]”操作符在相应的作用域中取得某个属性的值
JSTL核心标签库中常用的标签有如下三类。
通用标签;<c:set>、<c:out>、<c:remove>
条件标签;<c:if>、<c:choose>、<c:when>、<c:otherwise>
迭代标签:<c:forEach>
EL表达式与JSTL标签结合使用,可以减少JSP中嵌入的Java代码,有利于程序的维护和扩展