目录

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. js判断字符串为空或者为null 简写

    if (str1!== null || str1!== undefined || str1!== '') { var str2= str1; } 下面是简写 var str2= str1|| ''; ...

  2. 第13章:Kubernetes 鉴权框架与用户权限分配

    1.Kubernetes的安全框架 访问K8S集群的资源需要过三关:认证.鉴权.准入控制 普通用户若要安全访问集群API Server,往往需要证书.Token或者用户名+密码:Pod访问,需要Ser ...

  3. Vsftpd配置(Centos7)

    6.1.Vsftpd介绍: 用于上传图片和使用 FTP 协议访问图片服务器. 解决分布式环境的图片访问问题,使用vsftpd对图片做统一管理. vsftpd 是"very secure FT ...

  4. 05 找出占用CPU、内存过高的进程

    #!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin echo "----- ...

  5. 八皇后O(1)算法题解

    题目描述 在国际象棋棋盘上(8*8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上.问共有多少种不同的方法,并且按字典序从小到大指出各种不同的放法. 题解 见证奇迹的时 ...

  6. Oracle数据库——Mybatis在一个update标签下执行多更新语句

    begin update table table1 set com1 ='1' ; update table table2 set com1 ='1' ; end;

  7. mysql 索引介绍与运用

    索引 (1)什么是索引? 是一种提升查询速度的 特殊的存储结构. 它包含了对数据表里的记录的指针,类似于字典的目录. 当我们添加索引时会单独创建一张表来去存储和管理索引,索引比原数据大,会占用更多的资 ...

  8. (学习心路历程)Vue过渡/动画 VS. 过渡/动画

    [此篇为本人的个人见解和哔哔赖赖,如果有观点不对的地方,还请大家指出来哇!!] 最近实习在做一个项目,里面应用的动画效果还蛮复杂的,因为本身对Vue框架比较熟悉,所以最终选择了Vue框架. 自己之前从 ...

  9. MySQL存储引擎——InnoDB和MyISAM的区别

    MySQL5.5后,默认存储引擎是InnoDB,5.5之前默认是MyISAM. InnoDB(事务性数据库引擎)和MyISAM的区别补充: InnoDB是聚集索引,数据结构是B+树,叶子节点存K-V, ...

  10. 「AGC034D」 Manhattan Max Matching

    「AGC034D」 Manhattan Max Matching 传送门 不知道这个结论啊... (其实就是菜嘛) 首先 \(O(n^2)\) 的建边显然不太行. 曼哈顿距离有这样一个性质,如果将绝对 ...