JSP全称是Java Server Page,它和Servlet同样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范。其本质也是一个Servlet。html
HTML:只能开发静态资源,不能包含java代码,没法添加动态数据。java
Servlet:写java代码,能够输出页面内容,可是很不方便,开发效率极低。web
JSP:HTML+Servlet浏览器
写在以前:缓存
明确JSP就是一个Servlet。是一个特殊的Servlet。tomcat
JSP的原理:服务器
客户端提交请求——Tomcat服务器解析请求地址——找到JSP页面——Tomcat将JSP页面翻译成Servlet的java文件——将翻译好的.java文件编译成.class文件——返回到客户浏览器上。session
jsp中的模板元素指的就是jsp中的html标签,在开发过程当中,先写好这些模板元素,由于它们决定了页面的外观。架构
在jsp中,可使用java脚本代码。形式为:app
<%
在里面写java程序脚本
须要注意:这里面的内容由tomcat负责翻译,翻译以后是service方法的成员变量
%>
使用<%=表达式%>
翻译完后是out.print(表达式内容);
<%out.print("当前时间);%>和<%="当前时间"%>是同样的
JSP的声明
<%!
声明能够是变量,方法,静态方法等
须要注意的是:
写在里面的内容将会被tomcat翻译成全局的属性或者类方法。
%>
JSP中的注释:<%--注释--%>
注意:
在Jsp中可使用html的注释,可是只能注释html元素,不能注释java程序片断和表达式。
jsp的注释不只能够注释java程序片断,也能够注释html元素。
JSP指令是为JSP引擎服务的,它不会产生可见输出,而是告诉引擎如何处理JSP的其他部分(非指令部分)。
基本语法:
<%@ 指令名称 属性1="值1" 属性2="值2".......%>
通常把指令放在JSP页面的顶部(不是必须的)
指令的属性能够写在一个指令的中,也能够分开写:好比:
<%@指令 属性1=”值1” 属性2=”值2”%>.
等价于:
<%@指令 属性1=”值1” %>.
<%@指令 属性2=”值2”%>.
属性:
language:告知引擎,脚本使用的是java,默认是java,支持java。不写也行。
extends:告知引擎,JSP对应的Servlet的父类是哪一个,不须要写,也不须要改。
import:告知引擎,导入哪些包(类)。
注意:引擎会自动导入:java.lang.*,javax.servlet.*,javax.servlet.http.*,javax.servlet.jsp.*
导入的形式:
<%@page import=”java.util.Date,java.util.UUID”%>或者:
<%@page import=”java.util.Date”%>
<%@page import=”java.util.UUID”%> 用Eclipse:Alt+/ 自动导入
session:告知引擎是否产生HttpSession对象,便是否在代码中调用request.getSession()。默认是true。
buffer:JspWriter用于输出JSP内容到页面上。告知引擎,设定他的缓存大小。默认8kb。
errorPage:告知引擎,当前页面出现异常后,应该转发到哪一个页面上(路径写法:/表明当前应用)
注意:当在errorpage上使用了isErrorPage=true以后,ie8有时候不能正常显示
配置全局错误页面:web.xml
当使用了全局错误页面,就无须再写errorPage来实现转到错误页面,而是由服务器负责跳转到错误页面。
isErrorPage:告知引擎,是否抓住异常。若是该属性为true,页面中就可使用exception对象,打印异常的详细信息。默认值是false。
contentType:告知引擎,响应正文的MIME类型。contentType="text/html;charset=UTF-8"
至关于response.setContentTYpe("text/html;charset=UTF-8");
pageEncoding:告知引擎,翻译jsp时(从磁盘上读取jsp文件)所用的码表。
pageEncoding="UTF-8"至关于告知引擎用UTF-8读取JSP
isELIgnored:告知引擎,是否忽略EL表达式,默认值是false,不忽略。
总结:
属性众多,通常都用默认值。用起来很简单。
该指令是包含外部页面。
属性:file,以/开头,就表明当前应用。
该指令用于引入外部标签
uri:外部标签的URI地址,相似名称空间。
prefix:前缀。
语法:<jsp:forward page="/forwarddemojsp"></jsp:forward> 是jsp的内置标签
该方式等价于:
参数:<jsp:param name="message" value="transfer" />
获取参数:
注意:
在使用forward带参数时,不能在中间添加除空格和换行以外的内容。不然报错。
静态包含:只有一种,<%@include file=%>,又称为include指令。特色是将两个页面合成一个。在包含者中可使用被包含者的属性。
动态包含:除了include指令外,其他全是动态包含。
jsp的动态包含语法:
<jsp:include page="" />
又称为include动做。
动态包含的特色是,各编译各的,会产生多个java和class文件。只是合并输出结果。
隐式对象名称 |
类型 |
备注 |
request |
javax.servlet.http.HttpServletRequest |
|
response |
javax.servlet.http.HttpServletResponse |
|
session |
javax.servlet.http.HttpSession |
Page指令能够控制开关 |
application |
javax.servlet.ServletContext |
|
page |
Java.lang.Object |
当前jsp对应的servlet引用实例 |
config |
javax.servlet.ServletConfig |
|
exception |
java.lang.Throwable |
page指令有开关 |
out |
javax.servlet.jsp.JspWriter |
字符输出流,至关于printwriter |
pageContext |
javax.servlet.jsp.PageContext |
很重要 |
它是JSP独有的对象,Servlet中没有这个对象。自己也是一个域(做用范围)对象,可是它能够操做其余3个域对象中的属性。并且还能够获取其余8个隐式对象。(自定义标签时用)
它是一个局部变量,因此它的生命周期随着JSP的建立而诞生,随着JSP的结束而消失。每一个JSP页面都有一个独立的PageContext。
页面范围的方法:
void setAttribute(String name,Object value);
void removeAttribute(String name);
Object getAttribute(String name);
操做其余域属性的方法:
比上面的三个方法多了一个参数 int scope。
void setAttribute(String name,Object value,int scope);
void removeAttribute(String name,int scope);
Object getAttribute(String name,int scope);
int scope:它自己是一个常量,有四个值,分别对应四个范围。
APPLICATION_SCOPE 应用级
SESSION_SCOPE 会话级
REQUEST_SCOPE 请求级
PAGE_SCOPE 页面级
在四个范围内根据名称查找对象的方法:
Object findAttribute(String name);
查找顺序是:PAGE——>REQUEST——>SESSION——>APPLICATION。只要在一个范围内找到就再也不继续查找。
获取其余八个隐式对象的方法:(自定义标签时用)
pageContext.getRequest();
pageContext.getResponse();
pageContext.getSession();
pageContext.getServletConfig();
pageContext.getServletContext();
pageContext.getException();
pageContext.getPage();
pageContext.getOut();(此方法是其父类JspContext提供)
实际开发中用于存放数据的。
域对象名称 |
范围 |
级别 |
备注 |
PageContext |
页面范围 |
最小 |
因范围过小,开发中用的不多 |
ServletRequest |
请求范围 |
比page大,比session小 |
不一样的资源,只有转发用 |
HttpSession |
会话范围 |
比request大,比application小 |
屡次请求共享数据,但不一样的客户端不能共享 |
ServletContext |
应用范围 |
最大 |
尽可能少用,若是对数据有修改须要作同步处理 |
Servlet:擅长处理业务逻辑,不擅长输出显示界面。在web开发中多用于控制程序逻辑(流程)。因此咱们称之为:控制器。
JSP:擅长显示界面,不擅长处理程序逻辑。在web开发中多用于展现动态界面。因此咱们称之为:视图。
例如:
M:model 封装的是数据模型
V:view 指的是jsp页面
C:Controller 指的是Servlet
注意:MVC模型针对的只是表现层的模型,和三层架构是没有关系的。