07jsp技术Word下载.docx
- 文档编号:5364754
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:19
- 大小:135.45KB
07jsp技术Word下载.docx
《07jsp技术Word下载.docx》由会员分享,可在线阅读,更多相关《07jsp技术Word下载.docx(19页珍藏版)》请在冰点文库上搜索。
二、jsp语法
1.模板元素
在jsp页面中所有的html标签部分被称作模板元素,用于对整个网页进行布局
2.jsp脚本
jsp中的java代码被称作jsp脚本
有三种形式
1)脚本表达式
被翻译到out.print()方法中
<
2)脚本片段
被翻译到service方法中
for(inti=0;
i<
10;
i++){
System.out.println(i);
}
%>
3)jsp声明
被翻译到service方法外面
写成员变量\成员方法\静态代码块
%!
privateStringname;
static{
.......
3.jsp指令
include指令
作用:
把2个页面的输出合并。
属性:
file:
要合并的页面的路径。
路径如果以"
/"
表示绝对路径。
taglib指令
作用:
引入外部的标签
uri:
外部标签所在的名称空间
prefix:
前缀
比如:
%@tagliburi="
prefix="
c"
page指令用于向jsp引擎说明jsp的页面情况
page指令一般都放在页面的开头,但是不管放在哪都对整个页面起作用
page指令常用的主要有一下几个:
language:
指示JSP中使用的脚本语言。
默认为java,目前支持java。
extends:
指示JSP对应的Servlet的爸爸。
请不要修改。
*import:
导入JSP中的Java脚本中使用到的java包或类。
作用等同java类中的import
JSP引擎会自动引入以下包:
javax.servlet.*
javax.servlet.http.*
javax.servlet.jsp.*(JSP规范类所在的包)
*session:
JSP页面中是否生成HttpSession对象。
默认值true。
可选值true|false
buffer:
JSP输出流JspWriter的缓存。
默认值8Kb
可选值:
none|yoursizeKb
autoFlush:
JSP输出流缓存满了,自动刷新
isThreadSafe:
默认值是true。
可选值true|false。
指示JSP对应的Servlet是否实现SingleThreadModel
取值为false时才会实现该接口
*errorPage:
指示当前JSP页面出错后,转向的页面。
服务器转发技术。
配置全局错误提示页面:
(不是服务器转发技术)
web.xml
error-page>
<
exception-type>
java.lang.Exception<
/exception-type>
location>
/error.jsp<
/location>
/error-page>
error-code>
404<
/error-code>
/404.jsp<
*isErrorPage:
指示页面中是否生成exception对象。
默认值false。
*contentType:
指示JSP其余内容的MIME类型。
等同response.setContentType
text/html;
charset=UTF-8.
*pagaEncoding
通知jsp引擎在翻译jsp的过程中以什么编码方式来解码jsp文件
通知Servlet引擎response编码方式,相当于response.setContentType()
说白了只要给jsp指定了pageEncoding=”utf-8”
jsp引擎在翻译jsp时,就会自动加上一句
response.setContentType(“text/html;
charset=utf-8”)
其他功能:
page可以没有contentType,只有pageEncoding等同于contentType+pageEncoding
*isELIgnored:
指示是否忽略EL表达式。
默认值false,不忽略
如果为true,忽略表达式,即把表达式当做普通HTML文本对待。
扩展:
jsp乱码问题
在tomcat6以后jsp就没有乱码问题了,如果是使用tomcat5才会出现乱码问题
jsp乱码解决告诉jsp引擎jsp页面是什么码,这样翻译才不会错
告诉response用什么码编码再发给浏览器
三、jsp九个隐式对象(笔试)
1.面试题:
列举出jsp页面的九个隐式对象,并加以说明
对象变量名,可直接在jsp中使用
对象类型
config
ServletConfig
application
ServletContext
response
HttpServletResponse
request
HttpServletRequest
session
HttpSession
out
JspWriter
page
this(当前servlet对象)
exception
Throwable
pageContext
PageContext
注意:
exception对象不是每个页面都有只有是错误页面(errorPage),并且isErrorPage属性设置为true
session对象也不是每个页面都有默认情况下有,但是如果将page指令的session=”false”,则没有session内置对象
2.out对象
JspWriter类型,带缓冲的字符流(包装流)BufferedWriter
写入该流的数据最终会被刷新到response,调用response.getWriter().write(buffer)方法
什么情况下JspWriter会将数据刷新
1)缓冲区写满(默认大小为8kb,可以在page指令中通过buffer属性设置缓冲区大小)
2)jsp页面结束
注意:
1)jsp中输出数据尽量使用out不要使用response直接获得流输出
原因在于,写入out的数据会进缓冲区再刷新到response,如果两个都用,会导致后写的数据显示在前面
2)jsp页面结束时会自动调用response.getWriter()将数据刷新
所以在jsp中不要调用getOutputStream()
当然也不方便做文件下载
结论:
在jsp中用out输出数据
3.pageContext对象
主要功能,用于获得其他8大隐式对象
这样做的意义:
需要移除jsp中的java代码,就需要将java代码写到一个java类的成员方法中,然后想办法在jsp
页面中调用该方法,以达到代码复用的目的
由于在jsp中的java代码难免会访问8个隐式对象,因为这些对象都是和web开发相关的对象
要移除这部分java代码就需要将8个对象传递给java类的方法,为了方便,我们通常的做法是只传递一个
pageContext对象过去,这样在方法中就可以通过该对象很轻松地获得其他8个对象了
pageContext也是一个域对象,但只是在当前jsp页面有效
重点:
1)默写9个对象,(具体描述9个对象怎么用)
2)理解pageContext对象的意义(获得其他8个对象)
pageContext有个特殊的方法findAttribute()
四、web开发中的四个域(重点)
范围由小到大:
page(jsp有效)request(一次请求)session(一次会话)application(当前web应用)
page:
PageContext对象,PageContext(Servlet代码基本不用)
request:
HttpServletRequest对象,ServletRequest保持数据必须在转发的一瞬间,数据一次性的。
session:
HttpSession对象,HttpSession一次会话过程中都需要用得到的数据,比如登陆信息,购物信息。
application:
ServletContext对象,应用级别的,同步。
classRequest{
privateMap<
String,Object>
attributes=newHashMap();
publicvoidsetAttribute(Stringname,Objectvalue){
attributes.put(name,value);
}
publicObjectgetAttribute(Stringname){
returnattributes.get(name);
publicvoidremoveAttribute(Stringname){
attributes.remove(name);
1.这4个对象的生命周期?
生命周期就是指对象的创建到销毁的期间
page:
jsp页面被执行,生命周期开始,jsp页面执行完毕,生命周期结束
用户发送一个请求,开始,服务器返回响应,请求结束,生命周期结束
用户打开浏览器访问,创建session(开始),session超时或被声明失效,该对象生命周期结束
application:
web应用加载的时候创建(开始),web应用被移除或服务器关闭,对象销毁(结束)
2.四个域的作用范围
什么是域?
为什么把这4个对象叫做域对象呢?
域:
即范围的意思
web中的域对象,可以存储对象,在作用范围内都可以取到
内部是Map集合的实现Map<
classPageContext{
privateMapattributes=newHashMap();
privateHttpSessionsession;
……
publicvoidsetAttribute(Stringname,Objectvalue){
attributes.put(name,value);
attributes.get(name);
}
只在当前jsp页面有效
request:
只在当前请求有效,每次请求分别对应不同的request域对象
//session:
默认情况下,同一个浏览器来访问有效(发送同一个sessionid)
session:
只在一次会话中有效,会话结束就无法取到数据了(特殊情况,发送Cookie)
在一个web应用中有效(只要服务器不关,web应用不移除就可以取数据)
四个域对象的范围由小到大排列依次为:
pagerequestsessionapplication
3.哪种情况下用哪种域对象。
原则:
四个域对象在选择的时候,能用范围小的绝不用范围大的
数据只是暂时存在集合,在jsp页面的其他地方要用,用page(页面中自定义的map)
什么时候需要用map了,就用page
request:
数据只是做显示的,看完了就没用了,就存request域
请求转发,Servlet产生的处理结果(数据)交给jsp显示,
session:
数据给用户看完了,一会还要用,会话结束了就没用了
用户登陆,用户信息发给客户端看,看完了,一会访问别的页面还要看用户信息
购物车,购物成功了,给用户看购物车,待会随时可以查看购物车
请求重定向,因为是两次请求,第一次请求的数据,第二次请求还要看
application:
数据给一个用户用完了,别人还要用
聊天室,聊天记录,需要给所有的用户看
统计网站在线人数,所有人看到的应该是一个数
总结:
需要定义Map不如用page,请求转发Servlet带给jsp的数据存request
请求重定向带过去的数据存Session,全局的数据存application
五、jsp细节
只有当jsp页面指定的page指令isErrorPage为true时,才有exception隐式对象
Session对象不是每个jsp页面都能用的前提是page指令的session属性为true
Jsp注释:
jsp出错
1)被翻译的Servlet不能编译,语法错,这时会报告是因为jsp中的哪行导致不能编译
2)翻译的Servlet在运行期间出现异常,报告是jsp的哪行导致的异常
此时会进一步报告导致异常的原因,在Servlet中的哪行出现异常
2.jsp映射也是通过servlet元素
六、内省(neixing)
1.javabean
固定写法的java类
1)必须有无参构造函数
2)属性必须私有,我们称为字段
3)提供标准的getter和setter
例:
name字段的getter:
StringgetName()settter:
voidsetName(Stringname)
2.什么是内省
内省:
通过反射的方式访问javabean
Jdk中的api:
PropertyDescriptor类操作Bean的属性
3.BeanUtils工具包
Apache组织开发了一套用于操作JavaBean的API(内省)
核心类BeanUtils
setProperty(bean,name,value)
copyProperties(target,source);
可以支持String到8中基本数据类型转换
其他引用数据类型都需要注册转换器ConvertUtils.register(Converter,Class)
3.WebUtils工具类
实现任何request提交的表单封装到对应的javabean
七、jsp标签(可选)
为了移除jsp页面的java代码,sun公司提供了一些内置的标签
我们称为jsp标签,或jsp动作元素
1.<
jsp:
include>
相当于RequestDispatcher对象的页面引入
dispatcher.include实现Servlet包含
dispatcher.forward实现servlet转发
forward在转发时web容器会清空response中的数据
在转发之后就无法向response写入数据
动态引入方式,在程序运行期间引入,jsp被翻译成两个
include指令也能实现页面的引入,静态引入,将两个jsp翻译成一个Servlet
包含和被包含的jsp页面指令不能发生冲突
其中,import和pageEncoding可以冲突
2.<
forward>
实现请求转发
结合<
param>
标签传参,自动进行url编码,编码的方式参照request编码
3.<
useBeanidclassscope>
内省
反射创建javabean,以id作为key存入指定的域
其实在创建之前,会先去域中找,找到了则不创建
4.<
setProperty>
设置属性值
<
setPropertyname=”user”property=”username”value=”zs”/>
setPropertyname=”user”property=”username”param=”username”/>
setPropertyname=”user”property=”*”/>
批量
5.<
getProperty>
获得属性值
八、web开发模式
Sun公司针对web开发提供了两种模式
Model1:
jsp+javabean只适合小型应用
Model2:
servlet+jsp+javabeanmvc
九、el+jstl入门
1.EL全名为ExpressionLanguage。
它是一种数据访问语言
el表达式
2.EL能实现如下功能:
1)使用变量访问web域中存储的对象${user}
2)访问javabean的属性${user.address.city}
3)执行基本的逻辑运算
4)直接使用隐式对象
5)调用el函数
3.el表达式用在哪里
1)在jsp页面直接输出数据
2)在标签中使用el直接为属性赋值
4.el表达式获取数据
在jsp页面使用el表达式可以轻松地获得web域中的对象
并对javabean、数组、list、map进行取值
5.需要对web域中的list和map集合进行迭代就需要结合jstl迭代标签
JSTL是sun公司开发的一套标签库
使用JSTL可以在页面中实现一些简单的逻辑,从而替换页面中的脚本代码
在页面中使用JSTL标签需完成以下2个步骤:
1)导入jstl.jar和standerd.jar这两个JSTL的jar文件。
2)在JSP页面中使用<
%@tagliburi=“”prifix=“”%>
元素导入标签库。
最常用的jstl标签为forEach和if标签
c:
foreachvar=””items=””>
iftest=””>
6.el表达式可以进行逻辑运算
7.el表达式中的保留关键字
十、el中的11个隐式对象
隐含对象名称
描述
pageContext
对应于JSP页面中的pageContext对象
pageScope
代表page域中用于保存属性的Map对象
requestScope
代表request域中用于保存属性的Map对象
sessionScope
代表session域中用于保存属性的Map对象
applicationScope
代表application域中用于保存属性的Map对象
param
表示一个保存了所有请求参数的Map对象
paramValues
表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
header
表示一个保存了所有http请求头字段的Map对象
headerValues
同上,返回string[]数组。
如果头里面有“-”,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
cookie
表示一个保存了所有cookie的Map对象
initParam
表示一个保存了所有web应用初始化参数的map对象
隐式对象的具体用途
1.pageContext
获得servlet上下文路径(web应用名称)
${pageContext.request.contextPath}
2.pageScope、requestScope、sessionScope、applicationScope
准确地获得四个域中的对象,用于取值
3.param、paramValues
获得请求参数,一般用于做表单的回显
4.header、headerValues
获得请求消息头
5.cookie
获得浏览器发送的cookie
Cookie也是map集合,key是cookie的namevalue是对应的cookie对象
6.initParam
获得web初始化参数
十一、自定义EL表达式
调用普通Java类的静态方法(编写步骤就是自定义标签的步骤):
EL函数
1、编写一个普通的java类型,提供一个静态方法
packagecom.itheima.functions;
publicclassStringFunction{
publ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 07 jsp 技术