JSP基础语法---包含和跳转

来源:互联网 发布:fasttext python 编辑:程序博客网 时间:2024/05/21 17:56

包含操作

使用包含操作:

使用包含操作,可以将一些重复的代码包含进来继续使用。


从一般正常的页面组成来看,一共分为四个区域。

真正在改变的地方只是具体内容处,因为根据不同的用户浏览的不同,那么肯定这上面会存在差别。现在就有两种做法实现以上一种功能:

方法一:在每一个JSP页面(HTML)都包含工具栏、头部信息、尾部信息、具体内容。

方法二:将工具栏、头部信息、尾部信息都分成各个独立的文件,以后用的时候直接导入进来。

很明显现在第二种方法会比第一种更好,因为如果采用第一种做法,则很多的代码会出现重复的问题,而如果采用了第二种形式会发现以后修改的时候会更方便。


在JSP中如果要想实现包含的操作,有两种做法:静态包含、动态包含

静态包含语法:

<%@include file = “要包含的文件路径”%>


这条指令很类似于<%@page%>指令。

例子:静态包含

<%@ page contentType="text/html" pageEncoding="GBK"%>

<html>

<head><title>www.baidu.com</title></head>

<body>

     <h1>静态包含操作</h1>

     <%@ include file="info.htm"%>

     <%@ include file="info.jsp"%>

     <%@ include file="info.inc"%>

</body>

</html>

用浏览器打开的结果如下:


我们通过查看源代码可以发现,源文件中的include部分已经被分别替换为了原来的Info.*文件中的内容了。


静态包含就是将内容进行了直接的替换,就好比程序中定义的变量一样。


动态包含

不管是动态也好,还是静态也好,一定要把握住核心,核心就是包含。

使用<jsp:include>指令可以完成动态包含的操作,与之前的静态包含不同,动态包含语句,可以自动区分被包含的页面是静态还是动态。

动态包含语法:

1.不传递参数:

 <jsp:include page=”{要包含的文件路径|<%=表达式%>}”flush=”true|false”/>

2.传递参数:

 <jsp:include page=”{要包含的文件路径|<%=表达式%>}”flush=”true|false”/>

 <jsp:param name=”参数名称” value=”参数内容”/>

 ...可以向被包含页面中传递多个参数

 </jsp:include>


凡是标签指令,必须完结。

接收参数【receive_param.jsp】

<%@ page contentType="text/html" pageEncoding="GBK"%>

<h1>参数一:<%=request.getParameter("name")%></h1>

<h2>参数二:<%=request.getParameter("info")%></h1>


此时,接收的是从标签中传递过来的参数,可以根据自己的需要传递任意多个参数。

例子:动态传递参数。

<%@ page contentType="text/html" pageEncoding="GBK"%>

<html>

<head><title>www.baidu.com</title></head>

<body>

     <h1>动态包含操作</h1>

<jsp:include page="receive_param.jsp">

     <jsp:param name="name" value="LiXingHua"/>

     <jsp:param name="info" value="www.baidu.com"/>

</jsp:include>

</body>

</html>

用浏览器执行的结果如下所示:


但是,此时一个新的问题出现了,如果现在希望传递的参数内容是一个变量该如何?

要传递变量,就要通过表达式来完成。【include_03.jsp的内容如下】

<%@ page contentType="text/html" pageEncoding="GBK"%>

<html>

<head><title>www.baidu.com</title></head>

<body>

     <h1>动态包含操作</h1>

     <%

          String username = "skewrain";

     %>

<jsp:include page="receive_param.jsp">

     <jsp:param name="name" value="<%=username%>"/>

     <jsp:param name="info" value="www.baidu.com"/>

</jsp:include>

</body>

</html>

返回的结果与上一个代码的执行结果相同。


使用静态包含的实例:

<%@ page contentType="text/html" pageEncoding="GBK"%>

<html>

<head><title>www.baidu.com</title></head>

<body>

    <%

        int x = 100; //变量重复

    %>

<h1>include_demo04.jsp -- <%=x%></h1>

<%@include file="include.jsp"%>

</body>

</html>

浏览器执行结果如下所示:


错误是出现了变量重复定义。出现这样的错误的原因是静态包含是在代码执行之前直接将被包含的代码加入到代码中。


使用动态包含的实例:

<%@ page contentType="text/html" pageEncoding="GBK"%>

<html>

<head><title>www.baidu.com</title></head>

<body>

    <%

        int x = 100; //变量重复

    %>

<h1>include_demo04.jsp -- <%=x%></h1>

<jsp:include page="include.jsp"/>

</body>

</html>

浏览器执行结果如下所示:


现在的程序运行并没有任何的错误,因为动态包含的时候如果包含的是动态页面,则采用先处理后包含的形式。包含的是处理后的结果。


很明显,动态包含的操作更加容易使用,因为在开发中难免会出现重复定义变量的问题,所以在此建议读者一定要多使用动态包含。而且,两种包含的区别也一定要掌握,因为有可能在面试中出现。


跳转的作用

在WEB中可以使用<jsp:forward>指令,将一个用户的请求(request),从一个页面传递到另外一个页面。

页面跳转语法:

1.不传递参数:

 <jsp:forward page=”{要包含的文件路径|<%=表达式%>}”/>

2.传递参数:

 <jsp:forward page=”{要包含的文件路径|<%=表达式%>}”/>

     <jsp:param name=”参数名称” value=”参数内容”/>

     ...可以向被包含页面中传递多个参数

     </jsp:forward>

 

在实际的生活中,如果现在登录邮箱成功的话肯定跳转到了邮箱的首页,如果现在登录失败,则肯定让用户重新登录。

既然这个也属于标签指令,则肯定也同样需要完结。

 

【forward_02.jsp的内容如下:】

<%@page contentType="text/html" pageEncoding="GBK"%>

<h1>这是跳转之后的页面</h1>

<h2>参数一:<%=request.getParameter("name")%></h2>

<h2>参数二:<%=request.getParameter("info")%></h2>

现在让一个页面跳转到此页面上,此页面要接收两个参数。

 

【forward_01.jsp的内容如下:】

<htm1>

<head><title>www.baidu.com</title></head>

<body>

<%

    String username = "skewrain";

%>

<jsp:forward page="forward_02.jsp">

    <jsp:param name = "name" value="<%=username%>"/>

<jsp:param name = "info" value="www.baidu.com"/>

</jsp:forward>

</body>

</html>

用浏览器执行后的结果如下:


现在的地址栏中没有发生任何改变,所以此种跳转,在实际开发中称为服务器端跳转。因为跳转之后的页面显示改变了,但是地址栏没有改变。


小结:

    实际上,forward动作指令和include动作指令十分相似。它们都采用方法来引入目标页面,通过查看JSP页面所生成Servlet代码可以得出:forward指令使用_jspx_page_context的forward()方法来引入目标页面,而include指令则使用通过JspRuntimeLibrary的include()方法来引入目标页面。区别在于:执行forward时,被forward的页面将完全代替原有页面;而执行include时,被include的页面只是插入原有页面。简而言之:forward拿目标页面代替原有页面,而include则拿目标页面插入原有页面。


0 0
原创粉丝点击