# 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>