一.JSP基本知识
1.JSP 就是 servlet
2.JSP 在项目中一般充当显示组件,与Servlet配置使用
3.JSP是自动部署的Servlet
二.JSP执行原理——JSP 中的语法
1.JSP中可以写 HTML标签,JS,CSS等,这些信息直接输送到浏览器,
在浏览器端执行服务器不执行任何的 HTML标签,JS,CSS
2.注释
(1)html注释<!-- 注释 -->会原样发送到客户端
(2)JSP注释<%-- 注释 --%>在服务器端被编译掉,不会发送到客户端,用于处理隐私注释。
3.JSP表达式
(1)语法<%= 表达式 %>输出表达式计算结果到页面
(2)翻译语法为:out.print(表达式)
(3)在服务器上执行,将结果发送到客户端
4.JSP脚本
(1)语法规则:<% %>
(2)用于在JSP对应的方法中声明java语句
(3)在服务器上执行
5.JSP声明
(1)用于声明"方法""实例变量"等
(2)解析到Servlet的类中
(3)语法<%! 声明内容 %>
6.JSP指令
(1)语法:<%@ 指令名 属性=值%>
(2)<%@ page %> page指令:用于导包、设置页面属性
(3)<%@ include file="url" %> 包含指令
page.jsp:
index.jsp:
nav.jsp:
footer.jsp:
taglib.jsp:
jstl.jsp:
1.JSP 就是 servlet
2.JSP 在项目中一般充当显示组件,与Servlet配置使用
3.JSP是自动部署的Servlet
二.JSP执行原理——JSP 中的语法
1.JSP中可以写 HTML标签,JS,CSS等,这些信息直接输送到浏览器,
在浏览器端执行服务器不执行任何的 HTML标签,JS,CSS
2.注释
(1)html注释<!-- 注释 -->会原样发送到客户端
(2)JSP注释<%-- 注释 --%>在服务器端被编译掉,不会发送到客户端,用于处理隐私注释。
3.JSP表达式
(1)语法<%= 表达式 %>输出表达式计算结果到页面
(2)翻译语法为:out.print(表达式)
(3)在服务器上执行,将结果发送到客户端
4.JSP脚本
(1)语法规则:<% %>
(2)用于在JSP对应的方法中声明java语句
(3)在服务器上执行
5.JSP声明
(1)用于声明"方法""实例变量"等
(2)解析到Servlet的类中
(3)语法<%! 声明内容 %>
6.JSP指令
(1)语法:<%@ 指令名 属性=值%>
(2)<%@ page %> page指令:用于导包、设置页面属性
(3)<%@ include file="url" %> 包含指令
(4)<%@ taglib %> 标签指令(导入jstl包,1.2版本):*.tld,实现Tag接口的类
<c:forEach var="i" begin="1" end="5" step="1"><p>第${i}次</p></c:forEach>
<c:forEach var="n" items="${names}" varStatus="stat"><p>第${stat.index}个:${n}</p></c:forEach>
<c:forEach items="${users}" var="user"><tr><td>${user.id}</td></tr></c:forEach>
<p>价格:<fmt:formatNumber value="${price}" pattern="RMB###,###.00"/></p>
<p>今天日期:<fmt:formatDate value="${d}" pattern="yyyy-MM-dd HH:mm:ss"/></p>
注意:所有JSP语法都在服务器上运行,而HTML/CSS/JS脚本发送到浏览器,在浏览器端执行
demo.jsp:
<%@page import="java.util.HashMap"%>
<%@ 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>JSP语法</title>
</head>
<body>
<h1>这是一个JSP页面</h1>
<%=this.getClass()%>
<!-- HTML注释测试 -->
<%--JSP注释测试 --%>
<input type="button" οnclick="alert('Hello!')" value="test">
<!-- JSP脚本 -->
<%
java.util.HashMap map = new HashMap();
map.put("title","十八岁给我一个姑娘");
%>
<%--JSP 表达式 --%>
<h2><%="标题"+map.get("title") %></h2>
<p><%=34762%20 %></p>
<h2>JSP 脚本和HTML混合使用</h2>
<ul>
<%for(int i=0;i<10;i++){%>
<li>列表项目 <%=i %></li>
<%} %>
</ul>
<h2>JSP 声明</h2>
<p>用于声明类中的方法,属性,内部类等</p>
<%!
//在Servlet中声明类的属性,方法等
double test(int a,int b){
return Math.sqrt(a*a+b*b);
}
%>
<p>当a=3,b=4时候 c=<%=test(3,4) %></p>
<p>当a=6,b=8时候 c=<%=test(6,8) %></p>
</body>
</html>
page.jsp:
<%@ page
import="java.util.Map,java.util.HashMap"
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>page指令</title>
</head>
<body>
<h1>这是一个JSP</h1>
<%
Map map = new HashMap();
map.put("title", "见或不见");
%>
<h2>又买了一本仓央嘉措的书:
<%=map.get("title") %>
</h2>
</body>
</html>
index.jsp:
<%@ 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>首页</title>
</head>
<body>
<%@ include file="/WEB-INF/nav.jsp" %>
<h1>首页页面</h1>
<p>首页内容,为了演示include指令</p>
<%@ include file="/WEB-INF/footer.jsp" %>
</body>
</html>
nav.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- /WEB-INF/nav.jsp -->
<nav>
首页 产品 我们的优势 关于我们
</nav>
footer.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- /WEB-INF/footer.jsp -->
<footer>
版权所有,盗版必究
</footer>
taglib.jsp:
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>taglib标签指令</title>
</head>
<%
Map map = new HashMap();
//map.put("type","电影控");
request.setAttribute("map",map);
%>
<body>
<h1>标签和表达式</h1>
<p>用户的类型是:<%=map.get("type") %></p>
<p>用户购买商品:<%=map.get("product") %></p>
<h1>JSTL的使用</h1>
<p>用户的类型:<c:out value="${map.type['class']}"/></p>
</body>
</html>
jstl.jsp:
<%@ page import="java.util.*" language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!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>
检查当前JSP对象:<%=this.getClass() %>
<h1>JSTL核心标签案例</h1>
<p>out 标签<c:out value="Hello World!"></c:out></p>
<%
request.setAttribute("tag", "<a>link</a>");
%>
<p>对输出数据进行实体替换:
<c:out value="${tag}" escapeXml="true"></c:out></p>
<h2>set 标签</h2>
<p>set 用于设置值</p>
<c:set var="str" value="Hello World!"></c:set>
<p>str=${str}</p>
<p>可以将一组标签设置为变量</p>
<c:set var="template"><a>demo</a></c:set>
<p><c:out value="${template}" escapeXml="true"/>的显示结果:${template}</p>
<h2>if 流程控制</h2>
<p>处理满足条件时候的输出</p>
<c:set var="name" value="熊大"></c:set>
<c:if test="${name eq '熊大' }">
<p>臭狗熊那里跑!</p>
</c:if>
<h2>多路分支</h2>
<p>choose 选择,otherwise其他,when当...时候</p>
<c:choose>
<c:when test="${name eq '熊大' }"><p>找的就是你!</p></c:when>
<c:when test="${name eq '熊二' }"><p>你家老大呢?</p></c:when>
<c:otherwise><p>没有熊出没</p></c:otherwise>
</c:choose>
<h2>循环控制</h2>
<p>for循环,可以实现两种功能:计次循环,遍历循环</p>
<c:forEach var="i" begin="1" end="5" step="1">
<p>第${i}次</p>
</c:forEach>
<%
List list = new ArrayList();
list.add("Tom");
list.add("Andy");
list.add("Jerry");
request.setAttribute("names",list);
%>
<p>varStatus定义循环状态变量stat</p>
<c:forEach var="n" items="${names}" varStatus="stat">
<p>第${stat.index}个:${n}</p>
</c:forEach>
<h2>导入标签</h2>
<p>用于导入页面组件</p>
<c:import url="/WEB-INF/footer.jsp"></c:import>
<h1>fmt标签,格式化标签</h1>
<h2>格式数字输出</h2>
<%
request.setAttribute("price",3.14159);
%>
<p>价格:
<fmt:formatNumber value="${price}" pattern="RMB###,###.00"/>
</p>
<h2>日期格式化</h2>
<%
request.setAttribute("d",new java.util.Date());
%>
<p>今天日期:
<fmt:formatDate value="${d}" pattern="yyyy-MM-dd HH:mm:ss"/>
</p>
</body>
</html>