来历
- 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,耗内存