Java Web基础——Web组件重用与JavaBeans

使用可重用的组件可以提高应用程序的开发效率和可维护性。下面我们来看一下在JSP中如何使用静态包含,动态包含JavaBeans的使用。



一.静态包含

静态包含是指在JSP页面转换阶段将另一个文件的内容包含到当前的JSP页面中。我们使用一个JSP指令完成该功能:<%@ include file="relativeURL" %>
被包含的页面可以是基于文本的文件,如HTML,JSP,XML文件等。
我们可以通过下图清晰的看到静态包含的过程:

通过上图我们可以看到静态包含的页面在转换的时候不做任何的处理,所以对它的使用受到以下限制:
1.file的值不能是请求时表达式,如<%@ include file="<%= myURL %>" %>
2.不能通过file中的相对地址传递参数,如file="other.jsp?name=tom"



二.动态包含

顾名思义,动态包含是在请求时将另一个页面的输出包含到主页面的输出中。
区别于静态包含,动态包含的各个页面的转换(成Servlet)的过程是相互独立的
下面着重分析使用JSP的动作标签和实现动态包含

        1.使用<jsp:include>动作

使用该标签的格式如:<jsp:include page="relativeURL" />

page属性值是指将请求控制转移到的页面,下图很好的显示了该过程:


通过上图我们看到JSP容器(如Tomcat)执行对该指令进行转换是实际是将请求的控制处理转移给另外一个页面,
更具体的说是交给other.jsp转换成的Servlet进行处理,
处理完之后将控制返回给主页面(main.jsp).

因为是动态包含,我们可以在控制转移时加上一些参数,可以用<jsp:param>加上参数,如:

  1. <jsp:include page="somePage.jsp">  
  2.     <jsp:param name="name1" value="value1" />  
  3.     <jsp:param name="name2" value="value2" />  
  4. </jsp:include>  
  5. 在被包含页面somePage.jsp中我们可以从request中取得这些参数,方法很简单。当然我们也可以从地址传递参数,如somePage.jsp?name=tom,这样用的很少,这里的介绍只是为了说明其与静态包含的不同之处

        2.使用<jsp:forward>动作

使用格式与include标签类似,如<jsp:forward page="relatvieURL" />

使用<jsp:forward>动作是把请求转发到其他的页面(组件),然后由转发到的页面(组件)把响应发送给客户

下图展示了这种包含与include包含及静态包含的区别:


我们看到main.jsp中的内容并没有输出的HTML中展现给客户(浏览器),其实一般的我们只要在前一个Servlet中做一些处理工作而把数据通过请求转发给其他的页面(这里是other.jsp)进行展示。
值得注意的是:如果我们访问main.jsp,浏览器中显示的是Welcome to other.jsp,但是浏览器地址栏中依旧是main.jsp!