不要培训代码搬运工。想了解更多请加:qq:116 159 0055。
1.提示:什么是JSP?
JSP,全称Ja Server Pages,是SUN公司定义的一种开发动态web资源的技术,就像servle技术一样。JSP/Servlet规范。JSP实际上是一个Servlet。
B.jsp技术最大的特点就是写JSP就像写html,但是和html相比,html只能给用户提供静态数据,而Jsp技术允许ja代码嵌套在页面中给用户提供动态数据。
2.技巧:JSP原理
3.JSP最佳实践
JSP和Servlet都可以用来开发动态web资源。但由于这两种技术各自的特点,在长期的软件实践中,人们逐渐将servlet作为web应用中的控制器组件,将JSP技术作为数据展示模板。
原因是程序数据通常在输出前被美化:
让JSP既用ja代码生成动态数据,又美化它,会让页面很难维护。
让servlet既生成数据,又嵌入html代码美化数据,也会导致程序可读性差,维护困难。
所以根据这两种技术的特点,最好的办法就是让他们对自己的收益负责。servlet只负责响应请求生成数据,并通过转发技术将数据带到jsp,让jsp显示数据。
4.提示:JSP语法
JSP模板元素
JSP表达式
JSP脚本片段
JSP注释
JSP指令
JSP标签
JSP内置对象
如何发现JSP页面中的错误
5.提示:JSP模板元素
JSP页面中的HTML内容称为JSP模板元素。
JSP模板元素定义了web页面的基本框架,即页面的结构和外观。
6.提示:JSP脚本表达式
JSP脚本表达式用于向客户端输出程序数据。
语法:
示例:当前时间:
JSP引擎在翻译脚本表达式时,会将程序数据转换成字符串,然后使用out.print(…)将数据输入到客户端相应的位置。
JSP脚本表达式中的变量或表达式后面不能跟分号(;)。
查看源文件
7.提示:JSP脚本片段(1)
JSP scriptlet用于在JSP页面中编写多行Ja代码。语法:
& lt%
多行ja代码
% & gt
注意:JSP脚本片段中只能出现ja代码,不能出现其他模板元素。当JSP引擎翻译JSP页面时,它会将JSP脚本片段中的Ja代码原封不动地放到Servlet的_jspService方法中。
JSP脚本片段中的Ja代码必须严格遵循Ja语法,例如,分号(;)结束。
8.提示:JSP脚本片段(2)
一个JSP页面中可以有多个脚本片段,文本、HTML标记和其他JSP元素可以嵌入在两个或更多脚本片段之间。
例如:
& lt%
int x = 10
out . println(x);
% & gt
& ltp & gt这是JSP页面文本
& lt%
int y = 20
out . println(y);
% & gt
多个脚本片段中的代码可以相互访问,就像将所有代码放在一对
Ja script:标签封装不应该出现在正式开发的JSP中。
9.提示:JSP脚本片段(3)
单个脚本片段中的Ja语句可以是不完整的,但是组合多个脚本片段的结果必须是完整的Ja语句,例如:
& lt%
for(int I = 1;我& lt5;i++)
{
% & gt
& ltH1 & gt;www . it 315 . org & lt;/H1 & gt;
& lt%
}
% & gt
练习:打印一个有100行的表格。
10.提示:JSP声明
默认情况下,所有用JSP页面编写的代码都会被翻译成servlet的服务方法,而Jsp声明中的ja代码会被翻译到_jspService方法之外。语法:
& lt%!
Ja代码
% & gt
因此,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法。
多个静态代码块、变量和函数可以在一个JSP声明中定义,也可以分别在多个JSP声明中定义。
JSP隐式对象的范围仅限于Servlet的_jspService方法,因此这些隐式对象不能在JSP声明中使用。
11.提示:JSP语句?情况
& lt%!
静电
{
System.out.println(“正在加载Servlet!”);
}
private int global var = 0;
public void jspInit()
{
System.out.println(“初始化jsp!”);
}
% & gt
& lt%!
public void jspDestroy()
{
System.out.println(“破坏jsp!”);
}
% & gt
12.技巧:JSP注释
JSP注释的格式:
& lt%-评论信息-% >
当JSP引擎将JSP页面转换成Servlet程序时,它会忽略JSP页面中带注释的内容。HTML中的评论有什么区别?见源文件求解。
13.提示:JSP指令
JSP指令是为JSP引擎设计。它们不直接产生任何可见的输出,而只是告诉引擎如何处理JSP页面的其余部分。JSP 2.0规范中定义了三条指令:
打印顺序
包括说明
Taglib指令
14.提示:简介提示:JSP指令
JSP指令的基本语法格式:
& lt% @指令属性Name = ” Value ” % & gt
示例:
如果一条指令有多个属性,这些属性可以写在一条指令中,也可以分开写。
例如:
& lt%@页content type = ” text/html;charset=gb2312″% >
& lt% @ page import = ” Ja . util . date ” % & gt;
你也可以写:
& lt%@页content type = ” text/html;charset = GB 2312 ” import = ” Ja . util . date ” % & gt;
15.提示:页面说明
页面指令用于定义JSP页面的各种属性。无论页面指令出现在JSP页面的什么地方,它都作用于整个JSP页面。为了保持程序的可读性,遵循良好的编程习惯,最好将页面指令放在整个JSP页面的开头。
JSP 2.0规范中定义的页面指令的完整语法;
& lt%@页
[ language=”ja” ]
[ extends=”package.class” ]
[import = ” { package . class | package。*}, …”]
[session = ” True | false “]//True]//True创建一个会话对象。
[ buffer=”none | 8kb | sizekb” ]
[ autoFlush=”true | false” ]
[is thread safe = ” true | false “]false继承SingleThreadModel接口。
[ info=”text” ]
[ errorPage=”relative_url” ]
[ isErrorPage=”true | false” ]
[content type = ” mime type[;charset = characters et]” | ” text/html;charset=ISO-8859-1″ ]
[page encoding = ” characters et | ISO-8859-1 “]
[ isELIgnored=”true | false” ]
errorPage属性的设置值是一个路径(相对或绝对)。如果以“/”开头,表示相对于当前WEB应用的根目录(注意不是站点的根目录);否则,它意味着相对于当前页面。
你可以用
如果设置了JSP页的errorPage属性,则web.xml文件中设置的错误处理将不会在该页上起作用。
16.提示:使用页面指令解决中文乱码JSP。
JSP程序和Servlet程序有完全一样的中文乱码问题。
输出响应文本时出现中文乱码的问题。
读取浏览器发送的参数信息时出现中文乱码的问题
当JSP引擎将JSP页面翻译成Servlet源文件时,也可能导致中文乱码问题。
缺省情况下,JSP引擎翻译的Servlet源文件采用ISO8859-1编码,而JSP开发人员可以使用各种字符集编码来编写JSP源文件。因此,JSP引擎在将JSP源文件翻译成Servlet源文件时,需要进行字符编码转换。
如果JSP文件没有指定其字符集编码,JSP引擎会将其视为默认的ISO8859-1字符集编码。
JSP引擎翻译JSP页面时如何解决中文乱码问题
JSP源文件的字符集编码是通过page指令的contentType属性来说明的。
page指令的pageEncoding属性描述了JSP源文件的字符集编码。
17.提示:包含说明
include指令用于引入其他JSP页面。如果使用include指令引入其他JSP页面,JSP引擎会将这两个JSP页面转换成一个servlet。因此,include指令的引入通常称为静态引入。
语法:
& lt%@ include file= “所包含组件的绝对URL或相对URL ” % >
file属性用于指定导入文件的路径。路径以“/”开头,表示当前的web应用程序。
详细信息:
导入的文件必须遵循JSP语法。
导入的文件可以使用任何扩展名。即使它的扩展名是html,jsp引擎也会像处理JSP页面一样处理它的内容。为了了解清楚,JSP规范建议使用。jspf(JSP片段)作为静态导入文件的扩展。
由于使用include指令会涉及到两个JSP页面,并将这两个JSP页面翻译成一个servlet,所以这两个JSP页面的指令不能冲突(pageEncoding和bootstrap除外)。
18.提示:taglib指令
Taglib指令是用来导入JSP页面中的标签库的,说到定制标签技术。
19.技巧:JSP操作原理和九个隐式对象
当第一次访问每个JSP页面时,WEB容器会将请求交给JSP引擎(即一个Ja程序)进行处理。JSP引擎首先将JSP翻译成_jspServlet(本质上也是Servlet),然后根据servlet的调用方式调用它。
因为JSP在第一次访问的时候会被翻译成servlet,所以第一次访问通常比较慢,但是第二次访问的时候,如果JSP引擎发现JSP没有变化,就不会翻译,而是直接调用,所以程序的执行效率不会受到影响。
JSP引擎调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为了方便开发者在编写JSP页面时获取这些web对象的引用,特意定义了9个对应的变量,开发者可以通过JSP页面中的这些变量快速获取这9个对象的引用。
这九个物体是什么,它们的作用也是笔试中经常考查的知识点。
20.技巧:JSP的九个隐式对象
请求
反应
配置
应用
例外
会议
页,面,张,版
在外
页面上下文
21.提示:out隐式对象
out隐式对象用于向客户端发送文本数据。
out对象是通过调用pageContext对象的getOut方法返回的,其功能和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
JSP页面中out隐式对象的类型是JspWriter,相当于一个带缓存功能的PrintWriter。设置JSP页面的page指令的buffer属性,可以调整其缓存大小,甚至关闭其缓存。
只有当内容被写入out对象并且满足以下任一条件时,out对象才调用ServletResponse.getWriter方法,out对象的缓冲区中的内容通过该方法返回的PrintWriter对象被实际写入Servlet引擎提供的缓冲区中:
设置page指令的buffer属性会关闭out对象的缓存功能。
输出对象的缓冲区已满;整个JSP页面结束。
22.Tip: out隐式对象工作示意图
& lt% out . println(” AAA “);response.getWriter()。write(” BBB “)% & gt;
23.提示:关于隐式对象的注意事项
使用out和response.getwriter()同时输出数据。
使用JSP下载文件。
24.提示:pageContext对象
PageContext对象是JSP技术中最重要的对象,它代表了JSP页面的运行环境。这个对象不仅封装了对其他八个隐式对象的引用,而且本身就是一个域对象,可以用来保存数据。而且这个对象还封装了web开发中经常涉及到的一些常见操作,比如引入和跳转到其他资源,检索其他域对象中的属性等。
25.提示:通过pageContext获取其他对象。
getException方法返回一个异常隐式对象。
getPage方法返回页面隐式对象。
getRequest方法返回请求隐式对象。
getResponse方法返回响应隐式对象。
getServletConfig方法返回一个配置隐式对象。
getServletContext方法返回应用程序隐式对象。
getSession方法返回会话隐式对象。
getOut方法返回一个Out隐式对象
PageContext封装了其他八个内置对象的含义。思考:如果编程时将pageContext对象传递给一个普通的ja对象,这个ja对象会有什么作用?
25.提示:作为域对象的pageContext。
pageContext对象的方法
public void set attribute(Ja . lang . string名称,ja.lang.Object值)
公共Ja . lang . object get attribute(Ja . lang . string名称)
公共void remove attribute(Ja . lang . string名称)
PageContext对象还封装了访问其他域的方法。
公共Ja . lang . object get attribute(Ja . lang . string名称,int范围)
public void set attribute(Ja . lang . string名称,ja.lang.Object值,int范围)
public void remove attribute(Ja . lang . string name,int scope)
代表各种字段的常数
页面上下文。应用范围
页面上下文。会话_范围
页面上下文。请求范围
页面上下文。页面_范围
findAttribute方法的EL表达式(*重点在每个域中查找属性)
26.提示:介绍并跳转到其他资源。
在PageContext类中定义了一个forward方法和两个include方法,以分别简化和替换RequestDispatcher.forward方法和include方法。
如果方法接收的资源以“/”开头,则“/”表示当前web应用程序。
27.提示:JSP标签
jsp标签,也叫JSP Action(jsp element),用于在Jsp页面中提供业务逻辑功能,避免直接在Jsp页面中编写ja代码,导致Jsp页面难以维护。
28.技巧:JSP公共标签
& ltJSP:include & gt;标签
& ltJSP:forward & gt;标签
& ltJSP:param & gt;标签
28、提示:& ltJSP:include & gt;标签
& ltJSP:include & gt;标签用于将另一个资源的输出内容插入到当前JSP页面的输出内容中,这在JSP页面执行时称为动态引入。
语法:
& ltJSP:include page = ” relative URL | & lt;% =表达式% >flush = ” true | false “/& gt;
page属性用于指定引入资源的相对路径,也可以通过执行表达式来获得。
flush属性指定在插入其他资源的输出内容时,是否先向客户端刷新当前JSP页面的输出内容。
29、提示:& ltJSP:include & gt;与包含指令的比较
& ltJSP:include & gt;标签是动态引入的,
include指令是静态引入的,所涉及的两个JSP页面将被翻译成一个servlet,其内容在源文件级别被合并。
不管是
否则,输出到客户端的内容将是一个格式混乱的HTML文档。
30、提示:& ltJSP:forward & gt;标签
& ltJSP:forward & gt;标签用于将请求转发给另一个资源。
语法:
& ltJSP:forward page = ” relative URL | & lt;% =表达式% >/& gt;
page属性用于指定请求转发到的资源的相对路径,也可以通过执行表达式来获得。
31、提示:& ltJSP:param & gt;标签
使用时
语法1:
& ltJSP:include page = ” relative URL | & lt;% =表达式% >& gt
& ltJSP:param name = ” parameter name ” value = ” parameter value | & lt;%=表达式% >/& gt;
& lt/JSP:include & gt;
语法2:
& ltJSP:forward page = ” relative URL | & lt;% =表达式% >& gt
& ltJSP:param name = ” parameter name ” value = ” parameter value | & lt;%=表达式% >/& gt;
& lt/JSP:include & gt;
& ltJSP:param & gt;标签的name属性用于指定参数名,value属性用于指定参数值。在< JSP:include & gt;和
32.技巧:映射JSP
& ltservlet & gt
& ltservlet-name & gt;SimpleJspServlet & lt/servlet-name & gt;
& ltJSP-file & gt;/JSP/simple . JSP & lt;/JSP-file & gt;
& lt启动时加载& gt1 & lt/load-on-startup & gt;
& lt/servlet & gt;
……
& ltservlet映射& gt
& ltservlet-name & gt;SimpleJspServlet & lt/servlet-name & gt;
& lturl模式& gt/XXX/yyy . html & lt;/URL-pattern & gt;
& lt/servlet-mapping & gt;
33.提示:如何发现JSP页面中的错误?
JSP页面的JSP语法格式有问题,无法翻译成Servlet源文件。JSP引擎将在JSP页面中提示此类错误的位置(行和列)和相关信息。
JSP页面的JSP语法格式没有问题,但是翻译出来的Servlet源文件存在Ja语法问题,导致从JSP页面翻译出来的Servlet源文件无法编译。
JSP引擎还会提示JSP页面中此类错误的位置(行和列)和相关信息。
JSP页面翻译过来的Servlet程序在运行时出现异常,和普通Ja程序的运行时错误一模一样。Ja虚拟机会提示Servlet源文件中错误的位置(行和列)和相关信息。
34.提示:关键点
到目前为止,web开发已经接触了四个领域对象,这四个领域对象是学习web的重点,也是笔试中经常考查的知识点。
页面上下文(称为页面域)
请求(称为请求域)
会话(称为会话域)
ServletContext(称为应用程序域)
澄清以下问题:
什么是域?
这四个物体的生命周期?
在什么情况下使用哪个域对象。
1.请求:如果一个客户向服务器发送请求,那么生成的数据在用户阅读后就对用户没有用了。像这样的数据会存在于请求字段中,比如新闻数据,用户看完之后就没用了。
2.会话:如果客户向服务器发送请求,生成的数据在用户用完之后会有用。像这样的数据会被存储在session域中,比如购物数据,用户需要看到自己的购物信息,等一会儿再用这个购物数据买单。
3.servletContext:如果客户向服务器发送请求,生成的数据会被其他用户用完,这些数据会存储在servletContext域中,比如聊天数据。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。