jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp组成</title>
</head>
<body>
<h1>
你好
</h1>
</body>
</html>
指令
作用:用于配置jsp页面,导入资源文件
格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2…%>
分类:
1、page:配置jsp页面的
- contentType:等同于response.setContentType()
1)设置响应体的mine类型以及字符集
2)设置当前页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集) - import:导包
<%@ page import=“java.util.ArrayList” %> - errorPage:当前页面发生异常后,会自动跳转到指定页面
<%@ page contentType=“text/html;charset=UTF-8” errorPage=“500.jsp” language=“java” %> - isErrorPage:标识当前是否是指定的错误页面
- true:是,可以使用内置对象exception
- false:否。默认值。不可以使用内置对象exception
<%@ page contentType=“text/html;charset=UTF-8” isErrorPage=“true” language=“java” %>
2、include:页面包含的,导入页面的资源文件
<%@include file=“top.jsp”%>
3、taglib : 导入资源
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>- prefix:前缀,自定义的
注释
- html注释:
:只能注释html代码片段 - jsp注释:推荐使用
<%-- --%>:可以注释所有
内置对象
-
在jsp页面中不需要创建,直接使用的对象
-
一共有9个:
变量名 真实类型 作用
* pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
* request HttpServletRequest 一次请求访问的多个资源(转发)
* session HttpSession 一次会话的多个请求间
* application ServletContext 所有用户间共享数据
* response HttpServletResponse 响应对象
* page Object 当前页面(Servlet)的对象 this
* out JspWriter 输出对象,数据输出到页面上
* config ServletConfig Servlet的配置对象
* exception Throwable 异常对象 -
pageContext, request, session、application四个作用域区别:
1、pageContext作用域是page,它的有效范围只在当前jsp页面里。 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
2、request作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过 程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
3、session作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,
4、application作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。
MVC开发模式
- M:Model,模型。JavaBean
* 完成具体的业务操作,如:查询数据库,封装对象 - V:View,视图。JSP
* 展示数据 - C:Controller,控制器。Servlet
* 获取用户的输入
* 调用模型
* 将数据交给视图进行展示
EL表达式
概念:Expression Language 表达式语言
作用:替换和简化jsp页面中java代码的编写
语法:${表达式}
注意:
* jsp默认支持el表达式的。如果要忽略el表达式
1. 设置jsp中page指令中:isELIgnored=“true” 忽略当前jsp页面中所有的el表达式
2. ${表达式} :忽略当前这个el表达式
使用:
- 运算:
* 运算符:
1) 算数运算符: + - * /(div) %(mod)
2) 比较运算符: > < >= <= == !=
3) 逻辑运算符: &&(and) ||(or) !(not)
4) 空运算符: empty
* 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
* ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
* ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0 - 获取值
1)el表达式只能从域对象中获取值
2)语法:
(1) 域 名 称 . 键 名 : 从 指 定 域 中 获 取 指 定 键 的 值 ∗ 域 名 称 : 1. p a g e S c o p e − − > p a g e C o n t e x t 2. r e q u e s t S c o p e − − > r e q u e s t 3. s e s s i o n S c o p e − − > s e s s i o n 4. a p p l i c a t i o n S c o p e − − > a p p l i c a t i o n ( S e r v l e t C o n t e x t ) ∗ 举 例 : 在 r e q u e s t 域 中 存 储 了 n a m e = 张 三 ∗ 获 取 : {域名称.键名}:从指定域中获取指定键的值 * 域名称: 1. pageScope --> pageContext 2. requestScope --> request 3. sessionScope --> session 4. applicationScope --> application(ServletContext) * 举例:在request域中存储了name=张三 * 获取: 域名称.键名:从指定域中获取指定键的值∗域名称:1.pageScope−−>pageContext2.requestScope−−>request3.sessionScope−−>session4.applicationScope−−>application(ServletContext)∗举例:在request域中存储了name=张三∗获取:{requestScope.name}
(2) ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
<%--
Created by IntelliJ IDEA.
User: qing
Date: 2021/9/21
Time: 10:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL1中获取域中的数据</title>
</head>
<body>
<%
//在域中存储数据
request.setAttribute("name","张三");
session.setAttribute("name","李四");
session.setAttribute("age","23");
session.setAttribute("str","");
%>
<h3>获取值</h3>
${requestScope.name}
${sessionScope.name}
${sessionScope.age}
${sessionScope.str}
</body>
</html>
3)获取对象、List集合、Map集合的值
(1) 对象:${域名称.键名.属性名}
* 本质上会去调用对象的getter方法
(2)List集合:${域名称.键名[索引]}
(3) Map集合:
* ${域名称.键名.key名称}
* ${域名称.键名["key名称"]}
<%@ page import="domain.User" %><%--
Created by IntelliJ IDEA.
User: qing
Date: 2021/9/21
Time: 11:17
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page import="domain.User" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
User user=new User();
user.setName("张三");
user.setAge(22);
user.setBirthday(new Date());
request.setAttribute("u",user);
List list=new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("user");
request.setAttribute("list",list);
Map map=new HashMap();
map.put("name","李四");
map.put("gender","女");
map.put("user","user");
request.setAttribute("map",map);
%>
<h3>获取对象中的值</h3>
${requestScope.user}
${u.name}
${u.age}
${u.birthday.month}
${u.birStr}
<h3>获取list值</h3>
${list}
${list[0]}
${list[1]}
<h3>获取map值</h3>
${map.gender}<br>
${map["name"]}
</body>
</html>
package domain;
import java.text.SimpleDateFormat;
import java.util.Date;
public class User {
private String name;
private int age;
private Date birthday;
public User() {
}
public User(String name, int age, Date birthday) {
this.name = name;
this.age = age;
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getBirStr(){
if (birthday!=null){
//1、格式化日期对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM--dd HH:mm:ss");
//2、返回字符串即可
return sdf.format(birthday);
}else{
return "";
}
}
}
- 隐式对象:
* el表达式中有11个隐式对象
* pageContext:
* 获取jsp其他八个内置对象
* ${pageContext.request.contextPath}:动态获取虚拟目录