目录

JSP的执行原理、JSP的内置对象、四大作用域解析、MVC模式理解

JSP的执行原理

这里拿一个小例子来解析JSP是如何被访问到的

首先将该项目部署到tomcat,并且通过tomcat启动

通过URL访问该JSP文件:http://localhost:8080/untitled_war_exploded/

先说一下为什么能通过这个网址访问到index页面

1、部署的项目名为untitled_war_exploded



2、因为tomcat的配置文件conf文件夹中的web.xml配置了默认的welcome-file-list标签



3、为什么这个index.jsp在根路径下?因为web项目的web根目录默认会成为部署目录的根目录



通过这个小例子可以看到tomcat服务器启动后是如何访问到的

JSP的执行过程

浏览器访问JSP的时候,会被tomcat的拦截器进行拦截,通过查看tomcat配置文件的web.xml中可以看到一个Servlet

浏览器在访问该jsp文件的时候,便是该Servlet进行的处理



我们在tomcat的lib目录下找到这个jar包

具体源码就先不了解了,通过这个JspServlet的处理后,会将JSP文件转换为一个JAVA文件,然后再编译成class文件,我们可以在项目运行后打包的目录(部署目录)中看到

通过查看JSP文件转换成的JAVA文件我们可以看到这个JAVA类继承了HttpJspBase,而HttpJspBase又继承了HttpServlet,由此可见,JSP本质上就是一个Servlet



看看通过JSP转换的JAVA文件的内部结构就能知道其实页面的标签都是通过Response对象中的out对象打印出来的

JSP语法

小脚本、声明式、表达式三种语法的区别

<!-- 小脚本 -->
<%
// 这里可以写java代码,注意、这里的java代码,最后将JSP转换为java文件的时候
// 这里的java代码都是放在执行的方法 _jspService 中的
%> <!-- 声明式 -->
<%!
// 这里用于定义一些成员变量,当然,也可以定义静态
%> <!-- 表达式,用于输出表达式的值 -->
<%=10%>

声明式的例子



EL表达式及使用EL表达式获取四个作用域

<!-- JSP中的EL表达式的格式为: ${这里写表达式} -->

使用EL表达式获取四个作用域

${pageContext} // page作用域
${requestScope}// request作用域
${sessionScope}// session作用域
${applicationScope}// 服务器作用域,其实就是ServletContext对象

使用JSP中的JSTL

  • 引入jar包,放在WEB-INF/lib目录下

  • 将jar包添加到库文件
  • 在JSP文件添加taglib引入JSTL,前缀为c,接下来就可以在jsp文件中使用c标签了

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JSP的九大内置对象

内置对象 所属类型 主要用途
request javax.servlet.HttpServletRequest 包含了请求方的数据
response javax.servlet.HttpServletResponse 包含了响应给客户端的数据
out javax.servlet.jsp.JspWriter response中的标准输出
session javax.servlet.Http.HttpSesssion 解决HTTP无状态的问题
application javax.serlvet.ServletContext 实现多用户多请求之间数据的共享,全局配置
config javax.servlet.ServletConfig Servlet的配置信息
pageContext javax.servlet.jsp.PageServlet 提供当前页面的属性
page java.lang.Object 相当于JSP编译成java文件后的this
exception java.lang.Throwable 用于异常处理

exception异常处理对象的使用

  • 在需要进行异常处理的JSP页面中,需要配置errorPage属性

  • 在error页面中,需要配置isErrorPage为true

四大作用域

page作用域(作用范围仅限当前页面,使用率很低)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<base href="<%=request.getContextPath() + "/"%>">
<%
pageContext.setAttribute("pageKey","pageValue");
%>
</head>
<body>
<%--可以获取到 √ --%>
<%=pageContext.getAttribute("pageKey")%><br> <%-- 动态导入,相当于方法调用,因为实质上还是2个页面,demo1.jsp页面中无法访问到该 pageKey × --%>
<jsp:include page="demo1.jsp"></jsp:include> <br> <%-- 静态导入,相当于将该jsp的内容复制到了这个jsp文件中,所以相当于是同一个页面,可以访问到该 pageKey √ --%>
<%@include file="demo2.jsp"%>
</body>
</html>

request作用域(作用范围为一个请求之内)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<base href="<%=request.getContextPath() + "/"%>">
<%
request.setAttribute("requestKey","requestValue");
%>
</head>
<body>
<%-- 动态导入,相当于方法调用,但是还是在一个请求当中,所以demo1.jsp中能够获取到值 √ --%>
<jsp:include page="demo1.jsp"></jsp:include> <br> <%-- 静态导入,相当于将该jsp的内容复制到了这个jsp文件中,所以相当于是同一个页面,可以访问到该request作用域的值 √ --%>
<%@include file="demo2.jsp"%>
</body>
</html>

session作用域(作用范围为一个会话,浏览器关闭则会话结束)

// 在demo1中为session作用域设置一个值
session.setAttribute("hello","你好呀,我很好哦!");
// 在demo2中访问依然能够获得。
// 但是如果关闭掉浏览器,再次来访问时,就无法获取到了

application作用域(作用范围为整个服务器)

// 在demo1中为application作用域中设置一个值
application.setAttribute("appKey","我是一个小皮匠");
// 在当前浏览器中访问demo2,demo2中可以通过表达式获取到,(当然不止这一种获取方式)
${applicationScope.get("appKey")}
// 即使切换一个浏览器再次访问demo2.jsp文件,依然能够获取到该作用域中的值

MVC模式的理解

MVC对应的英文是什么?

M -> Model 模型 > javaBean

V -> View 视图 > JSP、html等

C -> Control 控制 > servlet

如何理解Model模型层

Model本质其实就是JavaBean,而JavaBean的定义为> 符合规范的JAVA类、是一种可重用的组件

符合如下规范的java类就是JavaBean

  • 该类必须是public class修饰
  • 该类中的属性必须为private私有的
  • 如果需要访问该类的属性,则需要添加对应的 getter setter方法

    按照功能分类,可以将JavaBean分为如下两种
  • 封装数据的JavaBean:例如实体(Entity)
  • 封装业务的JavaBean:Dao持久层(Mapper)、Service业务层

View视图层

View视图层的本质就是为了给页面展示数据,实现浏览器与用户之间的交互。

JSP、Html、jquery、js等都是视图层的内容

Control控制层

Control控制层的本质就是用于接收客户端的请求、获取需要的数据、响应给客户端。

Servlet就是控制层的代表

JSP的执行原理、JSP的内置对象、四大作用域解析、MVC模式理解>从零开始学JAVA系列的更多相关文章

  1. JSP脚本中的9个内置对象

    JSP脚本中包含9个内置对象,这9个内置对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化.也就是说它们已经是对象,可以直接使用. 我们随意打开一个由JSP页面生成的Ser ...

  2. JSP 脚本中的 9 个内置对象

    JSP 脚本中包含了 9 个内置对象,这 9 个内置对象都是 Servlet API 接口的实例,只是 JSP 规范对它们进行了默认初始化. 这 9 个内置对象如下: 1.application:ja ...

  3. JSP学习笔记(1)——Jsp指令、动作元素和内置对象

    简单来说,javaweb技术就是让服务器端能够执行Java代码,之后返回数据给客户端(浏览器)让客户端显示数据 jsp页面中可以嵌套java代码(java小脚本)和嵌套Web前端(html,css,j ...

  4. JSP最常用的五种内置对象(out,request,response,session,application)

    为了简化开发过程,JSP提供了一些内置对象,它们由容器实现和管理.开发者在JSP页面中无需声明,无需实例化就可使用.主要有out,request,response,session,applicatio ...

  5. javaweb九大个内置对象,四大域

    9个内置对象如下: 1.session对象:会话对象 当客户端第一次访问服务器的页面时,web服务器会自动为该客户端创建一个session对象并分配一个唯一的id号 常常用它来在多个页面间共享数据,如 ...

  6. jsp提交表单数据乱码,内置对象,以及过滤器

    jsp提交表单数据乱码解决方案 通过form表单给服务器提交数据的时候,如果提交的是中文数据,那么可能会出现乱码,如果表单的请求方式是post请求,那么可以使用如下方案解决乱码: 在调用getPara ...

  7. JAVAWEB - Servlet原理及其使用>从零开始学JAVA系列

    目录 Servlet原理及其使用 什么是Servlet Servlet的使用 编写一个Servlet,使用继承HttpServlet的方式 配置web.xml 很简单的几个JSP文件 小提示,如果继承 ...

  8. JAVAWEB的基本入门(JSP、Tomcat)>从零开始学JAVA系列

    目录 JAVAWEB的基本入门(JSP.Tomcat) 使用idea创建web项目的两种方式 1.直接创建一个web项目(这样创建好的项目可以直接运行) 2.创建一个普通的java项目并配置web模块 ...

  9. Session与Cookie的原理以及使用小案例>从零开始学JAVA系列

    目录 Session与Cookie的原理以及使用小案例 Cookie和Session所解决的问题 Session与Cookie的原理 Cookie的原理 Cookie的失效时机 小提示 Session ...

随机推荐

  1. DNS 解析过程

    DNS 是应用层协议,用于将域名转换成 IP 地址. 1. 解析过程 DNS 的核心系统是一个三层的树状.分布式服务,基本对应域名的结构. 根域名服务器:管理顶级域名服务器,返回 com.net.cn ...

  2. canvas介绍和用途

    canvas介绍和用途 canvas(画布)主要是位图 svg(矢量图) canvas标签,必须要写的3个属性 id width height 为什么不在style中设置width和height呢? ...

  3. 230th Weekly Leetcode Contest

    题目二 题目描述 5690. 最接近目标价格的甜点成本  难度:中等-中等 题解 解法一:三进制状态压缩 考虑到baseCosts.toppingCosts的长度最多都为10,每一种辅料都有加0.1. ...

  4. Docker:如何修改Docker0网桥的默认网段

    1. 背景 Docker 服务启动后默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络. ...

  5. Docker:Docker部署mysql数据库

    docker部署mysql : 8.0 1.在宿主机创建mysql挂载目录 #创建目录 mkdir /home/mysql/conf mkdir /home/mysql/logs mkdir /hom ...

  6. ROS2学习之旅(14)——编写简单的发布者和订阅者(C++)

    节点是通过ROS Graph进行通信的可执行进程.在本文中,节点将通过话题以字符串消息的形式相互传递信息.这里使用的例子是一个简单的"talker"和"listener& ...

  7. STM32中的通信协议

    按照数据传送方式分: 串行通信(一条数据线.适合远距离传输)并行通信(多条数据线.成本高.抗干扰性差) 按照通信的数据同步方式分: 异步通信(以1个字符为1帧.发送与接收时钟不一致)同步通信(位同步. ...

  8. JAVA入门基础及流程控制

    JAVA入门基础及流程控制 数据类型 位 存储单位 eg:0001 0011 八位 字节 byte 处理数据单位 一字节等于八位 eg:1b=0011 0001 类变量: static int num ...

  9. 学生信息管理系统--基于jsp技术和MySQL的简单增删改查

    web实现增删改查的方式有很多啊,对于初学者来说当然是要先了解各部分的传值的方式.本篇博客从jsp技术的最基础方面进行说明. 一.什么是jsp技术 首先,我们要了解什么是jsp技术. jsp技术是基于 ...

  10. 【LeetCode】203.移除链表元素

    203.移除链表元素 知识点:链表:双指针 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 . 示例 ...