为什么要使用JSP
Servlet存在以下缺陷:
1.Servlet的编码、部署和调试任务繁琐
2.生成动态网页繁琐,不利于项目分工
可以使用JSP来弥补Servlet的这些缺陷
什么是JSP
JSP(Java Server Pages),是由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件,其扩展名为.jsp。使用jsp技术编写的页面为动态页面
JSP通常用于简化创建产生文本的Servlet,而Servlet更适合于发送原生字节到客户端或需要用Java源代码完全控制源代码的场合。二者可以很好的分开
JSP引擎
容器厂商定义的一个类,用于帮助我们翻译JSP文件,如:org.apache.jasper.servlet.JspServlet
Ps:所有的JSP翻译后的类都必须实现HttpJspPage接口,而HttpJspPage接口是Servlet的子接口,所以从这个意义上来说,JSP的本质是Servlet
JSP生命周期
1. Web容器第一次接收到对某个JSP页面的请求后,首先自动将该JSP页面翻译为Servlet代码
2. Web容器负责将Servlet代码编译为字节码。与源文件放在同一个目录下
3. Web容器装载新生成的servlet类
4. Web容器创建servlet实例
5. Web容器调用Servlet示例的jspInit()方法,JSP页面装载资源
6. 容器创建一个新线程来处理这个客户的请求 ,servlet对象的_jspService()方法运行
7. 容器调用生成的servlet对象的jspDestroy()方法,销毁装载的资源
JSP隐式对象
实质上就是翻译后的Servlet中的局部变量,一共有9个,其中
属于作用域范畴的有4个:
pageContext – 代表pageContext对象,只在当前页面有效
request – 代表HttpServletRequest对象,在一次请求中有效
session – 代表HttpSession对象,在一次会话中有效
application – 代表ServletContext对象,在整个web应用中有效
属于输出范畴的有2个
response -- 代表与响应相关的HttpServletResponse对象
out -- 代表与响应输出流相关的JspWriter对象,可输出字符流
其它有3个
config – 代表ServletConfig,用于配置servlet对象
page – 当前jsp对象,相当于this
exception – 代表Throwable对象,只能在JSP错误页面中使用
脚本元素
声明 <%! 声明内容 %>
– 主要用于定义,可以定义全局变量、静态变量和方法
脚本 <% Java程序代码 %>
– 书写Java代码,丰富_jspService()方法
表达式 <%= 脚本表达式%>
– 等价于out.print(“脚本表达式”)
注释
JSP注释 <%-- 注释内容 --%>
– 在服务器端翻译后的代码中和客户端均不可见,安全性高
Html注释 <!-- 注释内容 -->
– 在服务器端翻译后的代码中和客户端均可见
Java注释 //
– 在服务器端翻译后的代码中可见,客户端不可见
JSP指令
JSP指令用于提供整个JSP页面的相关信息,用于JSP页面与容器之间的通信,有三种类型的指令
Page指令
<%@ page attribute1=”value1” attribute2=”value2” %>
-- 用于设定整个JSP页面的属性和相关功能,page指令共有11个属性,较常用的有:
contentType:设定MIME类型和JSP编码
import:在JSP中引入Java的包和类,多个包之间以逗号隔开
session:指定当前页面是否能获得当前用户的session对象
errorPage:如果当前页面发生异常,网页会重定向到errorPage所指定的页面进行处理
isErrorPage:允许指定的JSP页面为错误处理页面
include指令
表示在JSP编译时插入一个包含文件或者代码的文件,是一种静态包含
<%@ include file="relativeURL" %>
Ps:1)include指令所包含的文件名不能是一个变量url,只能是静态的文件名。
2)在被包含页面中,一般不包含<html><body>标记,两个页面之间不能存在相同的局部变量
taglib指令
让用户能够自定义标签
<%@ taglib prefix="tagprefix" uri="url" %>
JSP标准动作
<jsp:include>动作
实现一种动态包含,把显示的结果插入到当前页面来显示
<jsp:include page="localURL" flush="true"/>
page:表示一个相对路径
flush:必需属性,且只能为真,表示当缓冲区满时会自动清空
Ps:静态包含与动态包含的区别:
1)静态包含是文件原样的拷贝,所以在被包含页面中,一般不包含<html>和<body>标记,两个页面之间不能存在相同的局部变量;动态包含包含的是结果,在两个页面之间,可以存在相同的变量
2)静态包含在编译时发生,只能包含文件;动态包含在请求时发生,可包含JSP及Servlet请求的url
<jsp:forward>动作
相当于内部转发
<jsp:forward page="relativeURL">
EL表达式
EL(expression_r_r Language) -- 表达式语言
语法:${...}
EL的主要目标是从JSP页面中消除Java代码,因此,EL表达式不能在脚本中定义变量。
EL表达式隐式变量:
类别
|
隐式变量名
|
描述
|
JSP |
pageContext |
用来访问JSP的隐式对象 |
作用域 |
pageScope |
与page作用域属性的名称和值相关联的Map类 |
requestScope |
与request作用域属性的名称和值相关联的Map类 |
sessionScope |
与session作用域属性的名称和值相关联的Map类 |
applicationScope |
与application作用域属性的名称和值相关联的Map类 |
请求参数 |
param |
包含请求参数字符串的Map类 |
paramValues |
包含请求参数字符串数组(String[])的Map类 |
请求头 |
header |
包含请求头字符串的Map类 |
headerValues |
包含请求头字符串数组(String[])的Map类 |
Cookie |
cookie |
按名称存储请求附带的Cookie的Map类 |
自定义标签
1.新建一个类继承BodyTagSupport类,BodyTagSupport类实现了Tag接口,重写需要实现的方法,一般是doEndTag()
2.在WEB-INF下面新建一个.tld文件,完成注册
<?xml version="1.0" encoding="UTF-8"?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<uri>http://www.baidu.com</uri>
<tag>
<name>tagTast</name>
<tag-class>com.lovo.MyTag</tag-class>
</tag>
</taglib>
3.在jsp页面添加taglib指令
<%@ taglib prefix="my" uri="com.lovo.MyTag">
4.在jsp页面使用自定义标签
为自定义标签设置属性
1.定义属性,并且生成get和set方法
2.在tld文件里<tag>标签内注册
<attribute>
<name>属性名<name>
<required>true</required>
</attribute>
3.在jsp页面里面设置标签属性的值
标准标记库JSTL:
需要两个Jar文件:jstl.jar、standard.jar;构建成功后须在JSP中添加如下指令;
< %@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
常用标记:
<c:if> -- 判断
<c:forEach> -- 循环
在JSP中使用JavaBean:
1、<jsp:useBean>动作
语法:<jsp:useBean id="beanName" scope="page|request|session|applicaion" class="className">
id -- 对象的属性名
scope -- 作用域
class -- 类的全路径名。
2、<jsp:getProperty>动作
语法:<jsp:getProperty name="beanName" property="propertyName">
name -- 对应<jsp:useBean>里的id。
property -- 要获取的属性名
3、<jsp:setProperty>动作
语法:<jsp:setProperty name="beanName" property="属性名">
<jsp:setProperty name="beanName" property="属性名" param="参数名">
<jsp:setProperty name="beanName" property="属性名" value="属性值"> //获取请求参数
<jsp:setProperty name="beanName" property="*">
分享到:
相关推荐
Web编程Jsp&Servlet技术面试题.doc Web编程Jsp&Servlet技术面试题.doc Web编程Jsp&Servlet技术面试题.doc Web编程Jsp&Servlet技术面试题.doc Web编程Jsp&Servlet技术面试题.doc Web编程Jsp&Servlet技术面试题.doc ...
Jsp web编程指南 详细讲解JSP网站开发知识
JSP Web编程指南 JavaServer Pages(JSP)是一种基于Java程序语言创建交互式的、动态Web站点的技术。本书从基础开始,先讲述JSP的概念、如何存储数据和执行简单的计算;接着介绍JSP的新功能——标签库和Java最有用...
JSP WEB 编程指南附加源代码希望对大家有帮助
JSP Web编程指南 有助于愿意学习该反面技术的爱好者学习
Javaserver Pages(JSP)是一种基于Java程序语言创建交互式的、动态Web站点的技术。本书从基础开始,先讲述JSP的概念、如何存储数据和执行简单的计算;接着介绍JSP的新功能——标签库和Java最有用的特征——面向对象;...
面试知识点总结--Web编程Jsp&Servlet技术.pdf
高级WEB编程技术(JSP与XML)教学网页
非常经典一本jsp web开发书,非常适合web开发的初学者!
web编程jsp考试试卷有答案.pdf
Web编程(Java )- JSP中使用数据库
本书是目前电子资源中比较基础的一本,适合具备初步计算机网络知识(例如TCP/IP网路五层模型)的读者快速理解网络编程原理和JSP的核心技术,进而快速上手开发。 本书的作者撰写是相当用心和仔细的,各知识点都有比较...
《Java Web编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用Java Web进行程序开发的各种技术、技巧。全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境...
2007年图书:JSP_JSF_Tomcat Web编程从入门到精通
Java网编程原理与JSP Web开发核心技术
211学校高级编程技术,课程ppt,JSP的配置及使用
JSP课程设计管理系统 是一套完善的WEB网页系统,对理解JSP java编程开发语言有帮助系统采用B/S模式网页浏览器,系统具有完整的源代码和数据库,系统主要采用B/S模式开发应用技术:java|jsp+SQLSERVER 开发工具:...
Java网编程原理与JSP.Web开发核心技术 马晓敏 扫描版
JSP编程指南.