本人在线大三🐕一枚,虽然说jsp已经不知道落后了好多年了,但是我们课程还是要学这个,也布置了很多作业。也有很多同学在问jsp怎么用,那我还是觉得整理一下我的写的笔记出来吧
1. jsp(java server pages)
1.1 jsp的概念
java server pages(java服务器页面),本质上就是一个servlet,运行服务器端.
1.2 jsp的作用
将内容的生成和信息的展示分离
1.3 jsp中的组成部分
html+java+jsp特有的内容
1.4 jsp特有内容
1.4.1 jsp脚本
<%...%> //java代码块,生成在service方法中
<%=...%> //输出表达式,生成在service方法中,不能以分号结尾
<%!...%> //声明成员变量或者成员方法,不在service方法中
1.4.2 jsp的注释
-
html的注释:即会出现在html中,也会出现在java文档中
<!-- -->
-
java的注释:不出现在html中,会出现在java文件中
// /* */
-
jsp的注释:既不出现在html中,也不会出现在java文档中
<%-- --%>
1.4.3 jsp的指令:声明当前页面的属性和行为
-
格式:
<!-- 指令可以出现多次,指令的位置随意 一般放在jsp最上面 --> <%@ %>
-
分类
- page:声明当前页面的一些属性和行为
<%@ page import:声明当前页面所需要的jar包%> pageEncoding:声明当前的页面编码 contentType:设置当前文件mime类型,指定响应流的编码,通知浏览器用什么编码打开
区别与联系:
若两者都出现的时候,各自使用各自的编码
若两者都不出现的时候,使用默认的编码(iso-8859-1)
若两者只出现一个的时候,俩者使用出现的指定的编码- include:包含(静态包含)
<!-- 将被包含资源的所有内容复制过来,一并编译运行 --> <%@include file="/include_static/i1.jsp" %>
- taglib:导入标签库
<!-- 使用jstl表达式引入的标签 --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1.4.4 jsp内置对象
-
request HttpServletRequest
-
response HttpServletResponse
-
out JspWriter
-
session HttpSession
-
exception Throwable
-
page Servlet(this):表示当前页面
-
config ServletConfig
-
application ServletContext:上下文对象
-
pageContext (了解) PageContext
//可操作其他三个域对象:request、session、application <% pageConetxt.setAttribute("skey","svalue",pageContext.SESSION_SCOPE) %> //PAGE_SCOPE REQUEST_SCOPE SESSION_SCOPE APPLICATION_SCOPE
1.4.5 jsp的四个域对象
- pageContext:当前页面
- request:当前请求
- session:当前会话
- application:当前项目
1.4.5 jsp的动态标签
格式:
<jsp:动作标签 属性="值">
<!-- 在jsp页面中完成请求转发 -->
<jsp:forword page="/../.jsp">
<!-- 动态包含,将被包含资源的运行结果包含进来 -->
<jsp:include page="/../.jsp">
2. el表达式
2.1 概念
它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简单
2.2 作用
替换<%=…%>
2.3 语法
${表达式}
2.4 功能
2.4.1 获取域中的数据
//获取简单的数据
${pageScope|requestScope|sessionScope|applicationScope.属性名}
可简写为${属性名} //从小往大查找
//获取复杂的数据
${数组属性名[index]} //获取数组中的值
${list属性名[index]} //获取域中list中的值
${map对象.键} //获取域中map中的值
${javabean对象.bean属性} //获取javabean中的数据
//注意:若域中没有此属性,返回空串;若域中有特殊字符串
${xxxScope["属性名"]}
2.4.2 执行运算
-
算数运算:只能计算数字或者是字符串形式数字
-
特殊运算:
empty:是否为null或者空字符串
三元运算
-
关系运算、逻辑运算与java类似
2.4.3 el表达式中的内置对象
-
pageScope、requestScope、sessionScope、aplplicationScope
-
param:表示一个保存了所有请求参数的Map对象
${param.username} //获取前台传来的username数据,多值只获得第一个值
-
paramValues:表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
${paramValues.username[0]} //获取username中的第一个值
-
header:表示一个保存了所有http请求头字段的Map对象
${header["user-agent"]} //获取请求头里的版本内核
-
headerValues:表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]
${headerValues["user-agent"][0]}
-
initParam:表示一个保存了所有web应用初始化参数的map对象
${initParam.key}
-
表示一个保存了所有cookie的Map对象
${cookie.JSESSIONID.value} //获取session的值 //cookie=JSESSIONID=1AE5D6552E5D86338525CB66C64AF0CC
-
pageContext:对应于JSP页面中的pageContext对象
${pageContext.request.ContextPath} //获取请求的动态路径
3. JSTL标签
3.1 概念
是一个不断完善的开放源代码的JSP标签库,是由apache来维护的。
3.2 作用
减少页面JAVA代码量 让结构更加清晰
3.3 使用步骤
3.3.1 在页面上导入标签库
使用前需要导入jstl.jar 和 standerd.jar包
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.3.2 if的使用
<C:if test="条件(el表达式)" var="给结果定义一个名字" scope="将结果存在哪个域中">
<!-- 示例 -->
<c:if test="${i>4}" var="flag" scope="request">
i大于4<br>
${flag}
</c:if>
3.3.3 foreach的简单使用
循环遍历一个数组
<c:forEach begin="开始的值" end="结束的值" step="步长" var="给当前的这个值起个名称">
${变量名称 }
</c:forEach>
<!-- 示例 -->
<c:forEach begin="1" end="10" step="1" var="i">
${i}
</c:forEach>
3.3.4 foreach的复杂使用
循环遍历一个对象数组
<c:forEach items="需要遍历的元素" var="每一个起个别名" [varStatus="count"]>
//循环后的数据
</c:forEach>
<!--
varStatus:记录循环的状态
取值:count:计数
index:索引
//示例
list是一个ArrayList -->
<c:forEach items="${requestScope.list}" var="str">
${str}<br>
</c:forEach>
<!-- map是一个HashMap -->
<c:forEach items="${map}" var="value">
key:${value.key}
value:${value.value}<br>
</c:forEach>