一、JSP概述
jsp是服务器页面 运行在服务端。将内容的生成与信息的展示相分离。本质上就是一个Servlet
。产生的java文件和class保留在tomcat的word目录下。
二、JSP脚本
java代码片段
格式:
<%
java代码
%>
2. 输出表达式 相当于相当于out.print();
<%= 输出表达式%>
3. 成员变量的声明
<%! %>
三、JSP指令
新建一个jsp文件。第一行内容 就是jsp的page
指令。
3.1常见的指令
page
该指令的作用:主要声明jsp页面的一些属性。
书写的格式:
<%@ page 属性="值" 属性="值"%>
常见的属性:
- 重要的属性:
- contentType:设置响应流的编码 以及通知浏览器用什么打开 设置文件的mime类型
- pageEncoding:设置页面的编码
- 提示:两者都出现,各自使用各自的编码,若两者出现一个,就使用出现的编码,两者都不出现 使用服务器默认的编码 ISO8859-1缺点不支持中文。
- import: 导入所需要的jar包
- 了解的属性
- language:当前jsp页面可以嵌套的语言。目前只支持Java语言。
- autoFlush: 自动刷新 默认为true
- session="true" jsp页面是否可以使用session这个内置对象
- isELIgnored 是否忽略EL表达式
include
静态包含
- 书写格式
<%@include file="相对路径或者内部路径" %>
taglib
导入标签库
- 书写格式
<%@taglib prefix="前缀名" uri="名称空间" %>
调用标签库方法
<前缀名:方法名></前缀名:方法名>
四、JSP内置的对象(9大内置对象)
内置对象 | 描述 |
---|---|
out | right-aligned |
request | 相当于与Servlet的HttpServletRequest) |
response | 相当于与Servlet的HttpServletResonse) |
session | 相当于与Servlet的HttpSession |
page | |
config | ServletConfig |
application | 相当于与Servlet的ServletContext(全局管理者) |
pageContext | 是当前页面的一个域对象 |
exception | 异常 |
五、JSP的域对象
内置对象 | 作用域 |
---|---|
application | 整个项目 |
session | 一次回话 |
request | 一次请求 |
pageContext | 一个页面中 |
以上三个JSP的域对象很好理解,pageContext
这个是之前没有遇到的域对象。
开发中只用pageContext在jsp中获取项目名
${pageContext.request.contextPath }
/项目名
pageContext的作用
- 可以操作其他的域对象
pageContext.setAttribute("rkey", "rvalue", pageContext.APPLICATION_SCOPE);
pageContext.setAttribute("rkey", "rvalue", pageContext.SESSION_SCOPE);
pageContext.setAttribute("rkey", "rvalue", pageContext.REQUEST_SCOPE);
提示:这种操作比较麻烦,看法中一般不用,直接操作域对象。不通过pageContext获取。
- 获取其他的内置对象
getReauest():获取request内置对象
3.便捷查找
依次从pageContext request session application中查找相应的属性,如果查不到返回一个null。
pageContext.findAttribute(arg0);
六、JSP的动作标签
<jsp:forward page="请求转发"></jsp:forward> 内部路径 相当于Servlet转发
<jsp:include page="动态包含"></jsp:include>
七、EL
JSP的内置表达式语言 从JSP2.0开始支持的。用来替代<%= %>
。
el 11个内置的对象
内置对象 |
---|
pageScope |
requestScope |
sessionScope |
applicationScope |
param |
paramValues |
header |
headerValues |
initParam |
cookie |
pageContext |
除了pageContext
其余获取的全是map集合。
常见用法:
- 获取域中的数据
- 获取简单的数据
${applicationScope| sessionScope| requestScope.属性名 } 这种写法比较麻烦
简单写法
便捷方式
${属性名 }
底层调用的是 pageContext的 findAttribute(String key);
- 获取复杂的数据
- 数组
- list
- map
下面是具体的写法示例;
<body>
<%
/*域中数组数据 */
String[] arr = new String[]{"jake", "rose", "jim"};
session.setAttribute("names", arr);
/*域中list数据*/
List list = new ArrayList();
list.add("Jake");
list.add("rose");
list.add("jim");
request.setAttribute("list", list);
/*域中map数据*/
Map user = new HashMap();
user.put("name", "Jake");
user.put("age", 12);
application.setAttribute("user", user);
pageContext.setAttribute("pkey", "pvalue");
%>
<hr>
获取session域中的数组数据:
老的方式:<br>
${sessionScope.names[1] }<br>
便捷方式:<br>
${names[0] }
<hr>
获取session域中的数组数据:<br>
老的方式:<br>
${requestScope.list[1] }<br>
便捷方式:<br>
${list[0]}
<hr>
获取session域中的Map数据:<br>
老的方式:<br>
${applicationScope.user.name }<br>
便捷方式:<br>
${user.name}
</body>
Javabean导航
javaBean规范:
1.必须是以个公共具体的类 public class
2.提供私有的字段
3.提供公共访问的字段的setter getter方法
4.提供一个无参的构造器
八、jstl
jsp标准的标签库语言 就是替代java脚本的
常用的if
、for
。
第一步就是导入jar包
- jstl.jar
-
standard.jar
第二步在jsp文件导入库
Snip20171112_10.png
jstl的核心类库:
- core: 核心类库
- fmt: 格式化| 国际化
- sql:过时了
- 函数库:很少使用
c:if
<!-- 最常见的写法 -->
<c:if test="${3>4 }">
3大于4
</c:if>
c:for
下面有list、map、各种用法示例:
<body>
<%
List i = new ArrayList();
i.add("11");
i.add("22");
i.add("33");
i.add("44");
// 往request域中放入一个list
request.setAttribute("list", i);
Set s = new HashSet();
s.add("rose");
s.add("jake");
request.setAttribute("set", s);
Map m = new HashMap();
m.put("username", "tom");
m.put("age", "18");
// 往域中放入一个map
request.setAttribute("map", m);
%>
<c:forEach items="${list }" var="n">
${n }
</c:forEach>
<c:forEach items="${set }" var="n" varStatus="vs">
${n } ----索引i=${vs.count }<br>
</c:forEach>
<c:forEach items="${map }" var="en">
${en.key }----${en.value }<br>
</c:forEach>
</body>
网友评论