• JSP基本语法


      记录一下自己复习到的知识点,以后看起来也方便。

      指令

      JSP中三个指令,page,include,taglib

      page 用于定义页面相关的信息,比如下面的代码:

    <%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>

      language定义了页面的使用语言;

      import引用页面中使用的工具类;

      contentType定义页面的编码格式;

      pageEncoding定义JSP的编码格式。

      inlcude 指令用于引用其他的JSP页面;taglib 指令用于定义标签,在struts中比较常用。

      注释

      在JSP中有几种注释:

      1 HTML版:

    <!-- 客户端可见 -->

      这种注释在查看html代码时,是可以看到的。

      2 JSP版:

    <%-- 客户端不可见 --%>

      3 JAVA版:

    //单行注释 ————————————————快捷键ctrl+/
    /* 多行注释 ____________快捷键ctrl+shift+/ */ 

      标签

      如何在HTML中使用JSP语句呢,JSP中有以下几种标签:

      1 定义变量、函数标签

        <%!
            String s = "xingoo";//声明变量
            int add(int a,int b){//声明函数
                return a+b;
            }
        %>

      在这种标签下定义的内容,会当做变量和方法,其他部分的JSP可以随意的引用。

      2 JSP主体

        <%
    
            out.println("s="+s+"<br>");
        
            out.println("<h1>test for buffer</h1>");
            out.println("没那么简单<br>");
        
        %>

      这种标签时主要的逻辑处理区域。

      3 JSP输出

        s=<%=s %><br> <%--表达式不以分号结束 --%>
        1+2=<%=add(1,2) %><br>

      这种可以直接输出变量的值,以及方法的返回值。

      JSP中的内置对象

      JSP中有一些内置的对象,可以直接使用:

      1 out  输出内容

      2 request 请求对象,获取请求的相关信息

      3 response 应答对象,设置响应的内容及信息

      4 session 会话对象

      5 application

      6 Page

      7 pageContext

      8 exception

      9 config

      先说说前面三个,其他的后面继续。

      out对象

      out对象可以直接把信息输出到页面中,在输出到页面之前,out中的内容被放置在缓冲区中,缓冲区大小为8192个字节。

      下面是out对象常用的方法:

        缓冲区大小:<%=out.getBufferSize() %>byte<br>
        <%
            out.println("s="+s+"<br>");
        
            out.println("<h1>test for buffer</h1>");
            out.println("没那么简单<br>");
            out.flush();
            //out.clear();
            out.clearBuffer();
            out.println("就能找到聊得來的伴<br>");    
        %>
        缓冲区大小:<%=out.getBufferSize() %>byte<br>
        缓冲区剩余大小:<%=out.getRemaining() %>byte<br>
        是否自动清空:<%=out.isAutoFlush() %>

      getBufferSize()方法用于获取当前缓冲区的大小;

      println()方法用于向页面打印内容;

      flush()方法用于刷新缓冲区,把缓冲区中的内容刷到页面中,并清空缓冲区;

      clear()方法用于清空缓冲区,如果flush之后调用该方法会报错。

      clearBuffer()方法用于清空缓冲区,如果flush之后不会报错。

      getRemaining()方法用于获取当前剩余的缓冲区大小;

      isAutoFlush()方法用于判断是否自动清空缓冲区;

      参考代码:

    <%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>
        <%-- 
        language 脚本使用的语言
        import 加载类文件
        contentType 编码方式
         --%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>out内置对象</title>
    </head>
    <body>
        <h1>JSP</h1>
        缓冲区大小:<%=out.getBufferSize() %>byte<br>
        <!-- 客户端可见 -->
        <%-- 客户端不可见 --%>
        <%!
            String s = "xingoo";//声明变量
            int add(int a,int b){//声明函数
                return a+b;
            }
        %>
        s=<%=s %><br> <%--表达式不以分号结束 --%>
        1+2=<%=add(1,2) %><br>
        <%
            //单行注释 ————————————————快捷键ctrl+/
            /* 多行注释 ____________快捷键ctrl+shift+/ */ 
            out.println("s="+s+"<br>");
        
            out.println("<h1>test for buffer</h1>");
            out.println("没那么简单<br>");
            out.flush();
            //out.clear();
            out.clearBuffer();
            out.println("就能找到聊得來的伴<br>");    
        %>
        缓冲区大小:<%=out.getBufferSize() %>byte<br>
        缓冲区剩余大小:<%=out.getRemaining() %>byte<br>
        是否自动清空:<%=out.isAutoFlush() %>
    </body>
    </html>
    View Code

      运行结果:

      request内置对象

      request对象,通常用于进行请求的处理。比如提交表单后,通过request对象提取表单中的内容。

      例如有如下的注册表单:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>用户登录</title>
    </head>
    <body>
        <h1>用户注册</h1>
        <hr>
        <form name="regForm" action="jspRequest.jsp" method="post">
            <table>
                <tr>
                    <td>username</td>
                    <td><input type="text" name="username"/></td>
                </tr>
                <tr>
                    <td>favorite</td>
                    <td>
                        <input type="checkbox" name="favorite" value="read"/>read
                        <input type="checkbox" name="favorite" value="music"/>music
                        <input type="checkbox" name="favorite" value="movie"/>movie
                        <input type="checkbox" name="favorite" value="game"/>game
                    </td>
                </tr>
                <tr>
                    <td colspan="2"><input type="submit" value="submit"/></td>
                </tr>
            </table>
        </form>
        <br>
        <br>
        <a href="jspRequest.jsp?username=lisi">url test request(en)</a><br>
        <a href="jspRequest.jsp?username=李四">url test request(zh)</a>
    </body>
    </html>
    View Code

      在jsp中可以使用setCharacterEncoding("")设置编码格式后,通过getParameter或者getParametervalues获取指定名称的内容。

        <%
            request.setCharacterEncoding("utf-8");//解决中文乱码问题
            //无法解决url传递的中文乱码
            
            request.setAttribute("password","12300");
        %>
        用户名:<%=request.getParameter("username") %><br>
        爱好:<%
        if(request.getParameterValues("favorite")!=null){
            String[] favorites = request.getParameterValues("favorite");
            for(int i=0; i<favorites.length; i++){
                out.println(favorites[i]+"&nbsp;&nbsp;");
            }
        }
        %><br>
        密码:<%=request.getAttribute("password") %><br>
        
        MIME类型:<%=request.getContentType() %><br>
        协议类型:<%=request.getProtocol() %><br>
        请求的服务器名:<%=request.getServerName() %><br>
        服务器端口号:<%=request.getServerPort() %><br>
        字符编码:<%=request.getCharacterEncoding() %><br>
        <!-- 只有POST才能获取到字节数,如果是GET方式则会显示-1 -->
        请求的长度(字节):<%=request.getContentLength() %><br>
        客户端IP:<%=request.getRemoteAddr() %><br>
        请求的真实路径:<%=request.getRealPath("jspRequest.jsp") %><br>
        上下文路径:<%=request.getContextPath() %><br>

      样例的代码如下:

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>request内置对象</title>
    </head>
    <body>
        <h1>request内置对象</h1>
        <%
            request.setCharacterEncoding("utf-8");//解决中文乱码问题
            //无法解决url传递的中文乱码
            
            request.setAttribute("password","12300");
        %>
        用户名:<%=request.getParameter("username") %><br>
        爱好:<%
        if(request.getParameterValues("favorite")!=null){
            String[] favorites = request.getParameterValues("favorite");
            for(int i=0; i<favorites.length; i++){
                out.println(favorites[i]+"&nbsp;&nbsp;");
            }
        }
        %><br>
        密码:<%=request.getAttribute("password") %><br>
        
        MIME类型:<%=request.getContentType() %><br>
        协议类型:<%=request.getProtocol() %><br>
        请求的服务器名:<%=request.getServerName() %><br>
        服务器端口号:<%=request.getServerPort() %><br>
        字符编码:<%=request.getCharacterEncoding() %><br>
        <!-- 只有POST才能获取到字节数,如果是GET方式则会显示-1 -->
        请求的长度(字节):<%=request.getContentLength() %><br>
        客户端IP:<%=request.getRemoteAddr() %><br>
        请求的真实路径:<%=request.getRealPath("jspRequest.jsp") %><br>
        上下文路径:<%=request.getContextPath() %><br>
    </body>
    </html>
    View Code

      请求结果:

      需要注意只有POST方式才能获取到请求的长度。

      response内置对象

      如果想模拟response的过程,可以直接创建一个如下的JSP,然后直接通过HTTP请求该页面:

    <%@ page language="java" import="java.io.*" contentType="text/html; charset=utf-8"%>
    <% 
        //设置编码格式
        response.setContentType("text/html;charset=utf-8");
    
        out.println("<h1>response内置对象</h1><hr>");
        //out.flush();//强制输出,保证out输出的内容在response的输出流对象之前
        
        PrintWriter outer = response.getWriter();
        outer.println("response输出流输出的对象");//在out之前打印
    
        //response.sendRedirect("reg.jsp");//请求重定向,需要把前面的flush方法注释掉
    
    %>

      注意的是,response有一个PrintWriter对象,这个对象默认会在out内置对象之前打印内容;

      如果使用out.flush强制刷新缓冲区,则可以在PrintWriter之前打印。

      重定向与转发

      重定向是response的方法:

    response.sendRedirect("jspRequest.jsp");//新的请求,数据都没了

      重定向相当于一次新的请求,但是最开始请求的数据都没有了。URL地址栏也会变成重定向后的地址。

      转发是request的方法:

    request.getRequestDispatcher("jspRequest.jsp").forward(request,response);//服务器端行为

      它会传送请求中的数据,并且URL地址栏不会发生变化,在用户看来,仿佛是没有经过转发一样。

      参考

      【1】慕课网:http://www.imooc.com/learn/166

  • 相关阅读:
    auto_ptr的VC版本源码剖析
    在VS2017中配置VLD(Visual Leak Detector)内存泄漏检测工具
    QT+VS中使用qDebug()打印调试信息无法显示
    QT+VS后中文字符乱码问题
    外观模式
    装饰模式(包装模式)
    组合模式
    桥接模式
    适配器模式
    单例模式
  • 原文地址:https://www.cnblogs.com/xing901022/p/4354626.html
Copyright © 2020-2023  润新知