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 ...
随机推荐
- SENDMESSAGE和POSTMESSAGE
原文:http://www.cnblogs.com/wind-net/archive/2012/11/01/2750123.html SendMessage 和 PostMessage 的区别 1.首 ...
- DES数据解密
/// <summary> /// DES数据解密 /// </summary> /// <param name="targetValue">& ...
- Android gravity和layout_gravity的区别
一.gravity和layout_gravity相同处 两者都是设置对齐方式的属性.内部的属性值相同. 根据英文意思也能理解其中的意思.如center_horizontal表示在水平方向上的位置为中间 ...
- ie6常见的兼容性问题
1.<!DOCTYPE HTML>文档类型的声明. 产生条件:IE6浏览器,当我们没有书写这个文档声明的时候,会触发IE6浏览器的怪异解析现象: 解决办法:书写文档声明. 2.不同浏览器当 ...
- eclipse中web项目没有run on server
刷新web项目,项目->右击->Properties->Project Facets,选择Java和Dynamic Web Module.点击Apply and Close,再次运行 ...
- C# 使用System.Data.OleDb;避免oracle中文乱码问题
首先,需要保证oracle客户端服务器的字符集是一样的,并且保证该字符集支持中文.你可以使用plsql查看是否乱码. 代码: using System; using System.Collection ...
- Spring整合ActiveMq消息队列
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...
- 测者的测试技术笔记:Screenplay 模式(Journey 模式)
Screenplay模式 Junit的Screenplay 举例 Actor theReceptionist =newActor().with(WebBrowsing.ability()) theRe ...
- UnrealEd3视图导航及常用快捷键
本博客使用的版本:2010-08 [更多其他的UE3版本][tps所用版本: 2011-02] [最新的UE3版本 -- 2015-02] [unreal engine wiki 中文w ...
- 解决Unable to load native-hadoop library for your platform
使用hadoop fs相应命令时候总是出现 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat ...