服务器端的跳转地址栏信息不会改变。是服务器端跳转的有forward
1.测试forward跳转:地址栏信息不回改变。运行的页面名为ceshi_forward,执行的跳转语句为
<jsp:forward page="frame1.jsp"></jsp:forward> 这句话之后的所有代码都没有执行。在浏览器中查看源代码时显示的代码全部都是frame1.jsp页面的代码。字符集设置一个为gbk,一个为gb2312,跳转没有问题,但要注意不能设置除此以外的字符集。
传值问题在forward动作之间写入<jsp:param name="参数名称" value="参数值" />就可以进行传值了。解决乱码问题同样是在传值的页面(ceshi_forward.jsp)写入request.setCharacterEncoding("gbk");在接收值的页面不需要写。
源代码中不显示<jsp:forward page="frame1.jsp"></jsp:forward>动作标志语句。
2. 测试include动作跳转:地址栏信息不变。执行完<jsp:include page="frame1.jsp"></jsp:include>语句后,它后面的语句也能执行。
字符集设置一个为gbk,一个为gb2312,跳转没有问题。查看源文件代码时是frame1.jsp和该页面代码的合体。在源代码中没有动作标识的代码,即不显示<jsp:include page="frame1.jsp"></jsp:include>这个语句。
<jsp:param name="参数名称" value="参数值" />可以向被包含文件传递参数。接收参数值的语句为request.getParameter("name");解决乱码问题需要在传值的页面写入request.setCharacterEncoding("gbk");在接收值的页面不需要写。
3.测试include指令 :地址栏信息不变。执行完<%@ include file="frame1.jsp" %>语句后,其后的语句能执行。查看源文件代码时是frame1.jsp和该页面代码的合体。在源代码中没有指令标识的代码。在page的contentType中即使多一个空格也会报错。
4.include指令与动作的区别:
1)属性:include指令通过file属性指定被包含的页面,file属性值是一个实际存在的路径,不支持任何表达式,如(<%=path%>),也不能像超链接(<a href="*.jsp?name="""></a>)那样传值。
而include动作支持jsp表达式。是通过page属性来指定被包含的文件的。
2)处理方式:指令被包含文件的内容会原封不动的插入到包含页中使用include指令的地方,jsp编译器对这个合体进行编译,最终编译后的文件只有一个。
<jsp:incllude></jsp:incllude>动作标志,当该标志被执行时,程序会将请求住发到被包含的页面,并将结果输出到浏览器中,然后返回包含页继续执行后面的代码。服务器执行的是两个文件,所以JSP分别对两个文件编译。
3) 包含方式:include指令包含文件,最终服务器执行的是将两个文件合成后由JSP编译器编译成的一个class文件,所以被包含的内容应是固定不变的,是静态包含。
include动作标志通常用来包含经常需要改动的文件。对包含文件的编译是在执行时才进行的。