目录
介绍
一、什么是JSP ?
JSP(全称 Java Server Pages)Java 服务端页面技术,是 JavaEE 平台下的技术规范。它允许使用特定的标签在 HTML 网页中插入 Java 代码,实现动态页面处理,所以 JSP 就是 HTML 与Java 代码的复合体。JSP 技术可以快速的实现一个页面的开发,相比在 Servlet 中实现页面开发将变得更加容易。
二、JSP的特点
- 能以模板化的方式简单、高效地添加动态网页内容。
- 可利用JavaBean和标签库技术复用常用的功能代码(设计好的组件容易实现重复利用,减少重复劳动)。标签库不仅带有通用的内置标签(JSTL),而且支持可扩展功能的自定义标签。
- 有良好的工具支持。
- 继承了Java语言的相对易用性。
- 继承了Java的跨平台优势,实现“一次编写,处处运行”。因为支持Java及其相关技术的开发平台多,网站开发人员可以选择在最适合自己的系统平台上进行JSP开发;不同环境下开发的JSP项目,在所有客户端上都能顺利访问。
- 页面中的动(控制变动内容的部分)/静(内容不需变动的部分)区域以分散但又有序的形式组合在一起,能使人更直观地看出页面代码的整体结构,也使得设计页面效果和程序逻辑这2部分工作容易分离(外观视图与逻辑分离)。从而方便分配人员并发挥各自长处,实现高效地分工合作。
- 可与其它企业级Java技术相互配合。JSP可以只专门负责页面中的数据呈现,实现分层开发。
三、JSP和Servlet的区别
四、JSP的使用
1、三大指令
1.1、Page指令
属性名称 | 取值范围 | 描述 |
language | java | 指明解释该JSP文件时采用的语言。一般为Java语言。默认为Java |
extends | 任何类的全名 | 指明编译该JSP文件时继承那个类。JSP为Servlet,因此当指明继承普通类是需要实现Servlet的inti、 destoy等方法 |
import | 任何包名,类名 | 引入该JSP中用到的类、包等。import是唯一可以声明多次的page指令属性。一个import属性可以引用多 个类,中间用英文逗号隔开,如<%@ page import="java.util.List,java.util.ArrayList"%>。JSP中下 面四个包里的类可以直接使用: java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.* |
session | true,false | 指明该JSP内是否内置Session对象。如果为true,则内置Session对象,可直接使用。否则不内置 Session对象。默认为true |
autoFlush | true,false | 是否运行缓存。如果为true,则使用out.println()等方法输出的字符串并不是立刻到达客户端服务器的 ,而是暂时存在缓存里,缓存满或者程序执行完毕或者执行out.flush()操作是才到客户端。默认为true |
buffer | none或者数字+kb | 指定是否线程安全。如果为true,则运行多个线程同时运行该JSP程序,否则只运行一个线程运行,其余 线程等待。默认为false |
isErrorPage | true,false | 指定该页面是否为错误处理页面。如果为true,则该JSP内置有一个Exception对象exception,可直接使 用,否则没有。默认为false |
isThreadSafe | true,false | 指定是否线程安全。如果为true,则运行多个线程同时运行该JSP程序,否则只运行一个线程运行,其余线程等待。默认为false |
errorPage | 某个JSP页面的相对路径 | 指明一个错误显示页面,如果该JSP程序抛出了一个未捕捉的异常, 则转到errorPage指定的页面。errorPage指定的页面通常isErrorPage属性为ture,且内置的exception 对象为未捕捉的异常 |
1.2、Include指令
静态包含: 先包含在执行
<%@ include file="/head.jsp" %>
Asdfadsfasdfasdfadsfadsf
<%@ include file="/foot.jsp" %>
静态包含只会形成一个servlet文件
并且可以布局
<table border=""><tr><td> <%@include file="/Version.jsp" %></td><td> adsfasf</td></tr></table>
动态包含:先执行再包含
(可以传递参数和被包含的页面可以生成servlet)
<jsp:include page="/head.jsp" >
<jsp:param value="mazheng" name="name"/>
</jsp:include>
在被包含的页面中取值:
<%=request.getParameter("name")%>
注意动态包含与静态包含的区别(在实际开发中能用静态,就不要用动态)
1.3、Taglib指令
作用:引入外部的标签
语法:<%@taglib uri = “标签名称空间” prefix=“前缀”%>
<%@ taglib uri=“http://java.sun.xom/jsp/jstl/core” prefix=“c”%>
2、九大内置对象
3、四大域对象
ServletContext(application) | 作用范围整个app(当前工程) |
Session | 一次会话,浏览器打开到关闭为一次会话 |
Request | 一次请求,客户端与服务器端一次交互 |
Pagecontext | 当前页面 |
4、JSP标签
JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。
4.1、<jsp:forward>标签
标签用于把请求转发给另外一个资源。
语法:
<jsp:forward page="relativeURL | <%=expression%>" />
4.2、<jsp:include>标签
标签用于静态包含
语法:
<jsp:include page="relativeURL | <%=expression%>"
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" </jsp:include>
4.3、<jsp:param>标签
当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数。
语法:
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" /></jsp:include>
5、JavaBean
JavaBean就是一个遵循特殊写法的普通类。
5.1、JavaBean的要求
- 必须有默认的构造方法
- 所有字段定为私有的
- 提供公有的getter或setter方法,属性
- 一般实现java.io.Serializable(方便存储和网络传输)
在企业级开发中,JavaBean是用来传递数据的。
5.2、JavaBean标签
5.2.1、<jsp:useBean>标签
<jsp:useBean id="person" class="cn.xinhua.domain.Person" scope="page">
</jsp:useBean>
<jsp:setProperty property="*" name="person"/>
<%=person.getName() %>
<%=person.getAge() %>
5.2.2、 <jsp:setProperty>标签
<jsp:setProperty property="name" name="person"/>
5.2.3、<jsp:getProperty>标签
<jsp:getProperty property="name" name="person"/>
6、EL表达式
6.1、什么是EL表达式?
EL(Expression Language)是一种表达式语言。是为了使 JSP 写起来更加简单,减少 java代码,可以使得获取存储在 Java 对象中的数据变得非常简单。在 JSP2.0 版本后开始支持 EL表达式。
6.2、语法结构
${表达式}
${对象.属性名}
6.3、访问四大域的值
<%
pageContext.setAttribute("name","page");
request.setAttribute("name","request");
session.setAttribute("name","session");
application.setAttribute("name","application");
%>
${name}<!—会在四大域中从小到大的查询,找到第一个就终止查询-->
${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}
6.4、11大EL内置对象
变量 | 类型 | 作用 |
---|---|---|
pageContext | PageContextlmpl | 它可以获取jsp中的九大内置对象 |
pageScope | Map<String,Objexct> | 它可以获取pageContext域中的数据 |
requestScope | Map<String,Objexct> | 它可以获取Request域中的数据 |
sessionScope | Map<String,Objexct> | 它可以获取Session域中的数据 |
applicationScope | Map<String,Objexct> | 它可以获取servletContext域中的数据 |
param | Map<String,String> | 它可以获取请求参数 |
paramValues | Map<String,String> | 它可以获取请求参数的值,获取多个值使用 |
header | Map<String,String> | 它可以获取请求头的信息 |
headerValues | Map<String,String> | 可以获取请求头的信息,可以获取多个值的情况 |
cookie | Map<String,Cookie> | 它可以获取当前请求的Cookie信息 |
initParam | Map<String,String> | 它可以获取在web.xml中配置的<context-param>上下文参数 |
7、JSTL标签库
7.1、什么是JSTL标签库?
JSTL(Java server pages standarded tag library,即 JSP 标准标签库)JSTL 标签是基于 JSP页面的。这些标签可以插入在 JSP 代码中,本质上 JSTL 也是提前定义好的一组标签,这些标签封装了不同的功能,在页面上调用标签时,就等于调用了封装起来的功能。JSTL 的目标是使 JSP 页面的可读性更强、简化 JSP 页面的设计、实现了代码复用、提高效率。
在 JSP2.0 版本后开始支持 JSTL 标签库。在使用 JSTL 标签库时需要在 JSP 中添加对应的taglib 指令标签。