JSP的执行原理、JSP的内置对象、四大作用域解析、MVC模式理解>从零开始学JAVA系列
- JSP的执行原理、JSP的内置对象、四大作用域解析、MVC模式理解
- JSP的执行原理
- 这里拿一个小例子来解析JSP是如何被访问到的
- JSP的执行过程
- 浏览器访问JSP的时候,会被tomcat的拦截器进行拦截,通过查看tomcat配置文件的web.xml中可以看到一个Servlet
- 我们在tomcat的lib目录下找到这个jar包
- 具体源码就先不了解了,通过这个JspServlet的处理后,会将JSP文件转换为一个JAVA文件,然后再编译成class文件,我们可以在项目运行后打包的目录(部署目录)中看到
- 通过查看JSP文件转换成的JAVA文件我们可以看到这个JAVA类继承了HttpJspBase,而HttpJspBase又继承了HttpServlet,由此可见,JSP本质上就是一个Servlet
- 看看通过JSP转换的JAVA文件的内部结构就能知道其实页面的标签都是通过Response对象中的out对象打印出来的
- JSP语法
- JSP的九大内置对象
- 四大作用域
- MVC模式的理解
- JSP的执行原理
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系列的更多相关文章
- JSP脚本中的9个内置对象
JSP脚本中包含9个内置对象,这9个内置对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化.也就是说它们已经是对象,可以直接使用. 我们随意打开一个由JSP页面生成的Ser ...
- JSP 脚本中的 9 个内置对象
JSP 脚本中包含了 9 个内置对象,这 9 个内置对象都是 Servlet API 接口的实例,只是 JSP 规范对它们进行了默认初始化. 这 9 个内置对象如下: 1.application:ja ...
- JSP学习笔记(1)——Jsp指令、动作元素和内置对象
简单来说,javaweb技术就是让服务器端能够执行Java代码,之后返回数据给客户端(浏览器)让客户端显示数据 jsp页面中可以嵌套java代码(java小脚本)和嵌套Web前端(html,css,j ...
- JSP最常用的五种内置对象(out,request,response,session,application)
为了简化开发过程,JSP提供了一些内置对象,它们由容器实现和管理.开发者在JSP页面中无需声明,无需实例化就可使用.主要有out,request,response,session,applicatio ...
- javaweb九大个内置对象,四大域
9个内置对象如下: 1.session对象:会话对象 当客户端第一次访问服务器的页面时,web服务器会自动为该客户端创建一个session对象并分配一个唯一的id号 常常用它来在多个页面间共享数据,如 ...
- jsp提交表单数据乱码,内置对象,以及过滤器
jsp提交表单数据乱码解决方案 通过form表单给服务器提交数据的时候,如果提交的是中文数据,那么可能会出现乱码,如果表单的请求方式是post请求,那么可以使用如下方案解决乱码: 在调用getPara ...
- JAVAWEB - Servlet原理及其使用>从零开始学JAVA系列
目录 Servlet原理及其使用 什么是Servlet Servlet的使用 编写一个Servlet,使用继承HttpServlet的方式 配置web.xml 很简单的几个JSP文件 小提示,如果继承 ...
- JAVAWEB的基本入门(JSP、Tomcat)>从零开始学JAVA系列
目录 JAVAWEB的基本入门(JSP.Tomcat) 使用idea创建web项目的两种方式 1.直接创建一个web项目(这样创建好的项目可以直接运行) 2.创建一个普通的java项目并配置web模块 ...
- Session与Cookie的原理以及使用小案例>从零开始学JAVA系列
目录 Session与Cookie的原理以及使用小案例 Cookie和Session所解决的问题 Session与Cookie的原理 Cookie的原理 Cookie的失效时机 小提示 Session ...
随机推荐
- js判断字符串为空或者为null 简写
if (str1!== null || str1!== undefined || str1!== '') { var str2= str1; } 下面是简写 var str2= str1|| ''; ...
- 第13章:Kubernetes 鉴权框架与用户权限分配
1.Kubernetes的安全框架 访问K8S集群的资源需要过三关:认证.鉴权.准入控制 普通用户若要安全访问集群API Server,往往需要证书.Token或者用户名+密码:Pod访问,需要Ser ...
- Vsftpd配置(Centos7)
6.1.Vsftpd介绍: 用于上传图片和使用 FTP 协议访问图片服务器. 解决分布式环境的图片访问问题,使用vsftpd对图片做统一管理. vsftpd 是"very secure FT ...
- 05 找出占用CPU、内存过高的进程
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin echo "----- ...
- 八皇后O(1)算法题解
题目描述 在国际象棋棋盘上(8*8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上.问共有多少种不同的方法,并且按字典序从小到大指出各种不同的放法. 题解 见证奇迹的时 ...
- Oracle数据库——Mybatis在一个update标签下执行多更新语句
begin update table table1 set com1 ='1' ; update table table2 set com1 ='1' ; end;
- mysql 索引介绍与运用
索引 (1)什么是索引? 是一种提升查询速度的 特殊的存储结构. 它包含了对数据表里的记录的指针,类似于字典的目录. 当我们添加索引时会单独创建一张表来去存储和管理索引,索引比原数据大,会占用更多的资 ...
- (学习心路历程)Vue过渡/动画 VS. 过渡/动画
[此篇为本人的个人见解和哔哔赖赖,如果有观点不对的地方,还请大家指出来哇!!] 最近实习在做一个项目,里面应用的动画效果还蛮复杂的,因为本身对Vue框架比较熟悉,所以最终选择了Vue框架. 自己之前从 ...
- MySQL存储引擎——InnoDB和MyISAM的区别
MySQL5.5后,默认存储引擎是InnoDB,5.5之前默认是MyISAM. InnoDB(事务性数据库引擎)和MyISAM的区别补充: InnoDB是聚集索引,数据结构是B+树,叶子节点存K-V, ...
- 「AGC034D」 Manhattan Max Matching
「AGC034D」 Manhattan Max Matching 传送门 不知道这个结论啊... (其实就是菜嘛) 首先 \(O(n^2)\) 的建边显然不太行. 曼哈顿距离有这样一个性质,如果将绝对 ...