zoukankan      html  css  js  c++  java
  • 1、include指令

    作用:把多个文件中需要共享的代码放在单独的文件中,然后在需要的时候使用该指令引入这个文件。典型的应用,把网站的头部和版权信息放在单独的文件中,在其他文件中包含这两部分。

    基本语法格式:

    <%@ include file="目标文件"%>

    file属性指出目标文件。

    例:把 index.jsp 和 register.jsp 中的共同部分做成单独的文件 header.jsp(后缀名不一定是.jsp),然后在index.jsp和register.jsp中调用。

    header.jsp中的内容如下:

    <%@ page contentType="text/html;charset=gb2312"%>
    <table  align="center" width=780>
       <tr height="100">
          <td align="center"><h1>电子书店</h1></td>
       </tr>
       <tr>
          <td align="center">
             <!-- 超链接的基本格式  -->
             <a href="register.jsp">注册</a> 
             最新图书 最畅销图书 查询图书 修改密码 查询订单 购物车</td>
       </tr>
       <tr>
          <td><hr></td>
       </tr>

    在 index.jsp 中引入 header.jsp 的代码:

    <%@ page contentType="text/html;charset=gb2312"%>

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

    <tr>
          <td>
             <table>
                 <tr>
                     <td>
                         <!--登录界面代码-->
                         <form action="login_process.jsp" method="post">
                            <!-- 主要是涉及提交信息,就要用到form,action决定了提交给哪个文件处理 -->
                            用户名:<input type="text" name="username" value="aaa"> <br>
                            口令:<input type="password" name="userpass" value=""> <br> 
                            <input type="submit" value="登录"><input type="reset" value="重写">
                         </form>
                     </td>
                     <td>
                          欢迎光临我们的书店!
                     </td>
                 </tr>
             </table>
          </td>
       </tr>
    </table>

    运行过程:在转换的时候,当遇到include指令的时候会把include指令指向的目标文件的内容拷贝到当前位置,替换include指令,这样最后形成一个文件。然后才编译形成class文件,然后运行。

    2、<jsp:forward>标签

    我们使用登录功能的模拟来介绍。

    首先,使用Java代码完成判断,使用<jsp:forward>完成跳转,代码:

    <%@ page contentType="text/html;charset=gb2312"%>

    <%

    //先获取用户输入的用户名和口令 ,然后判断是否合法

    String username = request.getParameter("username");

    String userpass = request.getParameter("userpass");

    if(username.equals("zhangsan") && userpass.equals("zhangsan")){

    %>

      <jsp:forward page="success.jsp"/>

    <%

    }else{

    %>

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

    <%

    }

    %>

    注意:不管跳转到success.jsp还是index.jsp,地址栏都是处理文件的名字。

    <jsp:forward>的语法格式:

      <jsp:forward page="目标文件"/>

    page属性指出转向的目标文件。最后的结束符为"/>",斜杠不能省略。

    另外一个可以完成跳转的方式是采用response.sendRedirect()。response和request一样,都是内容对象,可以直接访问。修改上面的文件:

    <%@ page contentType="text/html;charset=gb2312"%>

    <%

      //先获取用户输入的用户名和口令,然后判断是否合法

      String username = request.getParameter("username");

      String userpass = request.getParameter("userpass");

      if(username.equals("zhangsan") && userpass.equals("zhangsan")){

        response.sendRedirect("success.jsp");

      }else{

        response.sendRedirect("index.jsp");

      }

    %>

    <jsp:forward> 和 response.sendRedirect()的运行效果相同(针对上面的例子)。

    相同点:都是转向目标文件。

    不同点:地址栏中显示的内容是不相同的,如果使用<jsp:forward>,地址栏显示当前文件的名字,如果使用response,地址栏显示的是转向后的文件的名字。执行过程不同:使用<jsp:forward>相当于一次请求,使用response相当于两次请求。

    使用<jsp:forward>的情况:

    index.jsp中输入用户名和口令,提交给login_process.jsp,服务器保存用户的输入信息,使用<jsp:forward>转向success.jsp之后,success.jsp还可以访问用户输入的信息,因为输入同一次请求。

    使用response的请求:

    index.jsp中输入用户名和口令,提交给login_process.jsp,服务器保存用户的输入信息,使用response的sendRedirect方法相当于重新向服务器发送一次请求,这样上次的请求内容(用户名和口令)就不能共享了。

    3、<jsp:include>标签

    把index.jsp中<%@ include = "header.jsp"%>替换成<jsp:include page="header.jsp">

    从运行效果上相同。

    不同点:1、两个文件,目标文件是单独运行的,当前文件运行到<jsp:include>标签的时候,转向执行标签所指向的目标文件,执行之后返回继续标签之后的内容。

        2、<%@ include%>指令是在编译(转换)的时候使用,<jsp:include>在运行的时候起作用。

    程序中如何选用:要导入的内容是不是每次都执行,如果每次都执行的话,应该使用<%@ include%>,如果是在特定的条件下,应该使用<jsp:include>。例如,登录之后要么转向 success.jsp要么转向 index.jsp,如果在程序中使用导入,应该用<jsp:include>。

    4、<jsp:include> 和 <jsp:forward> 区别

    把login_process.jsp中的<jsp:forward>替换成<jsp:include>:

    <%@ page contentType="text/html;charset=gb2312"%>

    <%

    //先获取用户输入的用户名和口令,然后判断是否合法

    String username = request.getParameter("username");

    String userpass = request.getParameter("userpass");

    if(username.equals("zhangsan") && userpass.equals("zhanshan")){

    %>

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

    <%

    }else{

    %>

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

    <%

    }

    %>

    运行效果是相同的。但是有不同点,修改代码如下:

    <%@ page contentType="text/html; charset=gb2312"%>

    处理文件的前半部分<br>

    <%

    //先获取用户输入的用户名和口令,然后判断是否合法

    String username = request.getParameter("username");

    String userpass = request.getParameter("userpass");

    if(username.equals("zhangsan") && userpass.equals("zhangsan")){

    %>

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

    <%

    }else{

    %>

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

    <%

    }

    %>

    <br>处理文件的后半部分

    两次运行结果不相同。

    分析原因:

    <jsp:forward>:先执行标签之前的内容,遇到标签的时候转向执行目标文件,执行完不返回,显示的内容为目标文件的内容,标签之前的内容执行,但是不显示。标签之后的内容不会执行,当然更不会显示。
    <jsp:include>:先执行标签之前的内容,遇到标签转向执行目标文件,执行完返回,继续执行标签之后的内容,显示的内容为:标签之前的内容+目标文件的内容+标签之后的内容,标签的前后都执行,都显示。

    5、使用标准标签库(JSTL)完成登录的判断过程

    如何使用标签库:

      (1)得到标签库的实现文件,jstl.jar和standard.jar,放在 WEB-INF 下面的lib子文件夹。

      (2)在JSP文件中要声明标签库,通过tablib指令进行声明:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

      (3)使用标签:<c:if test=""></c:if>

    要完成判断,可以使用标签库中的 c:if 标签。标签的基本格式:

    <c:if test="">条件成功要执行的内容</c:if>

    test表示测试条件,测试条件可以写常量,可以是表达式语言(EL,主要用于输出),主要使用表达式语言。

    例如:要判断用户提交的用户名和口令是否是zhangsan。

    <c:if test="${param.username==/"zhangsan/" && param.userpass==/"zhangsan/"}">

      <jsp:forward page="success.jsp"/>

    </c:if>

    注意:添加完标准标签库之后,需要重新启动服务器。

    6、使用session保存登录后的信息

    在网站中设置了 application session request pageContext 对象保存内存中的信息。application是网站所有用户共享的存储变量的位置。session是网站为每个访问网站的人创建的,每个用户对应一个session,也是存放变量的位置。request是为每个用户的每次请求设置的存储信息的位置,每次访问会有一个request。pageContext是每次访问的每个页面对应一个。常用的 session 和 request 。多次访问之间要共享信息可以使用 session,如果在某次访问的多个页面之间共享信息使用 request (例如,使用 jsp:forward 转向的文件和当前文件就属于同一次请求)。

    登录后的用户信息应该放在 session 中。

    要在这些范围中保存信息,可以使用标准标签库中的<c:set>标签完成。

    <c:set>的基本语法格式:

    <c:set var="变量的名字" scope="范围" value="值"/>

    要把用户名放到 session 中:

    <c:set var="username" scope="session" value="${param.username}"/>

  • 相关阅读:
    动态设置字体大小需要注意的点
    getDimension与getDimensionPixelOffset与getDimensionPixelSize的区别
    统计图钻取的明细报表在非模态窗口中显示
    局部区块多个报表 TAB 页切换及局部区块的参数查询
    分栏报表制作攻略
    多值关联过滤
    鼠标悬停出现提示信息怎么做
    复杂报表设计之动态报表
    Logo(图片)作为报表水印的解决方法
    分组填报表的制作
  • 原文地址:https://www.cnblogs.com/caicaidandan/p/4718802.html
Copyright © 2011-2022 走看看