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

在这里插入图片描述

一、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静态文本

注释

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

表达式

<%=Math.PI %>

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

代码段Scriptlet

<% Java代码 %>

声明

<%! int a = 0; %>

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

指令

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

<%@ page ... %>page指令:用来导入指定类、编码等

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

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

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

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

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

<error-page>
	<exception-type>java.lang.NullException</exception-type>
	<location>/error.jsp</location>
</error-page>

<%@ include file="URL" %>include指令:用来在jsp文件转换成Servlet时引入其他文件
<%@ taglib ... %>taglib指令:用来定义标签

动作

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

①jsp:useBean:寻找或者实例化一个JavaBean

//声明一个JavaBean:<jsp:useBean id="sevenbean" class="com.blb.MyBean" scope="request" />
  • id表示JavaBean的标识,代表了一个JavaBean实例对象
  • class属性值表示JavaBean实例的类的名字,大小写要完全一致
  • scope属性值表示指定JavaBean实例的作用域。取值是page(默认)、request、session、application
  • 整体表示在request范围中获取名称为“sevenbean”的对象,如果能获取到则直接使用,如果获取的是null则新创建一个MyBean对象。

②jsp:setProperty:设置JavaBean的属性

<jsp:setProperty property="age" name="sevenbean" value="18" />

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

<jsp:setProperty property="age" name="sevenbean" param="ageParam" /> 

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

<jsp:setProperty property="*" name="sevenbean" />

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

注意:<jsp:setProperty>标签不能单独使用,必须在之前使用<jsp:useBean />标签。

③jsp:getProperty:输出某个JavaBean的属性

<jsp:getProperty name="sevenbean" property="name" />

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

注意:<jsp:getProperty> 标签不能单独使用,必须在之前使用<jsp:useBean />标签。

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

<jsp:include page="URL" flush="true" />

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

⑤jsp:forward:把请求转到一个新的页面

<jsp:forward page="new URL"> 

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

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

<jsp:forward page='<%="new"+newNo+".html"%>' >

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

<jsp:forward page="a_02.jsp">
	<jsp:param value="zhangsan" name="name"/>
	<jsp:param value="123" name="pwd"/>
</jsp:forward> 
静态包含(指令)跟动态包含(动作)的区别:
静态包含动态包含
原理先合并再翻译先翻译再包含
最终编译成java文件的数目一个多个
多个文件中能否有相同变量不允许允许
语法<%@inclue file=“被包含的页面”%><jsp:include page=“被包含的页面”>
参数传递不能向被包含页面传递参数可以使用jsp:param标签向被包含页面传递参数


二、JSP的原理

1.JSP的运行原理

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

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

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

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

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

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

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

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

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

3.JSP的执行过程

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

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


三、JSP生命周期

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

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


四、JSP九大内置对象

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


五、JSP四大作用域

1.request:作用在请求阶段

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

2.page:作用在某个页面

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

3.session:作用在整个会话

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

4.application:作用在整个应用程序

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


六、MVC模式

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值