2021-09-11 jsp相关笔记

jsp

  • 本质上是一个servlet程序
  • 当第一次访问jsp程序 tomcat会帮我们把jsp翻译称为一个Java源文件 冰帝他编译称为class字节程序

jsp头部的page指令

jsp的page指令可以修改jsp页面中的一些重要属性 或者行为

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  • language 属性 表示jsp翻译后是什么语言文件 暂时只支持Java

  • contentype 属性 表示jsp返回的数据类型是什么 也是源码中 resp.setContenType

  • pageEncoding 属性 表示当前jsp页面的字符集 utf-8

  • import 属性 与Java源代码一样 用于导包导类

  • =以下两个属性是给out输出流使用============

  • autoFlush 属性 设置当out输出流缓冲区满了之后 是否自动刷新缓冲区 默认值是true

  • buffer 属性 设置out缓冲区大小 默认是8kb

  • ===================================================================

  • errorPage 属性 表示错误后自动跳转去的路径 如 /error.jsp 这个路径一般以斜杠打头 表示请求地址 为http://ip:port/工程路径/

  • isErrorPage 属性 设置当前jsp是否是错误信息页面 默认是false 如果是true 可以获取异常信息

  • session 属性 设置访问当前jsp页面 是否会创建httpSession对象 默认是true

  • extends 属性 设置jsp翻译称为servlet程序 翻译出来的Java类默认继承 谁

jsp常用脚本

声明脚本 格式 <%! 声明Java代码 %>

  • 作用 可以给翻译出来的Java类 定义属性 甚至是静态代码块 内部类等

    <%--  声明类的属性--%>
      <%!
        private Integer id;
        private String name;
        private static Map<String,Object>map;
      %>
    <%--  声明static静态代码块--%>
      <%!
        static {
          map=new HashMap<String,Object>();
          map.put("key1","value1");
          map.put("key2","value2");
          map.put("key3","value3");
          map.put("key4","value4");
        }
      %>
    <%--  声明类方法--%>
      <%!
        public int abc(){
          return 1;
        }
      %>
    <%--  生成内部类--%>
      <%!
        public static class A{
          private int id=12;
          private String a="zhanghai";
        }
      %>
    

表达式脚本

表达式脚本 格式 <%= 表达式脚本 %>

  • 作用 在jsp页面上输出数据 输出整型 输出浮点型 输出字符串 输出对象

  • <%--  输出整型--%>
      <%= 12%><br>
      <%= 12.12%><br>
      <%= "我是字符串"%>
      <%= map%>
    
  • 特点 所有的表达式脚本都会被翻译到 _jspService方法中

    ​ 表达式脚本都会被翻译成out.print() 输出到页面上

    ​ 由于表达式脚本翻译的内容都在_jspService() 方法中 所以_jspService方法中对象都可以直接 使用

    ​ 表达式脚本中的表达式不能以分号 ; 结束

代码脚本

格式 <% Java语句 %>

作用 可以在jsp页面中 编写我们需要的功能 写的是Java语句 if for循环 _jspService方法内的代码都可以写

<%--  代码脚本--%>
<%--  if语句--%>
  <%
    int i=1;
    if (i==1){
      System.out.println("善人zh");
    }else {
      System.out.println("伟人zh");
    }
  %>
<%--  for循环--%>
  <%
    for (int j=0;j<10;j++){
      //循环遍历
    }
  %>
<%--   _jspService方法内的代码都可以写--%>
  <%
    String user=request.getParameter("username");
    System.out.println("用户的请求参数值是   "+user);
  %>

代码脚本特点

1. 代码脚本翻译之后都在_jspService方法中
2. 由于代码脚本翻译到_jspService方法中 所以在_jspService方法中 现有的对象都可以直接使用
3. 还可以由多个代码脚本块组合完成一个Java语句 
4. 代码脚本可以和表达式脚本一起使用  在jsp页面上输出数据

jsp 几种注释

  1. 单行注释 // 放在<% %> Java注释
  2. 多行注释 /* */ 放在<% %> Java注释
  3. html注释 会发送到客户端 表面不显示 html注释
  4. jsp注释 <%-- --%> 表面不显示 只在服务器端可以看到不会发送到客户端 jsp注释

jsp 九大内置对象

内置对象 指tomcat在翻译jsp页面成为 servlet源代码 后 内部提供的九大对象 也叫内置对象

  • request 请求对象
  • response 响应对象
  • pageContext jsp上下文对象
  • session 会话对象
  • application servletContext对象
  • config servletConfig对象
  • out jsp输出流对象
  • page 指向当前jsp对象
  • exception 异常对象

jsp 九大对象中的 四大域对象

四大域对象 分别是 pageContext request session application

域对象 是可以像mao一样存储数据的对象 四个域对象功能一样 不同的是他们对数据的存取范围

pageContext 当前jsp页面范围内有效

request 一次请求内有效

session一个会话范围内有效 (打开浏览器 访问浏览器 直到关闭浏览器)

application 整个 web工程范围内 都有效 只要web工程不停止 数据都在

<%--  四个域对象中存数据--%>
  <%
    pageContext.setAttribute("key","pagecontext");
    request.setAttribute("key","request");
    session.setAttribute("key","session");
    application.setAttribute("key","application");

	//取数据
    pageContext.getAttribute("key");
  %>

四个域对象 优先顺序 从小到大的范围的顺序

jsp中 out输出 和response.getWriter 输出的区别

response 表示响应 经常用于设置返回给客户端的内容(输出)

out 也是给用户做输出使用的

当jsp页面中所有的代码执行完毕后 会做以下两个操作

  1. 执行out.flush()操作 会把out缓冲区中的数据 追加写入 response缓冲区末尾
  2. 会执行response 的刷新操作 把全部数据 写给客户端

由于 jsp翻译后 底层源代码都是使用out输出 所以一般情况下 我们在jsp页面中统一使用out输出 避免打乱

out.write 输出字符串没有问题

out.print 输出任何数据都没有问题 都转换成字符串后 调用 write输出

在jsp页面中 可以统一使用 out.print 来进行输出

jsp常用标签

静态包含

<%@ include file="footer.jsp"%>   
<%--上面那个就是静态包含  file属性 指定你要包含的jsp页面的路径--%>

静态包含的特点

  • 静态包含不会翻译被包含的jsp页面
  • 静态包含 其实是把被包含的 jsp页面的代码 拷贝到包含的位置进行输出

jsp动态包含

<jsp:include page="footer.jsp"/>
<%--    上边这就是动态包含  page 属性 是指定你要包含的jsp页面的路径
        动态包含也可以像静态包含一样 把被包含的内容 执行输出到包含位置执行输出--%>

特点

  • 动态包含会把包含的jsp页面也翻译成Java代码
  • 动态包含 还可以传递参数
传递 
<jsp:include page="footer.jsp">
        <jsp:param name="password" value="20000923"/>
 </jsp:include>
获取
<%= request.getAttribute("password")%>

jsp标签 转发

<%--jsp请求转发标签  功能就是请求转发  page属性 设置请求转发的路径--%>
    <jsp:forward page="footer.jsp">
    </jsp:forward>

练习 输出一个表格

package com.zh.demo1;

public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private String phone;

    public Student() {
    }

    public Student(Integer id, String name, Integer age, String phone) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.phone = phone;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", phone='" + phone + '\'' +
                '}';
    }
}



<%@ page import="java.util.List" %>
<%@ page import="com.zh.demo1.Student" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: relieved
  Date: 2021/9/11
  Time: 15:26
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        table{
            border:1px red;
            width: 600px;
            border-collapse: collapse;
        }
        td,th{
            border:1px red;
        }
    </style>
</head>
<body>
    <%
        List<Student> list=new ArrayList<Student>();
        for (int i=0;i<10;i++){
            int t=i+1;
            list.add(new Student(t,"name"+t,18+t,"phone:"+t));

        }
    %>
<table>
    <%for (Student student:list){ %>
        <tr>
            <td><%=student.getId()%></td>
            <td><%=student.getAge()%></td>
            <td><%=student.getName()%></td>
            <td><%=student.getPhone()%></td>
        </tr>
    <%}%>
</table>
</body>
</html>

请添加图片描述

listener 监听器

listener监听器是Javaweb 的三大组件之一 三大组件:servlet程序 filter过滤器 listener 监听器

listener 是javaee的规范 就是接口

监听器作用 监听某种事物的变化 然后 通过回调函数 反馈给客户(程序) 去做一些相应的处理

ServletContextListener 监听器

ServletContextListener可以监听 ServletContext对象的创建和销毁

ServletContext对象在web工程启动的时候创建 在web工程停止的时候销毁

监听到创建和销毁之后 都会分别调用ServletContextListener监听器的方法反馈

两个方法分别是

contextInitialized(ServletContextEvent var1);

在servletContext对象创建之后 马上调用 做初始化
    
contextDestroyed(ServletContextEvent var1);

在ServletContext对象销毁之后调用

如何使用监听器监听servletContext对象?

  1. 编写一个类去实现ServletContextListener
  2. 实现两个回调方法
  3. 到webxml中去配置监听器
package com.zh.demo1;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //创建时候调用
        System.out.println("ServletContext对象被创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        //销毁时候调用
        System.out.println("ServletContext对象被销毁了");
    }
}
<!--    配置监听器-->
    <listener>
        <listener-class>com.zh.demo1.MyListener</listener-class>
    </listener>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值