热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

小汤学编程之JavaEE学习day03——JSP组成结构、JSP原理、JSP生命周期、JSP九大内置对象、四大作用域、JSP的MVC模式

一、JSP组成结构二、JSP的原理1.JSP的运行原理2.分析JSP所生成的Servlet代码3.JSP的执行过程三、JSP生命周期四、JSP九大内置对象五、JSP四大作

在这里插入图片描述


一、JSP组成结构

二、JSP的原理

1.JSP的运行原理     2.分析JSP所生成的Servlet代码     3.JSP的执行过程

三、JSP生命周期

四、JSP九大内置对象

五、JSP四大作用域

1.request:作用在请求阶段     2.page:作用在某个页面     3.session:作用在整个会话     4.application:作用在整个应用程序

六、MVC模式


jsp全称Java Server Page, 一种动态网页开发技术。它允许使用el表达式、jstl来获取Java代码中的数据,同时允许在jsp中编写html代码,使得jsp可以非常容易的显示页面。Jsp本质是Servlet,最终以Servlet方式运行,所以可以说Jsp是一种特殊的Servlet



一、JSP组成结构


静态内容:

HTML静态文本


注释:


<%-- JSP注释 --%>
<% //Java注释 %>


表达式&#xff1a;

<%&#61;Math.PI %>


表达式的结果会直接被输出到页面中。要注意表达式的后面不能有;号



代码段Scriptlet&#xff1a;

<% Java代码 %>


声明&#xff1a;

<%! int a &#61; 0; %>


JSP用来定义页面级变量&#xff0c;以保存信息或定义JSP页面的其余部分可能需要的方法。



指令&#xff1a;

用于将有关的页面的特殊处理信息传送到JSP容器。常见的JSP指令分为三种。

<%&#64; page ... %>page指令&#xff1a;用来导入指定类、编码等


缺省情况下JSP默认自动导入以下四个包中的所有类&#xff1a;java.lang、javax.servlet、javax.servlet.http、javax.serlvet.jsp



属性缺省值
import类名或包名
language脚本语言名称“java”
contentTypeMIME类型和字符集“text/html”
extends类名
info文本字符串
session布尔值“true”
buffer缓冲器大小&#xff0c;或none“8kb”
autoFlush布尔值“true”
isThreadSafe布尔值“true”
errorPage本地URL
isErrorPage布尔值“false”

错误页面的配置除了通过page指令中的errorPage跟isErrorPage来配置外&#xff0c;还可以通过web.xml中来配置全局的错误页面。可以通过错误代码跟错误类型来配置。
通过错误代码配置错误页面:

<error-page><error-code>500error-code><location>/error.jsplocation>
error-page>

通过错误类型来配置错误页面:

<error-page><exception-type>java.lang.NullExceptionexception-type><location>/error.jsplocation>
error-page>

<%&#64; include file&#61;"URL" %>include指令&#xff1a;用来在jsp文件转换成Servlet时引入其他文件
<%&#64; taglib ... %>taglib指令&#xff1a;用来定义标签


动作&#xff1a;

JSP中定义了若干个标准动作&#xff0c;可以在页面中使用JavaBean组件和有条件的把页面的控制权移到其他页面。

①jsp:useBean&#xff1a;寻找或者实例化一个JavaBean

//声明一个JavaBean&#xff1a;
<jsp:useBean id&#61;"sevenbean" class&#61;"com.blb.MyBean" scope&#61;"request" />

  • id表示JavaBean的标识&#xff0c;代表了一个JavaBean实例对象
  • class属性值表示JavaBean实例的类的名字&#xff0c;大小写要完全一致
  • scope属性值表示指定JavaBean实例的作用域。取值是page&#xff08;默认&#xff09;、request、session、application
  • 整体表示在request范围中获取名称为“sevenbean”的对象&#xff0c;如果能获取到则直接使用&#xff0c;如果获取的是null则新创建一个MyBean对象。

②jsp:setProperty&#xff1a;设置JavaBean的属性

<jsp:setProperty property&#61;"age" name&#61;"sevenbean" value&#61;"18" />

表示给sevenbean这个实例对象的age属性赋值18。


<jsp:setProperty property&#61;"age" name&#61;"sevenbean" param&#61;"ageParam" />

表示给sevenbean这个实例对象的age属性赋值&#xff0c;值通过请求参数request.getParameter(“ageParam” ) 获取到。


<jsp:setProperty property&#61;"*" name&#61;"sevenbean" />

表示给sevenbean这个实例对象的所有属性进行赋值&#xff0c;值通过请求参数中获取&#xff0c;所以要求请求参数中的参数名称跟bean的属性名必须一样才能自动映射上。



注意&#xff1a;标签不能单独使用&#xff0c;必须在之前使用标签。


③jsp:getProperty&#xff1a;输出某个JavaBean的属性

<jsp:getProperty name&#61;"sevenbean" property&#61;"name" />

表示获取sevenbean对象的name属性值并输出&#xff0c;会依次从pageConext、request、session、application范围中寻找。



注意&#xff1a; 标签不能单独使用&#xff0c;必须在之前使用标签。


④jsp:include&#xff1a;在页面被请求的时候引入一个文件

<jsp:include page&#61;"URL" flush&#61;"true" />

page属性包含的是一个相对的URL&#xff0c;可以是HTML页面、JSP页面或者是Servlet的url-pattern。flush属性作用是在包含页面前清空在缓冲区中的数据&#xff0c;默认值是true。可以在标签内通过 标签来传递参数。


⑤jsp:forward&#xff1a;把请求转到一个新的页面

<jsp:forward page&#61;"new URL">

forward动作用于将控制权从JSP页面传递给本地服务器的另一个位置。丢弃当前页面生成的任何内容&#xff0c;并在替换位置上重新处理请求。forward标签只有一个page属性。page属性包含的是一个相对URL &#xff0c;可以是HTML页面、JSP页面或者是Servlet的url-pattern。


page的值既可以直接给出&#xff0c;也可以在请求的时候动态计算&#xff0c;通过表达式来实现&#xff0c;如&#xff1a;

<jsp:forward page&#61;&#39;<%&#61;"new"&#43;newNo&#43;".html"%>&#39; >

此标签在传递页面的控制权到另外的页面的时候&#xff0c;可以把相应的参数值传递到目的页面。如果需要传递参数&#xff0c;使用标签&#xff0c;注意这时必须要使用对标签。把标签包含在里面。


<jsp:forward page&#61;"a_02.jsp"><jsp:param value&#61;"zhangsan" name&#61;"name"/><jsp:param value&#61;"123" name&#61;"pwd"/>
</jsp:forward>

静态包含&#xff08;指令&#xff09;跟动态包含&#xff08;动作&#xff09;的区别&#xff1a;


静态包含动态包含
原理先合并再翻译先翻译再包含
最终编译成java文件的数目一个多个
多个文件中能否有相同变量不允许允许
语法<%&#64;inclue file&#61;“被包含的页面”%>
参数传递不能向被包含页面传递参数可以使用jsp:param标签向被包含页面传递参数


二、JSP的原理


1.JSP的运行原理

WEB容器&#xff08;Servlet引擎&#xff09;接收到以.jsp为扩展名的URL的访问请求时&#xff0c;它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序&#xff0c;它负责解释和执行JSP页面。

每个JSP 页面在第一次被访问时&#xff0c;JSP引擎将它翻译成一个Servlet源程序&#xff0c;接着再把这个Servlet源程序编译成Servlet的class类文件&#xff0c;然后再由WEB容器&#xff08;Servlet引擎&#xff09;像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。


Tomcat 5.x把为JSP页面创建的Servlet源文件和class类文件放置在“\work\Catalina<主机名><应用程序名>\”目录中。
其他版本Tomcat的JSP页面翻译成的Servlet的包名为org.apache.jsp.



JSP规范也没有明确要求JSP中的脚本程序代码必须采用Java语言&#xff0c;JSP中的脚本程序代码可以采用Java语言之外的其他脚本语言来编写&#xff0c;但是&#xff0c;JSP页面最终必须转换成Java Servlet程序。



可以在WEB应用程序正式发布之前&#xff0c;将其中的所有JSP页面预先编译成Servlet程序&#xff0c;可以加快页面加载速度。事实上&#xff0c;很多公司在将项目给客户演示前都会把页面先访问一遍&#xff0c;使JSP事先编译成Servlet。



2.分析JSP所生成的Servlet代码

JSP页面翻译成的Servlet继承了org.apache.jasper.runtime.HttpJspBase类&#xff0c;HttpJspBase类是HttpServlet的一个子类&#xff0c;因此JSP页面翻译成的Servlet是HttpServlet的一个孙子类。HttpJspBase类实现了javax.servlet.jsp.HttpJspPage接口中的部分方法&#xff0c;因此&#xff0c;HttpJspBase类是抽象的。


SUN公司为JSP的WEB容器开发商和JSP页面开发人员提供了一套专门应用于开发JSP程序的Java类&#xff0c;这套Java类被称为JSP API。HttpJspPage接口和JspPage接口属于JSP API&#xff0c;在HttpJspPage接口中只定义了一个_jspService方法&#xff0c;但它继承了JspPage接口&#xff0c;JspPage接口中定义了两个方法&#xff1a;jspInit()和jspDestroy()。
HttpJspBase的init方法调用了jspInit和_jspInit方法&#xff0c;destroy方法内部调用了jspDestroy和_jspDestroy方法&#xff0c;service方法内部调用了_jspService方法。在HttpJspBase中实现的init、service和destroy方法都被声明成了final类型。


JSP页面中的位于<% %>外面的每行和紧临<%%>两边的每段文本被转换成以这些文本作为参数的一条条out.write语句&#xff0c;JSP脚本片断&#xff08;位于<%%>内的一段java代码&#xff09;中的java代码被原封不动地搬移进了_jspService方法中的相应位置处&#xff0c;JSP表达式&#xff08;位于<%&#61;和%>之中的内容&#xff09;则是被转换成以其中的变量或表达式作为参数的out.print语句。


3.JSP的执行过程

在这里插入图片描述
JSP的执行过程主要可以分为以下几点&#xff1a;


  1. 客户端发出请求。
  2. Web容器将JSP转译成Servlet源代码。
  3. Web容器将产生的源代码进行编译。
  4. Web容器加载编译后的代码并执行。
  5. 把执行结果响应至客户端。


三、JSP生命周期

jsp本质是一个Servlet&#xff0c;它比Servlet的生命周期多了一个编译阶段。


  1. 翻译阶段
  2. 编译阶段
  3. 实例化阶段
  4. 初始化阶段
  5. 执行阶段
  6. 销毁阶段
  7. 回收阶段


四、JSP九大内置对象


内置对象说明
requestHttpServletRequest对象&#xff0c;代表请求
responseHttpServletResponse对象&#xff0c;代表响应
outJspWriter对象&#xff0c;代表输出
sessionHttpSession对象&#xff0c;代表每个会话
applicationServletContext应用对象&#xff0c;代表整个应用程序
configServletConfig配置对象&#xff0c;代表配置文件中的信息
pageContextPageContext对象页面上下文对象&#xff0c;包含页面信息
page当前页面对象&#xff08;this&#xff09;&#xff08;基本不使用&#xff09;
exceptionThrowable异常对象&#xff0c;包含jsp异常信息


五、JSP四大作用域


1.request&#xff1a;作用在请求阶段

设置参数&#xff1a;request.setAttribute("key","value");
获取参数&#xff1a;request.getAttribute("key");


2.page&#xff1a;作用在某个页面

设置参数&#xff1a;pageContext.setAttribute("key","value");
获取参数&#xff1a;pageContext.getAttribute("key");


3.session&#xff1a;作用在整个会话

Servlet中设置参数&#xff1a;request.getSession().setAttribute("key","value");
jsp中设置参数&#xff1a;session.setAttribute("key","value");
获取参数&#xff1a;session.getAttribute("key");


4.application&#xff1a;作用在整个应用程序

Servlet设置参数&#xff1a;request.getServletContext().setAttribute("key","value");
jsp设置参数&#xff1a;application.setAttribute("key","value");
获取参数&#xff1a;application.getAttribute("key");



六、MVC模式

MVC不是一种技术&#xff0c;而是一种思想&#xff0c;一种架构模式&#xff0c;它主要用来将页面、数据、逻辑代码进行分离&#xff0c;更是责任分工的一种体现。
M&#xff1a;Model&#xff08;模型&#xff09; JavaBean
V&#xff1a;View&#xff08;视图&#xff09; 显示jsp
C&#xff1a;Controller&#xff08;控制器&#xff09; Servlet


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
author-avatar
凌亂的回譩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有