zoukankan      html  css  js  c++  java
  • 【Head First Servlets and JSP】笔记24:include指令与include动作 & param动作 & foward动作

     include指令与include动作

    1、样例代码

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ page import = "java.io.*,java.util.*" %>
    
    <html>
    <head>
      <title>Auto Refresh Header Example</title>
    </head>
    
    <body>
    <%-- 在这里插入页眉文件 --%>
    <%@ include file="Header.jsp"%>
    
    <center>
      <h2>Auto Refresh Header Example</h2>
      <%
        // Set refresh, autoload time as 5 seconds
        response.setIntHeader("Refresh", 60);
    
        // Get current time
        Calendar calendar = new GregorianCalendar();
        String am_pm;
    
        int hour = calendar.get(Calendar.HOUR);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
    
        if(calendar.get(Calendar.AM_PM) == 0)
          am_pm = "AM";
        else
          am_pm = "PM";
        String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
        out.println("Crrent Time: " + CT + "
    ");
      %>
    </center>
    
    <%-- 在这里插入页脚文件 --%>
    <jsp:include page="Footer.jsp" />
    
    </body>
    </html>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <img src="images/header.jpg"  alt="上海鲜花港 - 郁金香" />
    <p>我是页眉</p>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <img src="images/header.jpg"  alt="上海鲜花港 - 郁金香" />
    <p>我是页眉</p>

    2、源码分析

    web项目结构

    把这些文件打包成war,部署到本地tomcat的webapps下,启动tomcat。

    在第一次访问index.jsp之后,将生成如下文件

    我们观察到,并没生成Header_jsp,原因可想而知,因为使用了include指令而不是include动作。

    接着查看index_jsp源码:

    try {
          response.setContentType("text/html;charset=UTF-8");
          pageContext = _jspxFactory.getPageContext(this, request, response,
                      null, true, 8192, true);
          _jspx_page_context = pageContext;
          application = pageContext.getServletContext();
          config = pageContext.getServletConfig();
          session = pageContext.getSession();
          out = pageContext.getOut();
          _jspx_out = out;
    
          out.write("
    ");
          out.write("
    ");
          out.write("
    ");
          out.write("<html>
    ");
          out.write("<head>
    ");
          out.write("  <title>Auto Refresh Header Example</title>
    ");
          out.write("</head>
    ");
          out.write("
    ");
          out.write("<body>
    ");
          out.write('
    ');
          out.write("
    ");
          out.write("
    ");
          out.write("<img src="images/header.jpg"  alt="上海鲜花港 - 郁金香" />
    ");
          out.write("<p>我是页眉</p>
    ");
          out.write("
    ");
          out.write("
    ");
          out.write("
    ");
          out.write("<center>
    ");
          out.write("  <h2>Auto Refresh Header Example</h2>
    ");
          out.write("  ");
    
        // Set refresh, autoload time as 5 seconds
        response.setIntHeader("Refresh", 60);
    
        // Get current time
        Calendar calendar = new GregorianCalendar();
        String am_pm;
    
        int hour = calendar.get(Calendar.HOUR);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
    
        if(calendar.get(Calendar.AM_PM) == 0)
          am_pm = "AM";
        else
          am_pm = "PM";
        String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
        out.println("Crrent Time: " + CT + "
    ");
      
          out.write("
    ");
          out.write("</center>
    ");
          out.write("
    ");
          out.write('
    ');
          org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "Footer.jsp", out, false);
          out.write("
    ");
          out.write("
    ");
          out.write("</body>
    ");
          out.write("</html>");
        } catch (java.lang.Throwable t) {
          if (!(t instanceof javax.servlet.jsp.SkipPageException)){
            out = _jspx_out;
            if (out != null && out.getBufferSize() != 0)
              try {
                if (response.isCommitted()) {
                  out.flush();
                } else {
                  out.clearBuffer();
                }
              } catch (java.io.IOException e) {}
            if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
            else throw new ServletException(t);
          }
        } finally {
          _jspxFactory.releasePageContext(_jspx_page_context);
        }

    加粗的分别是include指令和include动作的转换代码。

     param动作

    修改上面的index.jsp代码:

    <%-- 在这里插入页脚文件 --%>
    <jsp:include page="Footer.jsp">
      <jsp:param name="subTitle" value="we take the string out of SOAP." />
    </jsp:include>

    修改Footer.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <a href="index.jsp">home page 我是页脚!</a>
    <h3>${param.subTitle}</h3>

    效果截图

    foward动作

    乱码问题没解决,只能输入中文。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <body>
        <p>欢迎来到我的页面!</p>
        <% if (request.getParameter("userName")== null) { %>
            <jsp:forward page="HandleIt.jsp" />
        <% } %>
        <p>你好!${param.userName}</p>
    </body>
    </html>

    HandleIt.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <body>
        <%
            request.setCharacterEncoding("utf-8");
        %>
        <p>很抱歉,你需要重新登陆。</p>
        <form action="Hello.jsp">
            <p>用户名:<input type="text" name="userName"></p>
            <p><input type="submit"></p>
        </form>
    </body>
    </html>
  • 相关阅读:
    抓取当前界面上任意控件图像的C#代码
    Visual Studio 2005各版本之间的区别
    CSDN上一个问题的回答
    RichTextBox的线程安全问题
    2005年LOGO设计趋势
    VB中的奇怪错误
    吴裕雄天生自然SPRINGSpring MVC的基本配置
    吴裕雄天生自然SPRING基于Java配置的Spring MVC应用
    吴裕雄天生自然SPRINGJSON数据交互
    吴裕雄天生自然SPRING基于注解的控制器
  • 原文地址:https://www.cnblogs.com/xkxf/p/7064589.html
Copyright © 2011-2022 走看看