一.页面元素
页面元素
1.静态内容,html/css/javascript等内容;
2.指令,<%@..........%> <%@ page import="java.util.*"%>
3.表达式,<%=...........%>,用于输出一段html
4.Scriptlet,<%...........%>,可以写任何java代码
5.声明,<%!.............%>,可以声明任何字段或者方法,但是不建议这么做
6.动作,<jsp:include page="Filename">在jsp页面中包含另一个页面
7.注释,<%-- ........--%>
R8SGVBZ1I@6XJXPX)_8_Q11.png
<%=%>和 <%out.println()%>
<%="hero jsp"%>(不需要分号结尾)
相当于<%out.println("hello jsp");%>(和java一样;结尾)
out是jsp隐式对象可以直接使用
for循环
AK}YOJ)}O6H5(K(}`C7%A44.png二.include包含
两种方式
指令include <%@include file="footer.jsp"%>
内容被插入到包含页面,转译只生成包含页面对应的一个servlet
不存在传参问题
动作include <jsp:include page="footer.jsp">
footer内容不会插入到包含页面,转译后footer_jsp.java独立存在。
hello_jsp.java会在服务器端访问footer_jsp.java然后把返回的结果嵌入到响应中
在hello.jsp中通过param传参
<jsp:include page="footer.jsp">
<jsp:param name="year" value="2017" />
</jsp:include>
在footer.jsp中通过<%=request.getParameter("year")%>取出参数
三.跳转(服务器端和客户端跳转)
服务器端跳转
request.getRequestDispatcher("hello.jsp").forward(request, response);
或<jsp:forward page="hello.jsp"/>
客户端跳转
response.sendRedirect("hello.jsp");
四.cookie
cookie是一种浏览器和服务器交互数据的方式由服务端创建后发送给浏览器保存在用户本地,下一次访问网站的时候就会把该cookie发送给服务器
setcookie.jsp(web目录下)
Cookie c = new Cookie("name","Gareen");
//创建一个cookie
c.setMaxAge(24*60*60);
//表示cookie存活的时间
c.setPath("127.0.0.1");
//Path表示服务器的主机名,只有浏览器通过这个主机名访问服务器的时候才会提交这个cookie到服务端
response.addCookie(c);
//通过response把这个cookie保存在浏览器端
getCookie.jsp
Cookie[] cookies = request.getCookies();
if(null!=cookies)
for(int d=0;d<=cookies.length-1;d++){
out.print(cookies[d].getName()+":"+cookies[d].getValue()+"<br>");
}
cookie.png
五.session
setSession.jsp
session.setAttribute("name", "teemo");
getSession.jsp
String name = (String)session.getAttribute("name");
如果浏览器把cookie功能关闭,那么服务端就无法获取jsessionid,每一次访问,都会生成一个新的session对象。
为了解决这个问题,可以使用
response.encodeURL("getSession.jsp"))
response.encodeURL方法会把getSession.jsp这个url转换为
getSession.jsp;jsessionid=22424AEA86ADBE89F335EEB649D997A8
通过这个方式,提交jsessionid到服务器。 服务器根据这个jsessionid匹配到对应的session. 与session相关的功能,就可以正常工作了。
可以通过 d:/tomcat/conf/web.xml 中的session-config 配置进行调整,默认是30分钟
六.作用域
pageContext当前页面
requestContext一次请求
sessionContext当前会话
applicationContext全局,所有用户共享
。。。。。。。。。。。。。。。。。
七.隐式对象
不需要显示定义直接就可以使用的对象
request,response,out
pageContext,session,application
page,config,exception
八.JSTL(JSP Standard Tag Library标准标签库)
允许开发人员可以像使用HTML标签那样在JSP中开发Java功能,JSTL库有core,fmt等
jstl.jar和standard.jar放在web/WEB-INF/lib下
set/out/remove
在页面中使用JSTL需要在jsp中 通过指令进行设置
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
prefix="c" 表示后续的标签使用都会以<c: 开头
<c:set var="name" value="${'gareen'}" scope="request" />
在作用域request中设置name,相当于
<%request.setAttribute("name","gareen")%>
<c:out value="${name}" />
相当于 <%=request.getAttribute("name")%>
<c:remove var="name" scope="request" />
在作用域request中删掉name,相当于
<%request.removeAttribute("name")%>
作用域可以是pageContext, request, session, application
if/else
<c:if test="${hp<5}">
//JSTL通过<c:if test=""> 进行条件判断
</c:if >
<c:if test="$!(hp<5)">
//JSTP没有<c:else,所以常用的办法是在<c:if的条件里取反
</c:if>
<c:if test="${empty weapon}">
//empty可以判断对象是否为null,字符串长度是否为0,集合长度是否为0
</c:if>
choose
虽然JSTL没有提供else标签,但是提供了一个else功能的标签
<c:choose>
<c:when test="${hp<5}">
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
forEach
<c:forEach items="${heros}" var="hero" varStatus="st" >
<tr>
<td><c:out value="${st.count}" /></td>
<td><c:out value="${hero}" /></td>
</tr>
</c:forEach>
items="${heros}" 表示遍历的集合
var="hero" 表示把每一个集合中的元素放在hero上
varStatus="st" 表示遍历的状态
<c:forTokens
专门用于字符串拆分,并且可以指定多个分隔符
<c:set var="heros" value="塔姆,艾克;巴德|雷克赛!卡莉丝塔" />
<c:forTokens items="${heros}" delims=":;|!" var="hero">
<c:out value="${hero}" /> <br />
</c:forTokens>
fmt:formatNumber格式化数字
fmt标签常用来进行格式化,
使用之前要加上<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix='fmt' %>
最少两个小数点:
<fmt:formatNumber type="number" value="${money}" minFractionDigits="2"/>
最多两个小数点:
<fmt:formatNumber type="number" value="${pi}" maxFractionDigits="2" />
fmt:formatDate 格式化日期
<fmt:formatDate value="${now}" pattern="G yyyy年MM月dd日 E"/>
<fmt:formatDate value="${now}" pattern="a HH:mm:ss.S z"/>
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>
格式化时间.png
fn:
使用之前加入指令:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
${fn:substring(name, 0, 5)}
九.EL表达式语言
在<%@page 标签里加上isELIgnored="false"
EL表达式可以从pageContext>request>session>application四个作用域取值(优先级从前到后)${name}
JavaBean
一.JavaBean标准
1.提供无参public构造方法
2.每个属性都有public的getter和setter
3.如果属性是boolean,那么就对应is和setter方法
二.获取JavaBean的属性,通过.符号操作就可以了
${hero.name}自动调用getName方法
如果属性是boolean类型自动调用isXXX方法
网友评论