jsp概述
JSP全称Java Server Pages,是SUN公司定义的一种用于开发动态WEB资源的技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头%>结束。
jsp适合编写输出动态内容,但不适合编写java逻辑。
一、 jsp的特点
1. 跨平台
2. 分离静态内容和动态内容
3.可重复使用的组件
4.没用JAVAServlet的所有功能
5.预编译
二、JSP的工作流程:
1. 客户端通过浏览器向服务器发出请求。在该请求中,包含了请求的资源的路径,这样,当服务器接收到该请求后,就可以知道被请求的资源。
2. 服务器根据接收至的客户端的请求,来这加载被请求的JSP文件
3.Web服务器中的JSP引擎会将被加载的JSP文件转化为Servlet.
4. JSP引擎将生成的Servlet代码编译成Class文件
5. 服务器执行结果发送给浏览器进行显示
6. 最后,服务器将执行结果发送给浏览器时行显示
三、JSP页面的组成
一个JSP页面可由5 种元素组合而成
普通的THML标记
JSP标签,如指令标签、动作标签
变量和方法的声明
Java程序段
Java表达式
四、jsp脚本标识
1. 声明<%! %>只能用于声明全局变量、方法和类的代码,不能有其他语句
<%!用于声明全局变量、方法和类的代码 %>
如:
<%!
int x=10;//声明变量
int y=20;
public class Person{ //声明类
private String name;
private int age;
}
int add(int x,int y){//声明方法
return x+y}
%>
2. 代码段<% %>:jsp允许在<%%>中插入java的程序段。在这里面定义的变量为局部变量。
如:
<%
int i=0;
while(i<10){
out.println(“i=”+i);
i++;
}
%>
3. 表达式<%=表达式%>
用于向页面中输出信息
如:<%=”hello” %>
4. 注释
(1)、html中的注释
<!—注释内容-->
(2)、带有jsp表达式的注释
<!—<%注释内容%>-->
(3)、隐藏注释
<%--注释内容--%>
(4)、脚本注释:
(1)单行注释(//)
(2)多行注释(/* */)
(3)文档注释(/** */)
五、jsp三大指令
语法:
<%@ 指令名称 属性1="属性名称" 属性2="属性名称" ...%>
或者将属性分开单独成句
<%@指令名称 属性1="属性名称" %>
<%@指令名称 属性2="属性名称" %>
1、page指令
作用:用于定义jsp页面的各种属性
属性:
import:和Java代码中的import是一样的
如:<%@ page import="java.util.*"%>
jsp会自动导入一下包:
import.java.lang.*;
import.javax.servlet.*;
import.javax.servlet.http.*;
import.javax.servlet.jsp.*;
session:是否会自动创建session对象。默认值是true。如:<%@ page session=”true”%>
buffer:jsp中有javax.servlet.jsp.JspWriter输出字符流,buffer是设置缓冲区大小,默认8kb。(建议使用默认值)
errorPage:设置错误页面,如果页面有错误,跳转到指定的页面。
isErrorPage:是否创建throwable对象。默认false。
contextType:等同于response.setContextType(“text/html;charset=utf-8”);
pageEncoding:告诉jsp引擎要翻译的文件使用的编码。如<%@ page pageEncoding=”utf-8”%>
isELIgnored:是否忽略EL表达式。默认false。
isThreadSafe:是否支持线程安全。默认false。
extends:指定 JSP 页面所生成的 servlet 的超类。
language:指定语言,默认Java。目前只支持Java。
include指令:把其他资源包含到当前页面中
2、静态包含语法:
<%@ include file="/*.jsp"%>
动态包含语法:
<jsp:include includepage="/*.jsp"></jsp:include>
二者的区别:翻译的时间段不同
前者:在翻译的时就把两个文件合并。
后者:不会合并文件,当执行include代码时,才会包含另外一个文件的内容。
原则:能使用静态include,就不要使用动态include。
3、taglib指令
作用:在jsp页面中导入JSTL标签库。替换jsp中的Java代码片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="core" %>
prefix:别名
六、jsp六个动作
jsp:include:动态包含
jsp:forword:转发相当于request.getRequestDispatch(“”).forword();
jsp:param:设置请求参数
jsp:userBean:创建一个对象
jsp:setProperty:给指定的对象赋值
jsp:getProperty:取出指定对象的属性值
用法:
<jsp:userBeanid="user"></jsp:userBean>
七、jsp九大内置对象
request:类型HttpServletRequest
response:类型HttpServletResponse
session:类型HttpSession,有session=”true”开关控制。
application:类型ServletConfig
exception:类型Throwable,由isErrorPage=”false”开关控制。
page:类型Object,当前对象this,代表当前servlet实例
config:类型ServletConfig
out:类型JspWriter,字符输出流,相当于printWriter对象。
pageContext:类型PageContext
PageContext
PageContext是一个Page域对象,它可以操作其他三个域对象(request session application)的数据。
API介绍:
void setAttribute(Stringname,Object o)
Object getAttribute(Stringname)
void removeAttribute(Stringname)
Object findAttribute(Stringname):
自动从page request session application依次查找,找到了就取值,结束查找。
其他操作方法
void setAttribute(Stringname,Object o,int Scope)
Object getAttribute(Stringname,int Scope)
void removeAttribute(Stringname,int Scope)
Scope的取值:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
它可以创建其他8个隐式对象
在普通类中可以通过PageContext获取其他JSP隐式对象。自定义标签时使用。
提供了简易方法:
pageContext.forward(“”);
pageContext.include(“”);
八、四大作用域对象
PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。
ServletRequest: request 存放的数据在一次请求(转发)内有效。使用非常多。
HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。
ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。