1、JSP简介
jsp全称Java Server Page, 一种动态网页开发技术。它允许使用el表达式、jstl来获取Java代码中的数据,同时允许在jsp中编写html代码,使得jsp可以非常容易的显示页面。Jsp本质是Servlet,最终以Servlet方式运行,所以可以说Jsp是一种特殊的Servlet。
2、JSP组成结构
2.1、静态内容
html静态文本
2.2、注释
第1种:
第2种: <%-- JSP注释 --%>
第3种: <% //java注释 %>
2.3、代码段Scriptlet
<% java代码 %>
2.4、表达式
表达式的结果会直接被输出到页面中。要注意表达式的后面不能有;号
<%=Math.PI %>
2.5、声明
JSP用来定义页面级变量,以保存信息或定义JSP页面的其余部分可能需要的方法。
<%! int a = 0; %>
2.6、指令
用于将有关的页面的特殊处理信息传送到JSP容器。常见的JSP指令分为三种:
1.page指令用来导入指定类、编码等等。缺省情况下JSP默认自动导入以下四个包中的所有类:java.lang、javax.servlet、javax.servlet.http、javax.serlvet.jsp
<%@ page … %>
错误页面的配置除了通过page指令中的errorPage跟isErrorPage来配置外,还可以通过web.xml中来配置全局的错误页面。可以通过错误代码跟错误类型来配置。
2.7、动作
JSP中定义了若干个标准动作,可以在页面中使用JavaBean组件和有条件的把页面的控制权移到其他页面。
jsp:useBean:寻找或者实例化一个JavaBean
声明一个JavaBean:
<jsp:useBean id="sevenbean" class="com.seven.MyBean" scope="request" />
id表示JavaBean的标识,代表了一个JavaBean实例对象
class属性值表示JavaBean实例的类的名字,大小写要完全一致
scope属性值表示指定JavaBean实例的作用域。取值是pageContext(默认)、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文件的数目不同。
静态包含在转换成为java文件的时候将包含文件的内容“复制”到主体文件,然后作为一个整体编译。最终编译为一个java文件。
-
静态包含在两个文件中不能有相同的变量,动态包含允许
-
语法不同:
静态包含语法: <%@inclue file=“被包含的页面”%>
动态包含语法: <jsp:include page=“被包含的页面”>
-
参数传递不同 :
静态包含不能向被包含页面传递参数
动态包含可以使用jsp:param标签向被包含页面传递参数
3.JSP生命周期
jsp本质是一个Servlet,它比Servlet的生命周期多了一个翻译阶段。
翻译阶段
编译阶段
实例化阶段
初始化阶段
执行阶段
销毁阶段
回收阶段
5、Jsp九大隐式对象(内置对象)
- request:HttpServletRequest对象,代表请求
- response:HttpServletResponse对象,代表响应
- out:JspWriter对象,代表输出
- session:HttpSession对象,代表每个会话
- application:ServletContext应用对象,代表整个应用程序
- config:ServletConfig配置对象,代表配置文件中的信息
- pageContext:PageContext对象页面上下文对象,包含页面信息
- page:当前页面对象(this)(基本不使用)
- exception:Throwable异常对象,包含jsp异常信息
问题:JSP的内置对象有哪些?
request请求对象
response 响应对象
pageContext 页面上下文对象
session 会话对象
application web应用上下文对象
out 输出对象
config 配置信息对象
page JSP网页本身
exception 针对错误网页,未捕捉的例外
作用分别是:
1.request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
2. response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)
3. out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
4.pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法
5.session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
6.applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
7.config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
8.page表示从该页面产生的一个servlet实例
6、JSP四大作用域
page:作用在某个页面
> //设置参数
pageContext.setAttribute("key", "value");
//获取参数
pageContext.getAttribute("key");
request:作用在请求阶段
//设置参数
request.setAttribute("key", "value");
//获取参数
request.getAttribute("key");
session:作用在整个会话
//servlet中设置参数
request.getSession().setAttribute("key", "value");
//jsp中设置参数
session.setAttribute("key", "value");
//获取参数
session.getAttribute("key");
application:作用在整个应用程序
//Servlet设置参数
request.getServletContext().setAttribute("key", "value");
//jsp设置参数
application.setAttribute("key", "value");
//获取参数
application.getAttribute("key");
7、MVC模式
MVC不是一种技术,而是一种思想,一种架构模式,它主要用来将页面、数据、逻辑代码进行分离,更是责任分工的一种体现。
M:Model(模型)
V:View(视图)
C:Controller(控制器)
7.1 model1
在Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接受处理客户端请求,对请求处理后直接做出响应。用少量的JavaBean来处理数据库连接、数据库访问等操作。从工程化角度看,它的局限性非常明显;JSP的职责不单一,身兼View和Controller两种角色,将控制逻辑职和表现逻辑混杂在一起,职责过重,代码的可复用性低,不便于维护。
7.2 model2
Model2就是MVC的一个成功应用。模型(JavaBean)、视图(JSP)、控制器(Servlet)。正如下图所示,Model2下的JSP不在承担控制器的责任,它仅仅是表现层角色,仅仅用于将结果呈现给用户。浏览器发来的请求与Servlet(控制器)交互,而Servlet负责与后台的JavaBean通信。在Model2模型下,模型(Model)由JavaBean充当,视图(View)有JSP页面充当,而控制器(Controller)则由Servlet充当。