servlet和jsp核心编程(第2版)第十一章jsp脚本元素的调用学习笔记

[size=x-large]第十一章 用JSP脚本元素调用java代码[/size]
[size=x-large]核心方法[/size]:
[size=medium]1[/size].JSP页面中的java代码的数量应该有所限制,至少可以使用一些辅助类,然后在JSP页面中调用它们,经验更丰富之后,应该考虑使用bean,MVC和定制标签。

[size=medium]2[/size].将所有的类都放在包中。

[size=medium]3[/size].对于jsp页面中的初始化和清理工作,可以使用jsp声明覆盖jspInit或jspDestroy,不要直接使用init或destroy。

[size=medium]4[/size].使用单独的java类而非JSP声明来定义绝大多数方法。
[size=x-large]学习笔记[/size]
[size=large]一[/size]、在JSP中调用Java代码
[size=medium]1[/size].首先什么是JSP脚本元素的类型:JSP脚本元素用来插入Java代码,这些Java代码将出现在由当前JSP页面生成的Servlet中。jsp的页面组成可以是静态类容,指令,表达式,小脚本,声明,标注动作和注释。其中表达式(expression),小脚本(scriptlet);声明(declaration )统称为Jsp脚本元素。

[size=medium]2[/size].使用什么样的解决方案,即我们在jsp中直接调用java代码还是间接使用java代码、又或者使用bean、使用MVC、还是使用struts框架,这些取决于项目的大小和复杂程度。

[size=large]二[/size]、JSP表达式的应用
[size=medium]1[/size].首先一个实例:Current time:<%=new java.util.Date()%>该表达式在求值、转换成字符串后,插入到页面中。求值是在运行期间执行(我们也可以理解为,我们在访问该页面时执行)。

[size=medium]2[/size].理解这个JSP表达式的后台运作,JSP表达式基本上成为由JSP页面生成的servlet中的print语句。常规的html语句转换为print语句,同时用双引号将文本引起来。而JSP表达式转换为没有双引号的print语句。这些print语句没有放在doGet方法中,而是放在一个新的方法_jspService中,无论是GET和POST请求,service方法都会调用_jspService方法。比如
<H1>A Random 
Number</H1><%=Math.random()%>
这两句就转换为
public void _jspService(HttpServletRequest request,HttpServletResponse response) Throws ServletException,IOException{
response.setContentType("text/html");
HttpSession session = request.getSession();
JspWriter out = response.getWriter();//JSP页面中的out是一个JspWriter
out.println("<H1>A Random Number</H1>");
out.println(Math.random());
}


[size=medium]3[/size].如何查看这些JSP转换的servlet代码呢,一般路径为:install_dir/work/Standalone/localhost/_ 根据Tomcat的版本不同,路径也不一样,在我的机器上为C:\apache-tomcat-6.0.26\work\Catalina\localhost 然后进入项目名,选择所需查看的文件即可。

[size=large]三[/size]、编写scriptlet(小脚本)
[size=medium]1[/size].<%java code%>
我们可以将任意代码插入到servlet中的_jspService方法中(由service方法调用)。注意JSP表达式不需要分号结尾,而大多数JSP 小脚本需要添加分号结尾。因为一般JSP表达式需要放在out或是write中,所以如果加上了分号,就等于out.print(;)这样显然不对。

[size=medium]2[/size].理解JSP小脚本的后台运作,直接插入到_jspService方法中,不需要修改。

[size=large]四[/size]、使用声明
[size=medium]1[/size].使用JSP声明可以将方法或字段的定义插入到servlet类的主定义中,位于对请求进行处理的_jspService方法之外。

[size=medium]2[/size].我们一般不在JSP声明中覆盖service,doGet和doPost方法。因为这些方法会在_jspService中调用。而我们可以覆盖jspInit或jspDestroy方法完成初始化和清理工作。

[size=medium]3[/size].当然每行声明的最后不要忘记写上分号。

[size=large]五[/size]、预定义变量
[size=medium]1[/size]._jspService自动定义了8个局部变量,有时也称隐含变量,这些常量是局部变量,不是常量。所以如果我们编写的代码不属于_jspService,我们就不能使用这些代码,所以,我们在jsp声明中就不能使用这些常量。

[size=medium]2[/size].request和response,这两个变量就是分别关联HttpServletRequest和HttpServletRespose,这里要注意一般输出流会使用缓冲,所以我们可以在jsp页面的主体内设置HTTP状态代码和响应报头,也就是可以先编写有关内容,再编写相应的HTTP状态代码和响
应报头。

[size=medium]3[/size].out,这个变量是用来将输出发送到客户程序的Writer,但是,这里使用的不是PrintWriter,而是JspWriter类型,它对输出的内容进行缓存。
[size=medium]4[/size].Session,和HttpSession关联。

[size=medium]5[/size].Application,就是一个ServletContext类型的变量,用来存放servlet和JSP页面的持续性数据,而我们如果将数据存储在实例变量中,则实例变量只能由存储数据的同一个servlet使用。

[size=medium]6[/size].Config,是该页的ServletConfig对象,原则上,我们可以使用它读取初始化参数,但在实践中,初始化参数在jspInit中读取。而不是在_jspService。

[size=medium]7[/size].PageContext,这个PageContext类,我们可以通过它访问页面的许多属性。我们可以调用getRequest,getReponse,getOut,getSession等方法,如果方法或构造函数需要访问多个与页面相关的对象,我们可以传递pageContext对象,这要比我们传递session,request,response,out等方便得多。

[size=medium]8[/size].Page就是this。没有多大用处,创建它是为了在脚本语言还不是java的时代用做占位符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值