JSP

作者: CoderHong | 来源:发表于2017-11-12 12:51 被阅读11次

    一、JSP概述

    jsp是服务器页面 运行在服务端。将内容的生成与信息的展示相分离。本质上就是一个Servlet。产生的java文件和class保留在tomcat的word目录下。

    二、JSP脚本

    java代码片段
    格式:

    <% 
        java代码
    %> 
    

    2. 输出表达式 相当于相当于out.print();

    <%= 输出表达式%> 
    

    3. 成员变量的声明

    <%!  %> 
    

    三、JSP指令

    新建一个jsp文件。第一行内容 就是jsp的page指令。

    Snip20171112_9.png

    3.1常见的指令
    page
    该指令的作用:主要声明jsp页面的一些属性。
    书写的格式:

    <%@ page 属性="值" 属性="值"%>
    

    常见的属性:

    • 重要的属性:
      • contentType:设置响应流的编码 以及通知浏览器用什么打开 设置文件的mime类型
      • pageEncoding:设置页面的编码
        • 提示:两者都出现,各自使用各自的编码,若两者出现一个,就使用出现的编码,两者都不出现 使用服务器默认的编码 ISO8859-1缺点不支持中文。
      • import: 导入所需要的jar包
    • 了解的属性
      • language:当前jsp页面可以嵌套的语言。目前只支持Java语言。
      • autoFlush: 自动刷新 默认为true
      • session="true" jsp页面是否可以使用session这个内置对象
      • isELIgnored 是否忽略EL表达式

    include
    静态包含

    • 书写格式
    <%@include file="相对路径或者内部路径" %>
    

    taglib
    导入标签库

    • 书写格式
    <%@taglib prefix="前缀名" uri="名称空间" %>
    调用标签库方法
    <前缀名:方法名></前缀名:方法名>
    

    四、JSP内置的对象(9大内置对象)

    内置对象 描述
    out right-aligned
    request 相当于与Servlet的HttpServletRequest)
    response 相当于与Servlet的HttpServletResonse)
    session 相当于与Servlet的HttpSession
    page
    config ServletConfig
    application 相当于与Servlet的ServletContext(全局管理者)
    pageContext 是当前页面的一个域对象
    exception 异常

    五、JSP的域对象

    内置对象 作用域
    application 整个项目
    session 一次回话
    request 一次请求
    pageContext 一个页面中

    以上三个JSP的域对象很好理解,pageContext这个是之前没有遇到的域对象。
    开发中只用pageContext在jsp中获取项目名

    ${pageContext.request.contextPath } 
    /项目名
    

    pageContext的作用

    1. 可以操作其他的域对象
    pageContext.setAttribute("rkey", "rvalue", pageContext.APPLICATION_SCOPE);
    pageContext.setAttribute("rkey", "rvalue", pageContext.SESSION_SCOPE);
    pageContext.setAttribute("rkey", "rvalue", pageContext.REQUEST_SCOPE);
    

    提示:这种操作比较麻烦,看法中一般不用,直接操作域对象。不通过pageContext获取。

    1. 获取其他的内置对象
    getReauest():获取request内置对象
    

    3.便捷查找
    依次从pageContext request session application中查找相应的属性,如果查不到返回一个null。

    pageContext.findAttribute(arg0);
    

    六、JSP的动作标签

    <jsp:forward page="请求转发"></jsp:forward>  内部路径 相当于Servlet转发
    <jsp:include page="动态包含"></jsp:include> 
    

    七、EL

    JSP的内置表达式语言 从JSP2.0开始支持的。用来替代<%= %>

    el 11个内置的对象

    内置对象
    pageScope
    requestScope
    sessionScope
    applicationScope
    param
    paramValues
    header
    headerValues
    initParam
    cookie
    pageContext

    除了pageContext其余获取的全是map集合。
    常见用法:

    1. 获取域中的数据
    • 获取简单的数据
    ${applicationScope| sessionScope| requestScope.属性名 } 这种写法比较麻烦
    简单写法
    便捷方式
    ${属性名 }
    底层调用的是 pageContext的 findAttribute(String key);
    
    • 获取复杂的数据
      • 数组
      • list
      • map
        下面是具体的写法示例;
    <body>
        
        <%
        /*域中数组数据  */
            String[] arr = new String[]{"jake", "rose", "jim"};
            session.setAttribute("names", arr);
        
        /*域中list数据*/    
            List list = new ArrayList();
            list.add("Jake");
            list.add("rose");
            list.add("jim");
            
            request.setAttribute("list", list);
            
        /*域中map数据*/
            Map user = new HashMap();
            user.put("name", "Jake");
            user.put("age", 12);
            
            application.setAttribute("user", user);
            
            pageContext.setAttribute("pkey", "pvalue");
        %>
        
        <hr>
        获取session域中的数组数据:
        老的方式:<br>
        ${sessionScope.names[1] }<br>
        便捷方式:<br>
        ${names[0] }
        
        <hr>
        获取session域中的数组数据:<br>
        老的方式:<br>
        ${requestScope.list[1] }<br>
        便捷方式:<br>
        ${list[0]} 
        
        <hr>
        获取session域中的Map数据:<br>
        老的方式:<br>
        ${applicationScope.user.name }<br>
        便捷方式:<br>
        ${user.name} 
        
    </body>
    

    Javabean导航

    javaBean规范:
            1.必须是以个公共具体的类 public class
            2.提供私有的字段
            3.提供公共访问的字段的setter getter方法
            4.提供一个无参的构造器
    

    八、jstl

    jsp标准的标签库语言 就是替代java脚本的
    常用的iffor

    第一步就是导入jar包

    • jstl.jar
    • standard.jar
      第二步在jsp文件导入库


      Snip20171112_10.png

    jstl的核心类库:

    • core: 核心类库
    • fmt: 格式化| 国际化
    • sql:过时了
    • 函数库:很少使用

    c:if

    <!-- 最常见的写法 -->
        <c:if test="${3>4 }">
            3大于4
        </c:if>
    

    c:for
    下面有list、map、各种用法示例:

    <body>
         
         <%
         
            List i = new ArrayList();
            i.add("11");
            i.add("22");
            i.add("33");
            i.add("44");
            
         // 往request域中放入一个list
            request.setAttribute("list", i);
         
            Set s = new HashSet();
            s.add("rose");
            s.add("jake");
            
            request.setAttribute("set", s);
            
            Map m = new HashMap();
            m.put("username", "tom");
            m.put("age", "18");
            // 往域中放入一个map
            request.setAttribute("map", m);
         %>
         
         <c:forEach items="${list }" var="n">
            ${n }
         </c:forEach>
         
         <c:forEach items="${set }" var="n" varStatus="vs">
            ${n } ----索引i=${vs.count }<br>
         </c:forEach>
         
         <c:forEach items="${map }" var="en">
            ${en.key }----${en.value }<br>
         </c:forEach>
    
        
    </body>
    

    相关文章

      网友评论

          本文标题:JSP

          本文链接:https://www.haomeiwen.com/subject/gwvnmxtx.html