目录
使用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>
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中,从服务器打开到服务器关闭
相同:都是给页面输出
不同: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文件中可以共享同一个变量,但不能定义重名的变量。
语法:
通过代码引入另一个页面,动态引入会生成两个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表达式就是替代以下代码的作用:
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} |