来历
- servlet的缺点导致jsp的产生
- JSP全称是Java Server Pages
- jsp=html+js+Java+Tag
用法
- servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示交给jsp来做
- 在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用
原理
- 所有的jsp最后都编译成servlet,编译后的路径一般在tomcat的work目录下
- eclipse可以查看jsp编译后的servlet
语法
- 脚本表达式:语法:<%= 变量或表达式 %>,当前时间:<%= new java.util.Date() %>
- jsp脚本片段:<%多行java代码%>
- JSP变量定义:字段变量<%! int = 0;%>,局部变量<% int = 0;%>
- jsp注释:<%-- 注释信息 --%>
三大指令
- 所有的指令都是以<%@%>包围,一般放在jsp的顶部
属性 | 说明 | 用法 |
---|
import | 导入jsp页面需要的Java类 | <%@ page import=“Java.util.*” %> |
contentType | 指定当前页面的响应类型,生成HTML页面的编码类型 | contentType=“text/html; charset=UTF-8” |
pageEncoding | 当前jsp页面的编码 | pageEncoding=“UTF-8” |
errorPage | 当前页面抛出异常时跳转的页面 | errorPage=“error.jsp” |
isErrorPage | 指定是不是错误页面,如果是true,则页面可以直接访问异常对象,默认是false | isErrorPage=“true” |
session | 对象页面是否用session | session=“false” |
指令用于引入其它JSP页面(静态包含)
JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入
语法:<%@ include file=“被包含页面的绝对URL或相对URL"%>
指令用于在JSP页面中导入标签库
语法:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
标签属性 | 说明 | 用法 |
---|
<jsp:include> | 包含一个页面(动态包含) | <jsp:include page=“hello.jsp” /> |
<jsp:forward> | 转发给另外一个资源 | <jsp:forward page=“hello.jsp”> |
<jsp:param> | 标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数,中文乱码要在传递参数的页面设置 | <jsp:forward page=“hello.jsp”><jsp:param name=“name” value=“value”/><jsp:forward> |
九大内置对象
对象 | 说明 | 用途 |
---|
pageContext | 当前页面的上下文对象 | 只在当前jsp有效 |
request | 请求对象 | 对当前请求的封装 |
session | 浏览器会话对象 | 浏览器范围内有效 |
application | servletContext的实例 | 对整个Web项目有效 |
out | 打印流对象 | 在jsp页面打印字符串 |
response | 响应对象 | 用来返回信息给客户 |
config | 单个servlet的配置对象 | 等价于servletConifg对象 |
exception | 异常对象 | isErrorPage="true"时才有效 |
page | 当前JSP页面本身 | 当前页面转换后的Servlet类的实例 |
域对象
对象 | 范围 |
---|
pageContext | 只在一个页面中保存,跳转之后无效 |
request | 只在一次请求中保存,服务器跳转后依然有效,客户端重定向才无效 |
session | 在一次会话中中保存,无论任何跳转都可以使用,但是新开浏览器后无法使用 |
appliaction | 在服务器上保存,所有用户都可以使用 |
方法 | 说明 |
---|
setAttribute(String name,String value) | 设置属性名称和内容 |
getAttribute(String name) | 根据属性名称取得属性值 |
removeAttribute(String name) | 删除指定的属性 |
- 能使用pageConetxt就不要使用request,能使用request就不要使用session,耗内存