Include directive and Include action

来源:互联网 发布:简易软件开发 编辑:程序博客网 时间:2024/06/03 22:41

http://rainmanjin.javaeye.com/blog/476838

 

http://www.orionserver.com/docs/specifications/jsp-1_2-fcs-spec.pdf

 

1 语法不同

<%@ include file = "/login.jsp" %>       --- include directive 
<jsp:include flush="true" page="/login.jsp"></jsp:include>         -------- include action

静态include是在main jsp translation 期间执行的,它会将login.jsp的内容引入到main的servlet,两者合而为一。

动态include是在request时候执行的,它独立生成一个相应的servlet。实际只是引用了login.jsp这个文件被转化并被编译后产生的servlet类文件.login.jsp就是作为一个单独的文件在执行后才被index.jsp文件运行时调用.

 

include directive is interpreted relative to current  jsp file.An include directive regards an resource as static object like jsp file.(直接将编译后的login.jsp内容写在main servlet----编译期间完成的)。

include action is interpreted relative to current jsp page.An include action regards an resource as dynamic object as a jsp page.(独立编译一个login对应的servlet,处理请求的时候,执行这个页面) 。

 

编译阶段:Jsp容器负责将jsp页面转化成servlet(称为jsp页面实现类?JSP Page implementation class),并编译这个servlet。这两步就构成了翻译阶段.

请求处理阶段:Jsp容器除了上面提到的负责将jsp页面转化成servlet外,还负责调用jsp页面实现类以处理每个请求并产生应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文件。

 

2  对象共享

    静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的.不可以重复设置它tag lib.比如:

    而动态include的页面要共享主页面的对象,可以通过<jsp:param> 传递。页面的设置必须单独设置。比如:

<%@ page language=”java” contentType=”text/html;charset=gb2312”%>

 

<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >
<jsp:param name=”fitstParamer” value=”firstValue”>
<jsp:param name=”lastParamer” value=”lastValue”>
</jsp:include>

3  Request 和 Response

    静态include纯粹是把代码写在主页面的servlet,所以request 和 response 和主页面是同一个对象,可以获得主页面的request 和 reponse 的内容。

    动态include的request 和主页的request是同一个scope,即主页面设置request的attribute/parameter,include页面可以获得.

    main jsp 调用动态include页面实现类,便out.write实现类执行的结果。在动态include页面调用reponse.setHeader,reponse.sendRedirect,setCookies页面没有作用。

    An included page only has access to the JspWriter and it can't set header and reponse.setHeader,reponse.sendRedirect,setCookies.This constraint also apply to include method of RequestDispatcher class.

参考联接:

http://java.chinaitlab.com/ServletJsp/529740_2.html

 

4 实例解析: 定时刷新子页面:动态include和静态include都能做。但静态include会整个页面刷新。

  

[c-sharp] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
  2.     pageEncoding="ISO-8859-1"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <% request.setAttribute("username","Emmy"); %>  
  10. <body>  
  11. <jsp:include flush="true" page="/login.jsp"/>  
  12. UserName:<input type="text" value=""/>  
  13. Password:<input type="text" value=""/><br>  
  14. </body>  
  15. </html>  

 

[c-sharp] view plaincopy
  1. <%@ page import = "com.citigroup.school.Student" %>  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  3. <html>  
  4. <head>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  6. <meta http-equiv="refresh" content="3">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <%     
  10.    //response.setHeader("refresh","3;URL=/Test/test.jsp");    
  11.    //response.setHeader("refresh","3");    
  12.    //response.sendRedirect("http://localhost:8080/Test/test.jsp"); ----jsp:include 没有起到作用  
  13.    //return; ----- jsp:include 只能执行到这一步,页面空白,并没有跳到test.jsp的页面。  
  14.    //out.write("<mce:script type='text/javascript'><!--  
  15. alert('hi')  
  16. // --></mce:script>");  
  17.    Student s = new Student();  
  18.    out.write("<mce:script type='text/javascript'><!--  
  19. alert("+Student.id+")  
  20. // --></mce:script>");  
  21. %>   
  22. <body>  
  23. UserName:<input type="text" value=""/>  
  24. <%out.write(Student.id);%>  
  25. Password:<input type="text" value=""/><%out.write((String)request.getParameter("username"));%></br>  
  26. </body>  
  27. </html>