day11_jsp/EL/JSTL学习笔记

Posted haha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day11_jsp/EL/JSTL学习笔记相关的知识,希望对你有一定的参考价值。

一、jsp概述

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

    JSP实际上就是Servlet

 

    JSP这门技术的最大的特点在于:写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

    jsp = html + java

 

    html:静态内容。

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

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

 

    Servlet负责那些事情?

      1. 获取表单数据

      2. 处理业务逻辑

      3. 分发转向

    提问:为什么JSP技术也是一种动态web资源的开发技术?

      答:因为JSP技术允许在页面中嵌套java代码,以产生动态数据,并且web服务器在执行jsp时,web服务器会传递web开发相关的对象给jsp,

           jsp通过这些对象,可以与浏览器进行交互,所以jsp当然也是一种动态web资源开发技术。

    强调一个概念:

      对现在的用户而言,认为通过浏览器看到的东西都是网页。

      但我们程序员心里要清楚,开一个浏览器访问网页,这些网页有可能是一个html页面(即静态web资源),也有可能是一个动态web资源(即用servlet或jsp程序输出的)。

二、jsp的原理

    1. IE浏览器在访问JSP页面时,Web服务器是如何调用并执行一个jsp页面的?(Servlet)

      答:第一次:转译(翻译) --> 编译 --> 执行

          第二次:执行

    2. Web服务器在执行jsp页面时,是如何把Jsp页面中的html排版标签发送到客户端的?

      答:out.print("<......>"); 或者 out.write("<......>");

    3. Jsp页面中的java代码服务器是如何执行的?

      答:服务器 --> .java文件 --> .class文件 --> 结果out回客户端

    4. Web服务器在调用jsp时,会给jsp提供一些什么java对象(内置对象)?

      答:HttpSession、ServletConfig、ServletContent、request、response、out等等。

        
        
 
        

三、jsp的最佳实践

    Servlet:控制器。重点编写java代码逻辑(获取表单数据、处理业务逻辑、分发转向)

    JSP:代码显示模板。重点在于显示数据。(为什么显示数据不直接用.html文件呢?因为.jsp文件中可以插入java代码显示回显消息,简言之,jsp功能更强大)

 

    示例:

      lojin.jsp

      doLogin.jsp(该jsp文件,先转译成java文件,注意:该jsp文件说白了其实就是纯的java代码,那么就最好不使用jsp文件了。)

      success.jsp

 

    但是用户关心的是只有显示给他们的页面,你怎么实现的,跟我(用户)没有关系。所以doLogin.jsp的代码可以放到src中。

四、jsp的基本语法

    1JSP的模版元素:简言之就是网页的静态内容

    例如:html标签和普通文本。

    2JSP的脚本

    2.1、小脚本 

      <% java代码 %>

    2.1、表达式 

      <%= 2 + 3 %> 等价于out.print(2 + 3);

          
 
          

    2.3、声明 

      <%! %> 表示在类中定义全局成员和静态块。

    3JSP注释

    JSP注释:<%-- 被注释的内容 --%> 特点:安全,省流量

    网页注释:<!-- 网页注释 -->     特点:不安全,费流量

          

    4JSP3个指令

    5JSP6个动作

    6JSP9个内置对象

五、jsp3个指令

  JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分

  在JSP 2.0规范中共定义了三个指令: 

    page指令(页面级别)

    include指令(导入其它页面的信息)

    taglib指令(标签指令)

  例如: 

      

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; UTF-8"%>

  语法:

      <%@ 指令名称 属性1="属性值1" 属性2="属性值2 ...... %>

    或者:

      <%@ 指令名称 属性1="属性值1%>

      <%@ 指令名称 属性2="属性值2%>
 

  示例:

      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
    或者:
      <%@ page language="java" %>
      <%@ page import="java.util.*" %>

   1page

    作用:page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面。

        为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。 

    属性:

      1.1importjava代码中的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.2session: 表示是否会自动创建session对象。其默认值是true。

      1.3buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小,默认大小是8kb。建议最好不要改大小。

      1.4、errorPage: 如果页面中有错误,则跳转到指定的资源。(即不让页面弹出404/500等错误)

        errorPage="/uri" 

        如果写"/"则代表当前应用的目录下,绝对路径。

        如果不写"/"则代表相对路径。

      1.5isErrorPage: 表示是否创建throwable对象。其默认值是false。作用:输出页面错误信息:by zero

      1.6contextType: contentType="text/html; charset=UTF-8" 告诉浏览器使用什么编码来解析文本。等同于 response.setContextType("text/html; charset=utf-8"); 

      1.7pageEncoding: 告诉JSP引擎(服务器)要转译(翻译)的文件使用的编码。

        例如:<%@ page  pageEncoding="gbk" %>

      1.8isELIgnored: 是否支持EL表达式。 默认是false,表示支持EL表达式。

        例如:${1+1}  等价于out.print(1+1);

      pageEncoding说明图:

        

   2include

      include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。

        静态包含:把其它资源包含到当前页面中。

          <%@ include file="/include/header.jsp" %>

        动态包含:

          <jsp:include page="/include/header.jsp"></jsp:include>

        两者的区别:转译(翻译)的时间段不同

          前者:在翻译时就把两个文件合并

          后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。

        使用原则:能用静的就不用动的。原因之一是:可以省略一些代码的书写。

   3taglib

      作用:在JSP页面中导入JSTL标签库。替换以上是关于day11_jsp/EL/JSTL学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

python_day7学习笔记

《30天自制操作系统》14_day_学习笔记

Java学习笔记day_01

Python学习笔记_day2

Python学习笔记_Day1_初始Python

Python学习Day2笔记