目录
简介
作用
创建
结构
常用脚本
声名脚本
表达式脚本
代码脚本
注释
九大内置对象
四大域对象
out与response.getWriter
静态引入
动态引入
EL表达式
作用
语法
取值顺序
获取指定参数
输出指定对象的数据
运算符
算数运算符
关系比较
逻辑运算符
判空
隐式对象
使用Servlet返回前端页面代码编写较为复杂,并且维护与修改成本较高
简介
JSP (Java Server Pages) 基于Servlet技术的、运行在服务器之上、支持Java语言的动态网页技术。实际上JSP就是一个Servlet,当客户端请求一个JSP文件时,JSP文件会在服务器中转换成Servlet来执行。
作用
替换显示页面部分的Servlet
创建
在web文件夹下创建
结构
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
属性,page指令:
contentType:当前响应数据类型与编码格式
language:翻译后支持的语言,目前只支持Java
pageEncoding:设置当前编码格式
import:导包,编译器可以自动导
autoFlush:输出流缓冲区,满了是否自动刷新,默认是true,如果改为false,当缓冲区满了以后会报错
buffer:缓冲区大小,默认8kb
errorPage:当前页面出现异常时跳转的页面
isErrorPage:当前页面是否为错误页面,默认值为false,如果为true表示捕获异常信息
session:当前页面是否会创建session对象,默认是true
extends:指定父类
常用脚本
声名脚本
作用:声名
语法:<%! 声名的东西 %>
</head>
<body>
<%!
private int num;
private List<String> str;
static {
}
%>
</body>
可以声名很多东西:基本数据,引用数据,静态代码块,方法,内部类
表达式脚本
作用:在jsp页面输出
语法:<%= 写输出的内容 %>
<%= "6666"%>
地址
代码脚本
作用:在jsp页面写java代码
语法:<% 写代码 %>
注释
语法<%-- 注释内容 -->
九大内置对象
jsp中的内置对象,是指Tomcat在翻译jsp页面成为Servlet源代码后,提供的九个对象
request:请求对象
response:响应对象
pageContext:jsp的上下文对象,可以获取当前JSP的任何信息
session:会话对象
application:ServletContext对象
config:ServletConfig对象
out:输出流对象
page:指向当前jsp的对象,相当于this
exception:异常对象,注意需要在page指令中设置isErrorPage="true",
四大域对象
九大内置对象中用来存储数据的四个对象
域对象:可以存储数据的对象
pageContext:当前jsp页面中有效
request:一次请求中使用
session:一次会话中使用,从浏览器第一次访问该项目到浏览器关闭
application:当前Tomcat中,从服务器打开到服务器关闭
out与response.getWriter
相同:都是给页面输出
不同:response先于out执行
原因:out输出时会先执行flush方法将输出的内容追加到response尾部导致的
response中表示响应,经常用于设置返回给客户端的内容,out也是给用户做输出使用的。
当jsp页面中所有代码执行完成后会执行out.flush操作,会把out缓冲区中的数据追加写入到response缓冲区末尾,会执行response的刷新操作,把全部数据写给客户端
write:输出整型时会将数字转为字符输出
out.write();
print:先将类型转为字符串,再调用write
out.print()
在jsp页面中统一使用out.print()输出,既可以防止数据输出顺序错乱又可以保证数字不 会转换为字符输出。
静态引入
include指令
语法:<%@ include file = " 引入的jsp文件 "%>
静态引入两个jsp文件编译成一个java文件,除了page指令,两个jsp文件中可以共享同一个变量,但不能定义重名的变量。
动态引入
语法:<jsp:include page = " 引入的jsp页面">
通过代码引入另一个页面,动态引入会生成两个java文件,两个jsp文件中不可以共享同一个变量,可以定义重名的变量。
转发
<jsp:forward page="/b.jsp">
</jsp:forward>
带值里面写
试一试:
打印九九乘法表:
<%= "九九乘法表"%>
<%
for (int i= 0;i<10;i++){
for (int j= 1;j<i+1;j++){
%>
<%
out.print( i+"*"+j+"="+i*j+" " );
out.flush();
}
%>
<br>
<%
}
%>
----------------------------------------------------------------------------------
<%
for (int i= 0;i<10;i++){
for (int j= 1;j<i+1;j++){
String str = i+"*"+j+"="+i*j;
%>
<font> <%= str %> </font>  
<%
}
%>
<br>
<%
}
%>
打印多个用户信息:
<%
ArrayList<Stu> list = new ArrayList<>();
for (int i = 0 ;i<3 ;i++){
Stu stu = new Stu("贺神"+i,"男",1+i);
list.add(stu);
}
System.out.println(list);
%>
<table border="1" cellspacing="1" align="center">
<tr>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
</tr>
<tr>
<td><%= list.get(0).getName()%></td>
<td><%= list.get(0).getSex()%></td>
<td><%= list.get(0).getAge()%></td>
</tr>
<tr>
<td><%= list.get(1).getName()%></td>
<td><%= list.get(1).getSex()%></td>
<td><%= list.get(1).getAge()%></td>
</tr>
<tr>
<td><%= list.get(2).getName()%></td>
<td><%= list.get(2).getSex()%></td>
<td><%= list.get(2).getAge()%></td>
</tr>
</table>
EL表达式
作用
简化四大作用域获取数据的书写
EL表达式就是替代以下代码的作用:
pageContext.getAttribute("key"); Object
request.getAttribute("key");
session.getAttribute("key");
application.getAttribute("key");
语法
${key}
例:
<%
request.setAttribute("name","凝光");
%>
<%= request.getAttribute("name")%>//使用Java代码获取并输出
${name};//直接搞
取值顺序
从小到大
pageContext.setAttribute(String,Object); 同一个页面
request.setAttribute(String,Object); 一个请求
session.setAttribute(String,Object); 一个会话
application.setAttribute(String,Object); 服务器中
获取指定参数
例:获取application的
${applicationScope.name}
pageScope对应pageContext
requestScope对应request
sessionScope对应session
applicationScope对应application
输出指定对象的数据
简单类型
<%
request.setAttribute("key",666);
%>
${key}
数组
String[] arr = {"a","b","c"};
request.setAttribute("key",arr);
${key[1]}
对象
request.setAttribute("key",Stu);
${key.name}
集合
List<Stu> list = new ArrayList<>();
list.add(Stu1);
list.add(Stu2);
list.add(Stu3);
request.setAttribute("key",list);
${key[1].name}
字典
Map<String,Stu> map = new HashMap<>();
map.put("z",Stu1);
map.put("l",Stu2);
map.put("x",Stu3);
request.setAttribute("key",map);
${key.z.name}
${key['z'].name}
如果有特殊符号,可以用[' '],
一般默认打印,
运算符
算数运算符
+ 例:${key1+key2}
-
*
/或div
%或mod
关系比较
==或eq 返回值为true/false
!=或ne
> 或gt
<或lt
>=或ge
<=或le
逻辑运算符
&& and
|| or
! not
判空
empty ${empty key}
隐式对象
param | 获取Rquest对象的参数,返回String, ${param.key} 等价于 request.getParameter("key") |
paramValues | 获取Rquest对象传递的所有的参数值,返回字符串集合 ${paramValues} 等价于request.getParameterMap() |
header | 获取HTTP请求头 ${header.contentPosition} |
headerValues | 获取HTTP请求头中所有的值 |
initParam | 获取上下文初始化参数(在web.xml中配置的context-param中的数据) |
pageContext | 一般用于获取 协议 服务器端口 获取工程路径(重点) 获取请求方式 等 |
cookie | 获取cookie中的值,${cookie.username} |