1. 动态包含 jsp:include
语法不再是<%%>,而是,<jsp:include page=" xxx " flush="true"></jsp:include>
里面还可以加参数,比如<jsp:param name="xxx" value="xxx" />
如果使用动态包含的话,就不会在编译的时候执行,而是等到执行的时候再执行。
这个比静态的优势在哪里呢?它会生成2个请求对象。这样的话意味着,假如在包含页面中传了一个参数,那么在被包含页面也能取出来使用。也就是说被包含页面除了可以自己有参数之外,还可以取得包含页面的参数,达到参数的传递。
语法跟静态的一样
request.getParameter(String name);
注:动态包含并不常用,为什么呢? 有待于进一步调查
2.转向
jsp:forward
response.sendRedirect("xxx"); 跳转到另外一个页面,当前页面的东西还是继续执行(但是通常没什么用,反而造成不好的效果,比如闪一下就跳转了。它的原理是服务器收到当前页面的跳转命令以后向浏览器发送一个消息,要求其改变地址栏地址,然后调用一下浏览器的转到,然后重新向服务器请求想要跳转到的页面。这样一来一往,所以速度相对慢一些。
xxx可以是自己的服务器上面的文件,比如xxx.jsp,也可以是其它页面,比如http://www.google.com
跳转的时候,原先页面的参数等等都丢失了,所以如果你在地址栏写了一个参数?name=123,那么跳转的时候就没有了,取不出来。
但是你可以这样做,就是在xxx.jsp后面添加参数,比如xxx.jsp?name=123,那么在转到的页面就可以通过request.getParameter("name");取出来。
jsp:forward
语法 <jsp:forward page="xxx"></jsp:forward>
这个跳转,地址栏不会变化。跳转直接在服务器内部进行,然后直接将结果传回客户端。客户端并不知情,不知道在服务器端转换了多少次。虽然对象不一样,但是后一个页面可以取得上一个页面的参数。
jsp:forward后面的语句不会再发给客户端了。
由于这种转换不需要到客户端往返一次,直接在服务器端解决,所以速度快一些。
但是这种由于是在服务器端内部转换,所以只能在web app内部的jsp和servlet进行跳转,无法转到外部服务器的页面,比如google。