jsp&MVC&EL表达式

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:前缀,自定义的

注释

  1. html注释:
    :只能注释html代码片段
  2. 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开发模式

  1. M:Model,模型。JavaBean
    * 完成具体的业务操作,如:查询数据库,封装对象
  2. V:View,视图。JSP
    * 展示数据
  3. C:Controller,控制器。Servlet
    * 获取用户的输入
    * 调用模型
    * 将数据交给视图进行展示

EL表达式

概念:Expression Language 表达式语言
作用:替换和简化jsp页面中java代码的编写
语法:${表达式}
注意
* jsp默认支持el表达式的。如果要忽略el表达式
1. 设置jsp中page指令中:isELIgnored=“true” 忽略当前jsp页面中所有的el表达式
2. ${表达式} :忽略当前这个el表达式
使用:

  1. 运算:
    * 运算符:
    1) 算数运算符: + - * /(div) %(mod)
    2) 比较运算符: > < >= <= == !=
    3) 逻辑运算符: &&(and) ||(or) !(not)
    4) 空运算符: empty
    * 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
    * ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
    * ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
  2. 获取值
    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 "";
        }
    }
}

  1. 隐式对象:
    * el表达式中有11个隐式对象
    * pageContext:
    * 获取jsp其他八个内置对象
    * ${pageContext.request.contextPath}:动态获取虚拟目录
上一篇:D1. Sage‘s Birthday (easy version)【1000 / 思维 构造】


下一篇:Linux 命令执行顺序控制与管道