`

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

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

2.将所有的类都放在包中。

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

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

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

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

2.理解这个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());	
}


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

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

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

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

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

3.当然每行声明的最后不要忘记写上分号。

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

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

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

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

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

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

8.Page就是this。没有多大用处,创建它是为了在脚本语言还不是java的时代用做占位符。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics