• JavaWeb学习笔记(12)


    JSP的内置对象:不用new,直接拿来就能用

    JSP的9大内置对象

    • 内置对象是指在JSP的<%=%> 和<% %>中可以直接使用的对象

    对象名

    类型

    说明

    request

    javax.servlet.http.HttpServletRequest

    response

    javax.servlet.http.HttpServletResponse

    session

    javax.servlet.http.HttpSession

    由session="true"开关

    application

    javax.servlet.ServletContext

    exception

    java.lang.Throwable

    由isErrorPage="false"开关

    page

    java.lang.Object当前对象this

    当前servlet实例

    config

    javax.servlet.ServletConfig

    out

     javax.servlet.jsp.JspWriter

    字符输出流,相当于 printWriter对象

    pageContext

     javax.servlet.jsp.PageContext

    pageContext(重要)

    概述

    本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据

    范围从小到大依次是request《session《application

    数据的存储方式:

    1. ServletContext  【application】   在整个应用是共享的,范围最大
    2. Session        在同一个浏览器同一个Sessionc才有效
    3. request    在同一个请求对象中有效【转发】

    常用方法

    Ø  void setAttribute(String name,Object o);

    Ø  Object getAttribute(String name);

    Ø  void removeAttribute(String name);

    操作其它域对象的方法

    Ø  void setAttribute(String name,Object oint Scope);

    Ø  Object getAttribute(String name,int Scope);

     

    Ø  void removeAttribute(String name,int Scope);

    scpoe的值:

    Ø  PageContext.PAGE_SCOPE

    Ø  PageContext.REQUEST_SCOPE

    Ø  PageContext.SESSION_SCOPE

     

    Ø  PageContext.APPLICATION_SCOPE

     

    常用方法

    Ø  void setAttribute(String name,Object o);

    Ø  Object getAttribute(String name);

    Ø  void removeAttribute(String name);

    操作其它域对象的方法

    Ø  void setAttribute(String name,Object oint Scope);

    Ø  Object getAttribute(String name,int Scope);

    Ø  void removeAttribute(String name,int Scope);

    scpoe的值:

    Ø  PageContext.PAGE_SCOPE

    Ø  PageContext.REQUEST_SCOPE

    Ø  PageContext.SESSION_SCOPE

    Ø  PageContext.APPLICATION_SCOPE 

    findAttribute(String name);

    自动从page request session application依次查找,找到了就取值,结束查找。

    pageContext获取其它的8个隐式对象

    在普通类中可以通过PageContext获取其他JSP隐式对象。(其他八个)

     

    pageContext的简易方法

    pageContext.forward("2.jsp");

    pageContext.include("2.jsp");

    转发方式:

    1. 在Servlet中进行转发
    2. jsp内置标签
    3. pageContext内置对象

    四大域对象:实际开发

    • PageContext(page) : pageConext 存放的数据在当前页面有效。开发时使用较少。
    • ServletRequest: request  存放的数据在一次请求(转发)内有效。使用非常多。
    • HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。
    • ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。

    page和pageContext的关系    相等

    JSP的EL表达式:

    EL概述

    • EL表达式:expression language 表达式语言,用于简化jsp中java代码开发。
    • 它不是一种开发语言,是jsp中获取数据的一种规范

     EL表达式是用来获取4大作用域数据的,是用来简化Java代码的

    EL的使用方法:${作用域key.属性名}     实际上是调用了对应的方法get方法

    EL的具体功能

    获取数据

    • EL表达式只能获取存在4个作用域中的数据
    • ${u} 原理: pageContext.findAttribute("u");
    • EL获取对于null这样的数据,在页面中表现为空字符串
    • ${u.name} == u.getName()方法

    点(.) 运算符相当于调了getter方法,点后页面跟的是属性名。

    []运算符

    • []运算符:点能做的,它也能做; 它能做的,点不一定能做
    • 举例:       ${user.name}== ${user['name']} == ${user["name"]}
    <%@page import="com.zx.model.Address"%>
    <%@page import="com.zx.model.User"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <% 
        //1.EL表达式
        //jsp往request存数据
        User user=new User("张大大","123","男");
        user.setAddress(new Address("中国","陕西"));
        request.setAttribute("user", user);
        
    %>
    显示数据:<br>
    <%-- <%=user.getName() %>
    <%=user.getPassword() %>
    <%=user.getGender() %> --%>
    
    名字:${user.name} ------------${user['name']}<br>
    密码:${user.password}<br>
    性别:${user.gender}<br>
    国家:${user.address.country}<br>
    城市:${user.address.city}<br>
    </body>
    </html>

    空运算empty

    用于判断null,空字符串和没有元素的集合(即使集合对象本身不为null)都返回true

     若集合为null,或者是集合没有元素,都返回true

    字符串也是一样的

    <% 
        List<String> list1=null;
        List<String> list2=new ArrayList<String>();
        list2.add("zx");
        
        request.setAttribute("list1", list1);
        request.setAttribute("list2", list2);
    %>
    
    list1是否为空:${empty list1}<br>
    list2是否为空:${empty list2}<br>
    
    结果:
    list1是否为空:true
    list2是否为空:false

    EL的隐式对象:

     ${pageContext.request.contextPath}<br>

    通过EL表达式获取上下文路径  作用:灵活设置Servlet的访问路径

     

     ${param【‘参数名’】}也可以

    JSTL:JSP标签库的使用

    使用步骤:

    1. 导入JSTL的jar包,然后在jsp页面顶部导入JSTL标签
    2. 在jsp中可以使用c:的形式使用标签

    通用标签:set,out,remove----用于操作作用域数据

    set:存一个变量值

    out:取值 

    remove:从作用于移除变量

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <%--JSTL:JSP标签库的使用  --%>
    存数据:<c:set var="num" value="${5+8}" scope="page"></c:set><br>
    取数据:<c:out value="${num}"></c:out><br>
    移除数据:<c:remove var="num"/><br>
    再次取出:<c:out value="${num}" default="8888"></c:out>
    </body>
    </html>

    条件标签 if choose
    1.test属性中写EL表达式
    2.choose 内部y与when一起使用,相当于switch

     forEach

    var:放变量名  items:写El表达式,一般写作用域中的key

    varStatus:变量状态

     其中,forEach中的语句与下列代码意思类似:

    for (String item:list){
            
        }

    迭代器

    • c:forEach中的varStatus属性。
    • 指向一个字符串,该字符串引用一个对象。 map.put("vs",一个对象);
    • 这个对象记录着当前遍历的元素的一些信息:
    1. getIndex():返回索引。从0开始
    2. getCount():返回计数。从1开始
    3. sLast():是否是最后一个元素
    4. isFirst():是否是第一个元素

    EL表达式中调用get方法,所以在表达式中只需要写出xx.index,或者xx.first即可(Boolean方法的get方法就是is方法)

    MVC:

    1.1软件开发模式

    • C/S:客户端 / 服务器 (胖客户端)
    • B/S:浏览器 / 服务器         (瘦客户端)

    1.2 JavaBean的概念

    • 就是一个普通类(实体bean),包含三样标准:

    v  一个无参构造

    v  私有属性

    v  公共的getter和setter方法

    1.3 MVC设计模式

    • M:Model模型【JavaBean】
    • V:View视图  【JSP】
    • C:Controller控制器 【Servlet】
    • JSP + Servlet + JavaBean

     具体案例:
      

     项目出现了一些问题,就不放代码了

  • 相关阅读:
    System.Text.Json 自定义Converter实现时间转换
    WeihanLi.Npoi 根据模板导出Excel
    用 F# 手写 TypeScript 转 C# 类型绑定生成器
    【C#】写文件时如何去掉编码前缀
    一个支持 CodeFirst/DbFirst/ModelFirst 的数据库小工具
    C#设计模式学习笔记:(15)迭代器模式
    【WPF学习】第四十六章 效果
    C# 如何实现完整的INI文件读写类
    Blend 修改TreeViewItem样式
    C#设计模式学习笔记:(16)观察者模式
  • 原文地址:https://www.cnblogs.com/zhangwugai/p/11516502.html
Copyright © 2020-2023  润新知