JSP

2017-11-12  本文已影响11人  CoderHong

一、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 属性="值" 属性="值"%>

常见的属性:

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);
<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的核心类库:

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>
上一篇 下一篇

猜你喜欢

热点阅读