zoukankan      html  css  js  c++  java
  • Day9 JSP

    JSP概述

    JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是Servlet。

    jsp = html + java

    html:静态内容

    servlet:服务器端的小应用程序。适合编写java逻辑代码,如果编写网页内容--苦逼。

    jsp:适合编写输出动态内容,但不适合编写java逻辑。

    JSP运行原理

    a)当访问index.jsp时,数据是如何进行返回的?

    经过翻译和编译的过程,通过流将数据写回。

    b)html代码部分

    JspWriter.write()

    c)java代码部分

    原样

    d)9大内置对象(service方法)

    JSP基本语法

    a) jsp指令  <%@   %>

    b) jsp模板   html代码

    c) jsp的脚本片段

      <%  java  %>

      部分脚本片段的代码可以不完整,但是作为整体必须完整。

      脚本片段之间可以互相访问。

    d) 脚本表达式:输出

      <%=表达式|变量   %>

      但是不能出现;等字符

    e) jsp声明

      <%!  java  %>

      翻译到成员位置。

      定义成员变量,成员方法,静态方法等

      不能使用内置对象。

    JSP的指令

    控制jsp执行。<%@ page  %>

    a) page:页面行为

    作用:用于定义JSP页面的各种属性

    属性

    1.1、 import 和java代码中的import是一样的
    <%@ page import="java.util.Date,java.util.List"%>
    或者:
    <%@ page import="java.util.Date"%>
    <%@ page import="java.util.List"%>
    JSP会自动导入以下的包:
    import java.lang.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    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
    <error-page>
           <error-code>500</error-code>
           <location>/error.jsp</location>
      </error-page>
      
      <error-page>
          <exception-type>java.lang.Exception</exception-type>
          <location>/error.jsp</location>
      </error-page>
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.io.File" %>

    b) include:包含(静态包含)

    <%@include file="header.jsp" %>
    
    文件在翻译的时候进行合并

    c) taglib: 导入标签库(jstl)

    作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

    JSP标签

    使用标签的形式来表示一段java代码。

    如: <jsp:include page="2.jsp"></jsp:include>

    <jsp:include > 动态包含

    <jsp:forward> 请求转发

    <jsp:param> 设置请求参数

    <jsp:useBean> 创建一个对象

    <jsp:setProperty> 给指定的对象属性赋值

    <jsp:getProperty> 取出指定对象的属性值

    JSP的内置对象

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

    对象名

    类型

    说明

    request

    javax.servlet.http.HttpServletRequest

    response

    javax.servlet.http.HttpServletResponse

    session

    javax.servlet.http.HttpSession

    由session="true"开关

    application

    javax.servlet.ServletContext

    exception

    java.lang.Throwable

    由isErrorPage="false"开关

    page

    java.lang.Object当前对象this

    当前servlet实例

    config

    javax.servlet.ServletConfig

    out

     javax.servlet.jsp.JspWriter

    字符输出流,相当于 printWriter对象

    pageContext

     javax.servlet.jsp.PageContext

    pageContext

    本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据

    //设置其他域的数据
            pageContext.setAttribute("user", "request", PageContext.REQUEST_SCOPE);
    
    <!-- 获取其他域的数据 -->
        <%-- <%=pageContext.getAttribute("user", PageContext.SESSION_SCOPE) %> --%>
    
    pageContext.findAttribute("user")
    遍历所有的域获取数据
    page   request   session   application

    四大域对象

    PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。

    ServletRequest: request  存放的数据在一次请求(转发)内有效。使用非常多。

    HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。

    ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。

    最佳实践

    servlet

    java代码方便(数据),展示数据(printWriter)不方便

    jsp

    java繁琐,展示数据方便

    servlet获取数据;

    jsp展示数据。

    EL表达式

     EL表达式:expression language 表达式语言

     要简化jsp中java代码开发。

     它不是一种开发语言,是jsp中获取数据的一种规范

    获取域中的值

    pageContext.findAttribute()

    ${book.bname }   <!--获取对象属性  -->
    ${books[1].bname }   <!-- 获取集合中的数据 -->
    ${maps.name }   <!-- 获取map中的值 -->

    实现计算

    <%--  ${sum + 2 } 
    ${sum >= 1 }
    ${1>2 and 2>3 } --%>
    ${empty books }  <!--判断是否为空  null   ""    -->

    JSTL标签库

    标签库的jar

    standard.jar    jstl.jar

    导入标签库

    <%@taglib %>

    core:标准标签库

    fmt:格式化标签库

    %@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%
    
    
    <!-- 页面输出  
            value:输出的值  支持el表达式   
            default:默认值
            escapeXml:是否转义(默认转义)
            -->
        
        <%
          request.setAttribute("name", "<p>aa</p>");
        %>
       <%-- <c:out value="${name }"  default="aaa" ></c:out> --%>
       
       <!-- 用于判断
           test:支持el表达式
        -->
      <%--  <c:if test="${1 == 1 }">
                哈哈
       </c:if> --%>
       
       <c:choose>
            <c:when test="${1 == 1 }">
                哈哈
            </c:when>
         <c:otherwise>
             呵呵
         </c:otherwise>
       </c:choose>
       
       <%
         List<Book> books = new ArrayList();
         Book book = new Book();
         book.setBname("ls");
         books.add(book);
         book = new Book();
         book.setBname("ww");
         books.add(book); 
         request.setAttribute("books", books);
       %>
       
       <!-- 用于遍历
            items:遍历的内容  支持el表达式
            var:每一项的name值
            varStatus:状态信息的保存变量
            begin:开始的位置
            end:结束的位置
            step:步长
        -->
       <c:forEach var="book" items="${books }" varStatus="status"  >
             bname=${book.bname } &nbsp;  ${status.index }<br/>
       </c:forEach>
    
    <%
          Date date = new Date();
          request.setAttribute("date", date);
       %>
       <fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss" />
  • 相关阅读:
    线程池全面总结
    有状态(Stateful)与无状态(Stateless)
    Callable接口--有返回值的线程
    集合类--最详细的面试宝典--看这篇就够用了(java 1.8)
    [Android App]IFCTT,即:If Copy Then That,一个基于IFTTT的"This"实现
    应朋友死皮白咧地邀请贴一个招聘广告
    [Android]Android焦点流程代码分析
    [Android]Android内存泄漏你所要知道的一切(翻译)
    [Android]Gradle 插件 DiscardFilePlugin(class注入&清空类和方法)
    [Android]使用RecyclerView替代ListView(四:SeizeRecyclerView)
  • 原文地址:https://www.cnblogs.com/qingyunzong/p/8394682.html
Copyright © 2011-2022 走看看