jsp的出现
原始的界面由servlet中使用response.write()输出,但是特别复杂
出现了jsp=html +java+css+js+jsp的语法
html只能展示静态的数据,结合java和jsp的语法实现了动态的展示数据
jsp的语法
<%@page import="java.util.Date"%> <%@page language="java" pageEncoding="UTF-8"%>
执行流程
jsp文件>>翻译为.java>>编辑为,class>>装载起来
翻译的文件:在work下, \work\Catalina\localhost\ROOT\org\apache\jsp
相关代码在_jspService()方法中();所以在方法中不能定义再方法
<% %> 包含的是java代码 <%! %> 全局的 <%= %> 输出语句 <!-- 注释内容--> html的注释 <%-- 该部分注释在网页中不会被显示--%> jsp的注解 在浏览器中不会显示
jsp常见指令
<%@ page ...%> 引入依赖比如脚本文件 error页面 容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令 import="java.util.*"; <%@ include ...%> 包含其他文件 <%@ taglib ...%> 引入标签库 头部命令 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
jsp九大对象

include的区别
hello.jsp文件包含以下代码 <%@include file="footer.jsp" %> footer.jsp的内容会被插入到 hello.jsp 转译 成的hello_jsp.java中,最后只会生成一个hello_jsp.java文件 <jsp:include page="footer.jsp" /> footer.jsp的内容不会被插入到 hello.jsp 转译 成的hello_jsp.java中, 还会有一个footer_jsp.java独立存在。 hello_jsp.java 会在服务端访问footer_jsp.java, 然后把返回的结果,嵌入到响应中。
JSTL
导入
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
常见的jstl语句
<C:if test=""></c:if>
<c:choose>
<c:when test="">//todo </c:when>
<c:otherwise>//todo</c:otherwise>
</c:choose>
<c:forEach items="${list}" var="listItem" varStatus="1" >
<tr>
<td><c:out value="${listItem.col1}" /></td>
<td><c:out value="${listItem.col2}" /></td>
</tr>
</c:forEach>
fmt 格式化
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix=’fmt’ %>
日期
<%
Date now = new Date();
pageContext.setAttribute("now",now);
%>
完整日期: <fmt:formatDate value="${now}" pattern="G yyyy年MM月dd日 E"/><br>
完整时间: <fmt:formatDate value="${now}" pattern="a HH:mm:ss.S z"/><br>
常见格式: <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>
数字格式化
<fmt:formatNumber 表示格式化数字
minFractionDigits 小数点至少要有的位数
maxFractionDigits 小数点最多能有的位数
<fmt:formatNumber type="number" value="${money}" minFractionDigits="2"/>
EL表达式
引入
<%@page 标签里加上isELIgnored="false"
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
取值顺序
pageContext>request>session>application
使用${key} 取值
支持表达式
大小于 equals等,三元运算符
转发与转向的区别
转发(forward
转发通过forword带走request的response,所以能带走对象,可以共享数据,地址栏不会改变,经历了一次请求,在服务端完成的处理,
WEB-INF下的页面不能通过地址栏访问,需要经过转发才能访问
转向(redirect)
转向,请求到这里之后,告诉浏览器需要进行二次请求,所以浏览器地址改变,数据也不能共享了,两次请求的效率也比与转发的一次请求慢低一些.
浏览器地址改变了,就可以跳转到当前web意外的页面