BaseWeb04-JSP

来源:互联网 发布:仙人下凡无人知 生肖 编辑:程序博客网 时间:2024/05/19 10:56

1、重定向

1.1、使用response.sendRedirect("user.jsp");直接重定向。

1.2、注意sendRedirect之后的代码也会执行, 执行完之后才会进行跳转。

这里写图片描述

1.3、注意浏览器的地址发生变化, 这是客户端跳转。

http://localhost:8080/test01/jsp/sendDirectToUser.jsp跳到http://localhost:8080/test01/jsp/user.jsp

传参数,

response.sendRedirect("user.jsp?username=zhangsan");

2、第二种跳转方式,通过jsp:forword

这里写图片描述

2.1、重定向浏览器地址没有发生变化(服务器端跳转,区别与第一种跳转的客户端跳转。), 中文乱码(建议服务器端跳转最好不使用中文。)

这里写图片描述

========三、绝对路径和相对路径。==========

3.1、相对路径:相对与当前页面的路径

<!-- 相对路径:相对与当前页面的路径 --><a href="../jsp/user.jsp">跳转到用户界面</a><br><img  src="../img/01.png">

3.2、绝对路径, 使用”/”表示根目录, 注意这是项目的根目录

<!-- 绝对路径:  / 表示根目录路径 --><a href="/jsp/user.jsp">访问用户界面</a>

3.2.1、跳转发现url少了上下文test01

这里写图片描述

3.2.2、添加上下文test01, 访问正确

<!-- 绝对路径:  / 表示根目录路径 --><a href="/test01/jsp/user.jsp">访问用户界面</a>

3.2.3、使用绝对路径的弊端,就是上下文改变了, 导致所有的绝对路径都要改变,这是不现实的和费事。

这里写图片描述

3.2.4、我们可以使用request.getContextPath()替换test01
,这样上下文改变了,我们也不需要改变绝对路径。

<!-- 绝对路径:  / 表示根目录路径 --><a href="<%=request.getContextPath() %>/jsp/user.jsp">访问用户界面</a>

3.3、最佳实践:使用绝对路径来访问地址。

======4、静态包含与动态包含==========

首先看个案例,

这里写图片描述

结论:两个页面共用一个导航栏,这儿有个弊端,就是导航栏有变化,相关页面都得改变。

所以我们需要将导航栏剥离出来。

这里写图片描述

4.1、第一种包含方式:动态包含, 使用@indclud file="待包含的文件"

注意:在使用包含的时候我们不用在添加上下文,它会自动添加。
这里写图片描述

4.1.1、如果要改变导航栏,只需要修改header.jsp,其他相关页面不用修改。

这里写图片描述

4.2、第二种包含方式: 静态包含, jsp:include

<!-- 注意此处不用再添加上下文,它会自动添加的。 --> <!-- 以下为静态包含 --><jsp:include page="/includes/header.jsp"></jsp:include>

4.3、通过编译文件来看动态与静态的区别

4.3.1、动态的包含:是将待导入的文件,不做任何编译引入文件,在被导入的页面中进行编译

这里写图片描述

4.3.2、静态包含: 待导入的文件先进行编译,然后导入。

通过

 org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/includes/header.jsp", out, false);

进行导入。

这里写图片描述

4.3.3、另外我在header.jsp中定义一个变量line, 在动态包含中可以看到该变量, 而在静态包含的编译文件中无法找到,

4.4、如果在被包含的文件中,定义一个相同的变量line, 就会报错Duplicate local variable line

这里写图片描述

而静态包含不受影响

这里写图片描述

最佳实践:使用静态包含。

可能用动态包含: 权限。