jsp相关基础知识
一、JSP简介
JSP全称是Java Server Page,它和Servlet一样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范。其本质也是一个Servlet。
二、HTML、Servlet和JSP的关系
HTML:只能开发静态资源,不能包含java代码,无法添加动态数据。
Servlet:写java代码,可以输出页面内容,但是很不方便,开发效率极低。
JSP:HTML+Servlet
三、JSP快速入门(输出当前时间)
四、分析JSP的原理以及生命周期
写在之前:
明确JSP就是一个Servlet。是一个特殊的Servlet。
JSP的原理:
客户端提交请求——Tomcat服务器解析请求地址——找到JSP页面——Tomcat将JSP页面翻译成Servlet的java文件——将翻译好的.java文件编译成.class文件——返回到客户浏览器上。
五、JSP的语法
5.1 模板元素
jsp中的模板元素指的就是jsp中的html标签,在开发过程中,先写好这些模板元素,因为它们决定了页面的外观。
5.2 Java程序片段
在jsp中,可以使用java脚本代码。形式为:
<%
在里面写java程序脚本
需要注意:这里面的内容由tomcat负责翻译,翻译之后是service方法的成员变量
%>
5.3 Java表达式
使用<%=表达式%>
翻译完后是out.print(表达式内容);
<%out.print("当前时间);%>和<%="当前时间"%>是一样的
5.4 JSP声明
JSP的声明
<%!
声明可以是变量,方法,静态方法等
需要注意的是:
写在里面的内容将会被tomcat翻译成全局的属性或者类方法。
%>
5.5 JSP注释
JSP中的注释:<%--注释--%>
注意:
在Jsp中可以使用html的注释,但是只能注释html元素,不能注释java程序片段和表达式。
jsp的注释不仅可以注释java程序片段,也可以注释html元素。
5.6 JSP指令
5.6.1 简介
JSP指令是为JSP引擎服务的,它不会产生可见输出,而是告诉引擎如何处理JSP的其余部分(非指令部分)。
基本语法:
<%@ 指令名称 属性1="值1" 属性2="值2".......%>
一般把指令放在JSP页面的顶部(不是必须的)
指令的属性可以写在一个指令的中,也可以分开写:比如:
<%@指令 属性1=”值1” 属性2=”值2”%>.
等价于:
<%@指令 属性1=”值1” %>.
<%@指令 属性2=”值2”%>.
5.6.2 page指令
属性:
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,不忽略。
总结:
属性众多,一般都用默认值。用起来很简单。
5.6.3 include指令
该指令是包含外部页面。
属性:file,以/开头,就代表当前应用。
5.6.4 taglib指令
该指令用于引入外部标签
uri:外部标签的URI地址,类似名称空间。
prefix:前缀。
六、JSP的转发和包含
6.1 转发
语法:<jsp:forward page="/forwarddemojsp"></jsp:forward> 是jsp的内置标签
该方式等价于:
参数:<jsp:param name="message" value="transfer" />
获取参数:
注意:
在使用forward带参数时,不能在中间添加除空格和换行之外的内容。否则报错。
6.2 包含
静态包含:只有一种,<%@include file=%>,又称为include指令。特点是将两个页面合成一个。在包含者中可以使用被包含者的属性。
动态包含:除了include指令外,其余全是动态包含。
jsp的动态包含语法:
<jsp:include page="" />
又称为include动作。
动态包含的特点是,各编译各的,会产生多个java和class文件。只是合并输出结果。
七、JSP的九大隐式对象(重点)
隐式对象名称 |
类型 |
备注 |
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 |
很重要 |
八、PageContext抽象类(重要)
8.1 PageContext抽象类概述
它是JSP独有的对象,Servlet中没有这个对象。本身也是一个域(作用范围)对象,但是它可以操作其他3个域对象中的属性。而且还可以获取其他8个隐式对象。(自定义标签时用)
8.2 PageContext生命周期
它是一个局部变量,所以它的生命周期随着JSP的创建而诞生,随着JSP的结束而消失。每个JSP页面都有一个独立的PageContext。
8.3 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 |
应用范围 |
最大 |
尽量少用,如果对数据有修改需要做同步处理 |
十、JSP开发
Servlet:擅长处理业务逻辑,不擅长输出显示界面。在web开发中多用于控制程序逻辑(流程)。所以我们称之为:控制器。
JSP:擅长显示界面,不擅长处理程序逻辑。在web开发中多用于展示动态界面。所以我们称之为:视图。
例如:
M:model 封装的是数据模型
V:view 指的是jsp页面
C:Controller 指的是Servlet
注意:MVC模型针对的只是表现层的模型,和三层架构是没有关系的。
jsp相关基础知识的更多相关文章
- JAVA相关基础知识
JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...
- iOS蓝牙开发(二)蓝牙相关基础知识
原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...
- 深入理解mysql之BDB系列(1)---BDB相关基础知识
深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富 一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1 ...
- 【RAC】RAC相关基础知识
[RAC]RAC相关基础知识 1.CRS简介 从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁. ...
- JSP(1)—基础知识
JSP(1)-基本知识 起源 在很多动态网页中绝大多数网页都是固定不变的只有局部内容需要动态产生和改变,如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的的静态内容,也需要程序 ...
- iOS蓝牙开发(一)蓝牙相关基础知识(转)
转载自:http://www.cocoachina.com/ios/20150915/13454.html 原文作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad , ...
- IOS 蓝牙相关-基础知识(1)
蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...
- iOS_SN_BlueTooth( 一)蓝牙相关基础知识
原文 http://www.cocoachina.com/ios/20150915/13454.html 作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad ,ip ...
- ios蓝牙开发(一)蓝牙相关基础知识
蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...
随机推荐
- 利用Selenium爬取淘宝商品信息
一. Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一 ...
- VS调试IDAPython脚本
本文最后修改时间:20180213 1.安装VS插件PTVS , 这一步与第2步中安装版本应该一致,否则最后调试时会连不上 https://github.com/Microsoft/PTVS/ 2.安 ...
- 「客户成功故事」OneAPM 助力网上办事大厅构建阳光、高效、安全的政务服务平台
(一) 项目背景: 网上办事大厅是由省信息中心承建的电子政务核心业务系统,致力于为全省民众提供一站式网上办事服务,实现了政务信息网上公开.法人及个人事项网上办理.公共决策网上互动.政府效能网上监督五大 ...
- 基于Python3的漏洞检测工具 ( Python3 插件式框架 )
目录 Python3 漏洞检测工具 -- lance screenshot requirements 关键代码 usage documents Any advice or sugggestions P ...
- linux下ssh通过公钥登录服务器
经常会通过ssh登录远程服务器,一种是通过密码方式登录,一种是通过公钥登录. 如何设置通过公钥登录服务器 1. 首先生成自己的公钥和私钥 ssh-keygen 命令用来生成公钥和私钥 -t 用来指定密 ...
- python连接sqlserver数据库
1.准备工作 python3.6连接sqlserver数据库需要引入pymssql模块 pymssql官方:https://pypi.org/project/pymssql/ 没有安装的话需要: pi ...
- python第一百一十天--Django 5
#####################################中间件################################################ settings.py ...
- c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作
c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作 关键概念:向容器添加元素时,添加的是元素的拷贝,而不是对象本身.随后对容器中元素的任何改变都 ...
- 百度地图和高德地图结合在web中的使用(二)
百度地图在web中的使用(二) 背景:在做一个关于地理位置字段时,初始位置使用百度地图获取时失败,获取的位置信息不准确,奈何产品说友商好使的啊,F12看后是采用的高德,所以在这采用高德地图获取初始位置 ...
- (转)Eclipse中快速输入System.out.println()的快捷键
https://blog.csdn.net/ShiMengRan107/article/details/73614417 善用 Eclipse 组合键,可以提高输入效率. Step1: Eclipse ...