求职复习系列13 jsp

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九大对象

求职复习系列13jsp

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意外的页面