JSP 主要介绍
JSP : Java Server Page,是web服务端的动态资源 相比html而言,html只为用户提供静态资源数据,而JSP可以在页面中嵌套java 代码,为用户提供动态数据 相比servlet,servlet很难对数据进行排版,而jsp代码可以用java产生动态数据的同时,对数据进行排版 在长期开发中,人们逐渐把servlet当作后台,把jsp当作页面模板(其实二者都是既可写前端,也可写后端) jsp本质是一个servlet,jsp引擎会将jsp翻译成servlet,放入jvm里,生成class,存入tomcat–》work目录。 JSP在第一次使用时会被编译成为HttpJspPage类,该类是一个HttpServlet的子类
配置idea
file -->settings
JSP的指令标签
需求:将一些重复代码包含起来使用,(某些页面可能一些区域一直不变,变化的就是个局部区域) 方法:将工具栏,头部信息,尾部信息等分成独立的文件,使用时候直接导入。 JSP中想实现上述包含的操作,可以 静态包含,动态包含 ,静态使用include指令,动态使用include动态标签。
include静态包含
<%@include file="test-head.jsp"%>
静态包含 耦合度高,会生成一个源码文件,例如a页面包含b,c页面,会将b,c页面的内容编译整合进入a页面编译的内容 所以几个页面中不可以有同名变量 相当于直接复制内容,只会生成一个源码文件,不能出现同名变量,耦合度高 运行效率高一点
动态包含
<jsp:include page="test-head.jsp"></jsp:include>
动态包含 3个页面会生成3ge文件,相当于方法的调用,所以会出现多个源码文件,可以出现同名变量,耦合度低,效率高
JSP的四大域对象
有四种属性的保存范围 page范围:pageContext :只在一个页面中保存属性,跳转之后无效 request:只在一次请求中保存,服务器跳转后依然有效 session:在一次会话中有效,无论何种跳转都可以用(不换浏览器有效,对于服务器而言,每一个客户端都是一个session) application:在整个服务器 保存。(所有用户(session)都可以直接访问获得)
EL表达式(重点)
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
Created by IntelliJ IDEA.
User: yun
Date: 2021/9/14
Time: 19:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
pageContext.setAttribute("name","zhang");
request.setAttribute("name","zhang");
session.setAttribute("name","zhang");
application.setAttribute("name","zhang");
%>
<h3>获取数据</h3>
${pageScope.name}
<%
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbbb");
list.add("cccc");
request.setAttribute("list",list);
%>
<h3>获取list指定下标值</h3>
${list[0]}<br>
获取list的长度${list.size()}<br>
<h3>获取map</h3>
<%
Map map = new HashMap();
map.put("aaa","111");
map.put("bb","22");
map.put("ccc","333");
request.setAttribute("map",map);
%>
<h3>获取map</h3>
获取map中指定key的值,${map.aaa} ,${map["aaa"]}
</body>
</html>
获取javaBean对象
需要javabean类提供对应的属性的get,set方法
<%
User user = new User();
user.setUserid(123);
user.setPassword("123");
user.setName("tan");
request.setAttribute("user",user);
%>
获取对象:${user}
获取密码,名字:${user.name},${user.userid}
package bean ;
public class User {
private Integer userid;
private String name;
private String password;
public Integer getUserid ( ) {
return userid;
}
public String getName ( ) {
return name;
}
public String getPassword ( ) {
return password;
}
public void setUserid ( Integer userid) {
this . userid = userid;
}
public void setName ( String name) {
this . name = name;
}
public void setPassword ( String password) {
this . password = password;
}
}
empty 判断是否为空
<%
String s1 = "hello";
String s2 = "";
String s3 = null;
request.setAttribute("s1",s1);
request.setAttribute("s2",s2);
request.setAttribute("s3",s3);
// list
List <String> list1 = null;
List<String >list2 = new ArrayList<>();
List <String>list3 = new ArrayList<>();
list3.add("aaa");
request.setAttribute("list1",list1);
request.setAttribute("list2",list2);
request.setAttribute("list3",list3);
//javabean
User user1 = null;
User user2 = new User();
User user3 = new User();
user3.setName("zhang");
request.setAttribute("user1",user1);
request.setAttribute("user2",user2);
request.setAttribute("user3",user3);
%>
<h3>empty</h3>
字符串判断 --${empty s1} ${empty s2} ${empty s3}
list判断 --${empty list1} ${empty list2} ${empty list3}<br>
javabean判断 --${empty user1} ${empty user2} ${empty user3}
对于javabean对象的判断, new 了对象后,就已经在内存中有地址了,不为空
El运算
将运算符写到 ${a 运算符 b} 等值判断 a==b a eq d
JSTL介绍