# jsp元素 #
## 脚本元素 ##
1.jsp声明
可以用来声明变量或者方法
语法:<%! 声明1;声明2%>
<%! int flag=1;
int flag1=2;
public int getFlag(){
return 2;
}
%>
2.表达式
可以用来访问Java变量或者表达式
语法:<%=表达式 %>
<%= flag %>
<%= getFlag() %>
3.脚本片段
插入任意有效的Java程序片段
语法:<% %>
<% user[] arr=new user[6];
for(int i=0;i<5;i++){
user u=new user();
u.setUsername("u_"+i);
arr[i]=u;
}
request.setAttribute("arr",arr);
%>
补充:有时候需要导入包
语法:<%@ page import="url">
4.注释
jsp注释:<%-- --%>
HTML注释:<!-- -->
## 指令元素 ##
1.page指令
作用于整个页面,定义了与JSP页面相关的属性。
语法:<%@ page 属性1="" 属性2=""%>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
2.include指令
经常用于包含页面底部或者首部等不经常变化的部分。
发生在jsp文件被转换成servlet的时候引入文件。
用来包含其它文件,可以是jsp,html或者文本文件。
语法:<%@ include file="url"%>
<%@ include file="second.jsp" %>
3.taglib指令
定义一个标签库以及其自定义标签的前缀。指定JSP页面所使用的标签库,通过该指令可以在JSP页面中使用标签库中的标签
<!-- core:核心库 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- fmt:格式化库 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
补充:需要导入两个架包:jstl-1.2.jar和standard-1.1.2.jar
## 动作元素 ##
1.<jsp:include>
用来包含静态和动态的文件。把指定文件插入正在生成的页面。
发生在页面被请求的时候。
属性:
Page 包含的文件路径
Flush 定义在包含资源前是否刷新缓存区
2.<jsp:userBean>
具体看示例:
<!-- useBean用法 -->
<jsp:useBean id="user" class="bean.user"></jsp:useBean>
<!-- 设置 -->
<jsp:setProperty property="age" name="user" value="33"/>
<jsp:setProperty property="username" name="user" value="李四"/>
<jsp:setProperty property="gender" name="user" value="男"/>
<!-- 输出 -->
name:<jsp:getProperty property="username" name="user"/>
age:<jsp:getProperty property="age" name="user"/>
gender:<jsp:getProperty property="gender" name="user"/>
补充:property属性的值,与你的Javabean中一致。
3.<jsp:forward>
把请求转到另一个页面。
<jsp:param> 它用来作为forward和include标签传递参数
first.jsp:
<jsp:forward page="third.jsp">
<jsp:param value="29" name="age"/>
</jsp:forward>
third.jsp:
<%= request.getParameter("age") %>
# 内置对象 #
request
HttpServletRequest 代表客户端的请求信息,主要用于接收通过HTTP协议传送到服务器的数据。(包括头信息,系统信息,请求方式以及请求参数等)
request对象的作用域为一次请求
response
HttpServletResponse 代表对客户端的响应,将JSP容器处理过的对象传回到客户端。
Reponse的作用域是JSP
out
Javax.servlet.jsp.jspwriteout
用于在web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。数据输出完毕以后,要及时关闭输出流。
out对象是一个 输出流,用来想客户端输出数据。
pagecontext
Javax.servlet.jsp.PageContext
对象的作用是取得任何范围的参数,可以访问page、request、session、application范围的变量。
pageContext对象的创建和初始化都是由容器来完成的。
session
Javax.servlet.http.HttpSession
在一个jsp页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器通过session知道这个客户。
Session对象内部里使用Map类来保存数据。
application
Javax.servlet.ServletContextApplication
将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。
config
Javax.servlet.ServletConfigconfig
取得了服务器的配置信息。主要用于获取servlet的初始化参数信息。
Cookie
Web服务器保存在用户硬盘上的一段文本。Cookie允许一个web站点在用户电脑上保存信息并且随后再取回。
exception
Java.lang.ThrowableException 用于显示异常信息。
补充:exception使用
用errorPage和isErrorPage设置
first.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="error.jsp" isELIgnored="false"%>
error.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%>
# EL表达式 #
1.EL表达式默认开启,也可以使用isELIgnored设置,true表示关闭,默认是false
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="error.jsp" isELIgnored="true"%>
2.EL的内置对象
一共11个内置对象,不一一列举。
3.EL表达式读取四大域
${xxxx},全域查找名为xxx属性,查找顺序是page>request>session>application,如果不存在,输出空字符串
${pageScope.xxx}
${requestScope.xxx}
${sessionScope.xxx}
${applicationScope.xxxx}
4.EL表达式读取javabean
看示例:
${user.username }
${work.job }
5.EL表达式读取数组和集合(list,map)
1)访问数组:{数组名[index]}
2)访问list: {list名[index]}
3)访问map:{map对象.key}
示例:
<!--数组-->
<% user[] arr=new user[6];
for(int i=0;i<5;i++){
user u=new user();
u.setUsername("u_"+i);
arr[i]=u;
}
request.setAttribute("arr",arr);
%>
<!--list-->
<% List<user> list=new ArrayList<user>();
user user1=new user();
user1.setAge(15);
user1.setGender("男");
list.add(user1);
request.setAttribute("list",list);
%>
<!-- 数组和list -->
${arr[1].username }
${list[0].age }
${list[0].gender }
6.其他EL表达式运算
<!-- empty和条件运算 -->
empty运算:${empty info }
条件运算操作:${flag>flag1?"大于":"小于" }
# JSTL #
JSTL四大标签库:
1.core:核心库【重点】
2.fmt:格式化库
3.sql:数据库标签库,过时
4.xml:xml标签库,过时
## core标签库(c库) ##
1.out和set
<!-- out输出 -->
<c:out value="username"/>
<!-- set输入参数 -->
<c:set var="code" value="xxx" scope="application"></c:set>
<c:set var="ccc" value="lll" scope="session"></c:set>
<!-- 根据var属性的值输出-->
${code }
${ccc }
2.url
value:指定一个路径,它会在路径前面自动加上项目名
<c:url value="/index.jsp"
子标签:<c:param> 用来给url后面添加参数
name:自动在url中添加参数名
value:自动在url中添加参数值
<c:url>
<c:param name="username" value="张山"></c:param>
</c:url>
var:指定变量名,一旦添加了就不会把url不会输出到页面,而是把生成的url保存到域中。
scope:它与var一起使用,用来保存url
补充:我也不会ヽ(ー_ー )ノ
3.if
对应Java中的if语句
<c:if test="布尔类型"></c:if>
if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行
choose:对应Java中的if/else if/else 。
when标签的test为true时,会执行这个when的内容,当所有when标签的test都为false时,才会执行otherwise标签的内容
4.forEach
1.用来循环遍历数组,集合。
2.可以用来计算方法方式来循环。
计数方式:
<c:forEach var="i" begin="1" end="10">${i}</c:forEach>
属性:
var:循环变量
begin:设置循环变量从几开始
end:设置循环变量到几结束
step:设置步长
用来输出数组,集合:
<c:forEach items="${strs}" var="str">${str}<br/><c:forEach>
属性:
items:指定要循环的对象,它可以是一个数组或者一个集合
var:把数组和集合中的每个元素赋值给var指定的变量
5.其他等等
# ftm标签库 #
直接上示例:
<!-- 格式化时间 -->
<c:set var="now" value="<%=new java.util.Date() %>"/>
时间:<fmt:formatDate value="${now }" pattern="yyyy-MM-dd hh:mm:ss"/><br>
时间:<fmt:formatDate value="${now }" type="time"/><hr>
<!-- 格式化数字 -->
<c:set var="n" value="<%=flag%>"></c:set>
<c:set var="nu" value="<%=num %>"></c:set>
<c:set var="nu1" value="<%=num1 %>"></c:set>
<!-- 四舍五入,不足补位 -->
<fmt:formatNumber value="${n }" pattern="0.00"></fmt:formatNumber>
<!-- 四舍五入,不足不补位 -->
<fmt:formatNumber value="${nu }" pattern="#.##"></fmt:formatNumber>
<fmt:formatNumber value="${nu1 }" pattern="#.##"></fmt:formatNumber>