java web学习笔记:JSP的知识点总结

1、什么是JSP

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

 

2、为什么JSP也是一种动态web资源的开发技术呢?

    写JSP虽然就像是在写html,但jsp技术允许在页面中编写java代码。并且允许开发人员在页面中获取requestresponseweb开发常用对象,实现与浏览器的交互,所以,jsp也是一种动态web资源的开发技术。

不管是jsp还是Servlet,虽然都可以用于开发动态web资源,但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把Servlet作为web应中的控制组件来使用,而把jsp技术作为数据显示模板来

使用。

其原因是:程序的数据通常要美化后再输出:

jsp即用java代码产生动态数据,又做美化会导致页面难以维护。

servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。

因此最好的办法就是根据这两门技术的特点,让他么各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。

 

JSP语法:

JSP页面可以包含模板元素、脚本元素、指令、EL(Expression Language)表达式、行为元素和注释等内容。有三种类型的脚本元素:JSP脚本片段,JSP表达式和JSP声明,它们内部使用的都是Java脚本代码。

1、JSP模板元素

   JSP页面中的HTML内容称之为JSP模板元素

   JSP模板元素定义了网页的基本骨架,即定义了页面的结构和外观,例如:<input><input>  <font></font>

 

2、JSP脚本表达式

   JSP脚本表达式(expression)用于将程序输出到客户端语法:

   <%=  变量或者表达式 %>

   例如:当前时间:<%= new java.util .Date()%>

   JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(...)将数据输出给客户端。

   JSP脚本表达式中的变量或表达式后面不能有分好(;)

  <%=  %> 脚本表达式,作用就是用于向浏览器输出数据

 

3、JSP脚本片段

   JSP脚本片段(Scriptlet)用于在JSP页面中编写多行Java代码,

  语法:

<%

  多行java代码

%>

注意:JSP脚本片段中只能出现java代码,不能出现其它模板元素,JSP引擎在翻译JSP页面中,会将JSP脚本片段中的java代码将被原封不动地放到Servlet_jspServlet方法中。

JSP脚本片段中的java代码必须严格遵循java语法,例如,没执行语句后面必须分号(;)结束。

在一个JSP页面中可以有多个脚本片段,在两个或多个脚本片段之间可以嵌入文本、HTML标记和其他JSP元素。

多个脚本片段中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况。

单个脚本片段中的java语句可以使不完整的,但是,多个脚本片段组合后的结果必须是完整的java语句。

 

4、JSP声明

  JSP页面中编写的所以代码,默认会翻译到servletservice方法中,而jsp声明中的java代码被翻译到_jspServlet方法的外面。语法:

<%!

  Java代码

%>

所以jsp声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法。多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。JSP隐式对象的作用范围仅限于Servlet_jspServlet方法,所以在JSP声明中不能使用这些隐式对象。

 

5、JSP注释

JSP注释的格式:<%-- 注释信息--%>

JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。

 

6、JSP指令  

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

JSP2.0规范中共定于了三个指令:

 Page指令,Include指令,taglib指令

JSP指令的基本语法:<%@指令 属性名=%>

如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。

Page的指令:

Page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。

Include指令:

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

语法:<%@include file= relativeURL%>

其中的file属性用于指定被引入文件的路径,路径以“/”开头,表示代表当前web应用。

细节:

1);被引入的文件必须遵循JSP语法

2);被引入的文件可以使用任意的扩展名,即使其扩展名是htmlJSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见名知意,JSP规范建议使用.jspg(JSP fragments)作为静态引入文件的扩展名。

3);由于使用include指令将会涉及到2JSP页面,并会把2JSP翻译成一个servler,所以这2JSP页面的指令不能冲突(除了pageEncoding和导包除外)

例如:在web.xml中写入的配置代码如下:

<error-page>

    <exception-type>java.lang.ArithmeticException<exception-type>

    <location>/error/error.jsp</location>  //路径

</error-page>

<error-page>

    <error-page>404<error-page>

    <location>/error/404.jsp</location>  //路径

</error-page>

 

7JSP常用标签

<jsp:include>标签

<jsp:forward>标签

<jsp:param>标签

<jsp:include>标签用于把另外一个资源的输出内容插入进JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。

<jsp:forward>标签 当使用<jsp:include><jsp:forward>标签引入或将请求转发给其他资源时,可以使用<jsp:param>标签向这个资源传递参数。Name属性的用于指定参数名,value属性用于指定参数值,在<jsp:include><jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。

 

8、JSP内置对象

JSP运行原理和九大隐式对象

     每个JSP页面在第一次被访问时,web容器都会把请求交给JSP引擎 (即一个Java程序),去处理,JSP引擎先将JSP翻译成一个

_jspServlet(实质上也是一个servlet),然后按照servlet的调用方式进行调用。

由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但是第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。

JSP引擎在调用JSP对应的_jspServlet使用,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个响应的变量,开发人员在JSP页面中通过这些变量就可以快速获得者9大对象的引用。

   为了简化JSP表达式和脚本片段的编写,JSP一共提供了9个预先定义的变量,这些变量也被称之为隐式对象,一些书籍也将它们称之为JSP内部对象,这9大隐式对象分别是:requestresponseoutsessionapplicationconfigpageContextpageexception,其中exception对象只能在处理错误的JSP页面中使用.

ApplicationServletContext类型的实例对象

SessionHttpSession 类型的实例对象

ConfigServletConfig类型的实例对象

RequestHttpServletRequest类型的实例对象

ResponseHttpServletResponse类型的实例对象

Page对象的类型是Object,它被赋值为this,即代表JSP页面所编译成的Servlet对象自身,page对象前的用处不大,它是为了Java不再是唯一的JSP页面编程语言而准备的占位符。

Out隐式对象:

Out隐式对象用于向客户端发送文本数据,

Out对象时通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。

JSP页面中的out隐式对象的类型为JspWriterJspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。

只有向out对象中写入了内容,且满足如下任何一个条件时,out返回的Printwriter对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:

1):设置page指令的buffer属性关闭了out对象的缓存功能

2)out对象的缓冲区已满

3):整个JSP页面结束

pageContext对象

pageContext对象时JSP技术中最重要的一个对象,它代表JSP页面的运行环境。

1);这个对象不仅封装了对其它8大隐式对象的引用。

2);它自身还是一个域对象,可以用来保存数据

3);并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。

4)findAttribute方法:查找各个域中的属性。

 

9、引入和跳转到其它资源

PageContext类中定义了一个forward方法和两个include方法分别简化和替代RequestDispatcher.forward方法和include方法。

方法接收到的资源如果以“/”开头,“/”代表当前web应用。

 

JSP标签也称之为Jsp  Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

 

10、四个域对象:

Web开发接触到4个域对象,这4个域对象时学习web重点,也是笔试经常考察的知识点

pageContext(称之为page)

Request(称之为request)

Session(称之为session)

servletContext(称之为application)

 

简单的总结,请博友们提出宝贵意见和建议,非常感谢!

你可能感兴趣的:(java,编程,Web,jsp,servlet)