zoukankan      html  css  js  c++  java
  • 18.JSP

    一、概述

    JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是Servlet
     
    html:静态内容
    servlet:服务器端的小应用程序。适合编写java逻辑代码(页面跳转),如果编写网页内容很不合适。
    jsp: jsp = html + java ,适合编写输出动态内容,但不适合编写java逻辑。(常用
     

    二、JSP原理

    JSP解析HTML直接写回客户端,解析Java按原样输出

    JSP在第一次被访问时会被Web容器翻译成Servlet再执行

    过程:

    第一次访问---->helloServlet.jsp---->helloServlet_jsp.java---->编译运行

    被翻译后的servlet在Tomcat的work目录中可以找到

    三、JSP的最佳实践

    Servlet:控制器。重点编写java代码逻辑三大作用:获取表单数据、处理业务逻辑、分发转向
    JSP:代码显示模板。重点在于显示数据

    webRoot下右键创建JSP
     
    Windows->perference搜索jsp->修改UTF-8

    四、JSP的基本语法

    1、JSP模版元素

    网页的静态内容。如:html标签和文本。
     

    2、JSP的脚本

    2.1、小脚本 <% java代码 %>
    2.1、表达式 <%= 2+3 %> 等价于out.print(2+3);
    2.3、声明 <%! %> 表示在类中定义全局成员,和静态块。
     

    3、JSP注释

    JSP注释:<%-- 被注释的内容 --%>   特点:安全,省流量,可见范围 jsp源码可见
    HTML注释:<!-- 注释 --> 特点:不安全,费流量   可见范围:jsp源码、翻译后的servlet、页面 显示html源码
    Java注释://单行注释  /*多行注释*/    可见范围 jsp源码翻译后的servlet

    4、3指令

    page指令、Include指令、taglib指令

    5、6动作

    6、9内置对象(重要)

     

    五、jsp的3个指令

    JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
     
    在JSP 2.0规范中共定义了三个指令:
    page指令、Include指令、taglib指令
     
    语法:
    <%@ 指令名称 属性1=“属性值1” 属性2=“属性值2”...%>
    或者:
    1 <%@ 指令名称 属性1=“属性值1”%>
    2 <%@ 指令名称 属性2=“属性值2”%>
    如:
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    1 <%@ page language="java" %>
    2 <%@ page import="java.util.*" %>

    1、page

    作用:用于定义JSP页面的各种属性
     
    属性:
    1.1、 import 和java代码中的import是一样的
    <%@ page import="java.util.Date,java.util.List"%>
    或者:
    1 <%@ page import="java.util.Date"%>
    2 <%@ page import="java.util.List"%>
    JSP会自动导入以下的包:
    1 import java.lang.*;
    2 import javax.servlet.*;
    3 import javax.servlet.http.*;
    4 import javax.servlet.jsp.*;
    1.2、 session: 是否会自动创建session对象。默认值是true;
     
    1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8kb.
     
    1.4 errorPage: 如果页面中有错误,则跳转到指定的资源。
    errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。
    如果不写“/”则代表相对路径。
     
    1.5、 isErrorPage: 是否创建throwable对象。默认是false;
     
    1.6、 contextType: 等同于response.setContextType("text/html;charset=utf-8");
     
    1.7、 pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。
     
    1.8、 isELIgnored: 是否支持EL表达式。 默认是false
    <%@ page pageEncoding="gbk" %>

    2、include

    静态包含:把其它资源包含到当前页面中。
    <%@ include file="/include/header.jsp" %>
    动态包含:
    <jsp:include page="/include/header.jsp"></jsp:include>
    两者的区别:翻译的时间段不同
    前者:在翻译时就把两个文件合并
    后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
     
    原则:能用静的就不用动的
     

    3、taglib

    作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

     六、jsp的6个动作

    使用标签的形式来表示一段java代码。
    如:
    1 <jsp:include >   // 动态包含
    2 <jsp:forward>  // 请求转发
    3 <jsp:param>  // 设置请求参数
    1 <jsp:useBean>  // 创建一个对象
    2 <jsp:setProperty>  // 给指定的对象属性赋值
    3 <jsp:getProperty>  // 取出指定对象的属性值

    七、jsp的9个内置对象

    指在JSP的<%=%> 和<% %>中可以直接使用的对象

     

    pageContext(重要)

    1、本身也是一个域对象

    JSP页面的上下文对象,它可以操作其它三个域对象(request session application)的数据
    page对象与pageContext对象不是一回事
    1 void setAttribute(String name,Object o);
    2 Object getAttribute(String name);
    3 void removeAttribute(String name);
    操作其它域对象的方法
    1 void setAttribute(String name,Object o,int Scope);
    2 Object getAttribute(String name,int Scope);
    3 void removeAttribute(String name,int Scope);
    scpoe的值(作用域):
    PageContext.PAGE_SCOPE
    PageContext.REQUEST_SCOPE
    PageContext.SESSION_SCOPE
    PageContext.APPLICATION_SCOPE
     
    findAttribute(String name);   // 自动从page request session application依次查找,找到了就取值,结束查找。(重要

    request:得到用户请求信息

    response:服务器向客户端的回应信息

    四大作用域的总结

    page域:当前jsp页面范围

    request域:一次请求

    session域:一次会话

    application域:整个web应用

    2、它可以创建其它的8个隐式对象

    在普通类中可以通过PageContext获取其他JSP隐式对象。自定义标签时就使用。
     

    3、提供了的简易方法

    1 pageContext.forward("2.jsp");
    2 pageContext.include("2.jsp");
     

    八、四大域对象:实际开发

    PageContext : pageConext 存放的数据在当前页面有效,开发时使用较少。(用表单存值)
    ServletRequest: request 存放的数据在一次请求(转发)内有效使用非常多
    HttpSession: session 存放的数据在一次会话中有效使用的比较多。如:存放用户的登录信息,购物车功能,用用户对象存取用户信息,可能涉及权限操作。
    ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,造成资源大量消耗,应尽量少用

    九、EL表达式

    1、EL概述和基本语法

     EL表达式:expression language 表达式语言
     嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中脚本的编写,要简化jsp中java代码开发。
     它不是一种开发语言,是jsp中获取数据的一种规范
    <!--JSP脚本-->
    <%--
        User u = (User)request.getAttribute("u");
        out.print(u);
    --%>
    
    <!--EL表达式--!>
    ${u }

    必须通过setAttribute才能通过getter(.)取值

    2、EL的具体功能

    (1)获取数据
    EL表达式只能获取存在4个作用域中的数据
    ${u} 原理: pageContext.findAttribute("u");
    url?name=tom ${param.name}
     
    EL获取对于null这样的数据,在页面中表现为空字符串
     

    EL获得pageContext域中的值:

    $(pageContextScope.key);

    EL获得request域中的值:

    $(request.key);

    EL获得session域中的值:

    $(session.key);

    EL获得application域中的值:

    $(application.key);

    EL从四个域中获得某个值$(key);
    同样是依次从pageContext域,request域,session域,application域中 获取属性,在某个域中获取后将不在向后寻找

     
    ${u.name} == u.getName()方法
    点(.) 运算符相当于调了getter方法,点后页面跟的是属性名
    <!--JSP脚本-->
    <%--
        User u = (User)request.getAttribute("u");
        out.print(u.getName());
    --%>
    
    <!--EL表达式--!>
    ${u.name}

    属性导航

    ${u.address.city }
    []运算符:点能做的,它也能做; 它能做的,点不一定能做
    ${student.name}== ${student['name']} == ${student["name"]}

    (2)运算
    empty
    判断null,空字符串和没有元素的集合(即使集合对象本身不为null)都返回true

     

    三元运算符

    ${empty list ? "是" : "否"}
    1 <%
    2     pageContext.setAttribute("gender", "1");
    3 %>
    4 <input type="radio" name="sex" ${gender==0  ? "checked='checked'" : ""}/>5 <input type="radio" name="sex" ${gender==0  ? "checked='checked'" : ""}/>女

     (3)隐式对象:11个

     

    ${param.userName}<----->request.getParameter("userName");
    pageContext重要,有对应对象,其余都是map
     
    $(pageContext.request.contextPath)

    相当于

    <%=pageContext.getRequest().getContextPath%>

    获得WEB应用的名称

    十、JSTL

    1、什么是JSTL

    JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
    简化Java代码,嵌入在jsp页面中使用标签的形式完成业务逻辑等功能
    最常使用的是它的核心库Core
    导包:jstl.jar、standard.jar

    2、JSTL的作用

    使用JSTL实现JSP页面中逻辑处理。如判断、循环等。

    3、使用JSTL

    1)在JSP页面添加taglib指令
    <%@ taglib uri="http://java.sun/com/jsp/jstl/core" prefix="c" %>
    第三个,在开始处加入
    prefix别名
    2)使用JSTL标签
    <c:if test=""></c:if>

    4、常用标签介绍

    ${i}  // 取值
    (1)核心标签库(基本不用):
     通用标签: set、 out、 remove
     

    (2) 条件标签:if choose

     

    (3) 迭带标签:foreah
    1.普通循环
    1 <c:forEach var="i" begin="2" end="10" step="2">
    2     <hr/>${i }
    3 </c:forEach>

    var:声明变量

    begin:初始化

    end:结束条件

    step:步长

    2.迭带器

    // 遍历:list set map和数组
    List list = new ArrayList();
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    pageContext.setAttribute("list”, list);

    for(类型 变量名:数组或集合)

    1 <c:forEach items="${list}"  var="1" varStatus="vs">
    2     <tr class=“${vs.index%2==0?'odd' : 'even'}”>
    3         <td>${1}</td>
    4         <td>${vs.index}</td>
    5         <td>${vs.count}</td>
    6         <td>${vs.first}</td>   
    7         <td>${vs.last}</td>   
    8     </tr>
    9 </c:forEach>
    <style type="text/css">
        .odd{
          background-color:#c3f3c3;  
        }
        .even{
          background-color:#f3c3f3;  
        }
    </style>
     c:forEach中的varStatus属性。
      指向一个字符串,该字符串引用一个对象。 map.put("vs",一个对象);
      这个对象记录着当前遍历的元素的一些信息:
      getIndex():返回索引。从0开始
      getCount():返回计数。从1开始
      isLast():是否是最后一个元素
      isFirst():是否是第一个元素
     
     
     
     
    有志者,事竟成,破釜沉舟,百二秦关终属楚;苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
  • 相关阅读:
    Android Media Playback 中的MediaPlayer的用法及注意事项(二)
    Android Media Playback 中的MediaPlayer的用法及注意事项(一)
    34. Search for a Range
    33. Search in Rotated Sorted Array
    32. Longest Valid Parentheses
    31. Next Permutation下一个排列
    30. Substring with Concatenation of All Words找出串联所有词的子串
    29. Divide Two Integers
    28. Implement strStr()子串匹配
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/1989guojie/p/6147913.html
Copyright © 2011-2022 走看看