动作与指令两者之间的运用

来源:互联网 发布:淘宝直播怎么看pc端 编辑:程序博客网 时间:2024/04/29 14:49

今天在做一个项目时,运用到了<jsp:include page="" flush="true"/> 动作与<%@ include file=""%>指令.开始我没有注意到两者之间主要的区别. 经过这个项目之后,加深了对它们两者之间的理解.

现我来说一下:

我在一个jsp文件里插入了一个隐藏字段:

<input name="operator" type="hidden" id="operator" value="<%=manager%>"/>

这个value="<%=manager%>" 是保存在session里的. 于是我想引用这个session 的值.

写了如下代码:

<%
 String manager = (String)session.getAttribute("manager");
 if(manager == null){
  response.sendRedirect("login.jsp");
 }
%>

但是, 程序不能编译.因为在另一个jsp文件里包含了上面的代码;  这个jsp文件是banner.jsp

我是以<%@ include file=""%>指令 方式引入的. 后来我把它改为<jsp:include page="" flush="true"/> 动作就可以了.

当我删除了上面所说的代码:

<%
 String manager = (String)session.getAttribute("manager");
 if(manager == null){
  response.sendRedirect("login.jsp");
 }
%>

的时候, 发现又不能编译了.

 

 

我总结了一下:

 

1. 发生作用的时间的不同:
<%@ include file=”..”%> 是页面转换期间
<jsp:include page=”..”>是请求期间
2. 转换成的Servlet
<%@ include file=”..”%> 主页面和包含页面转换为一个Servlet
<jsp:include page=”..”> 主页面和包含页面转换为独立的Servlet
3. 引入内容的不同:
<%@ include file=”relativeURI”%> 引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。
<jsp:include page=”relativeURI” flush=”true” /> 引入执行页面或servlet所生成的应答文本。
jsp页面是把include指令元素(<%@ include file=""%>)所指定的页面的实际内容(也就是代码段)加入到引入它的jsp页面中,合成一个文件后被jsp容器将它转化成servlet。可以看到这时会产生一个临时class文件和一个servlet源文件。而动作元素(<jsp:include page=""/>)是在请求处理阶段引入的,会被JSP容器生成两个临时class文件和两个servlet原文件。而引入的只是servlet的输出结果,即JspWriter对象的输出结果,而不是jsp的源代码。
原创粉丝点击