zoukankan      html  css  js  c++  java
  • JSP技术

    (一)JSP技术的产生
    Servlet技术 用来动态生成 网页数据资源,Servlet生成HTML 页面数据时,所有内容都是通过 response.getWriter response.getOutputStream 向浏览器输出的:

    用Servlet 输出流打印网页信息

    Servlet生成网页缺点
    1、通过print输出网页 开发很不方便
    2、美工人员经常对页面进行CSS修饰,美工人员在java代码中调试CSS
    3、无法使用开发工具对页面代码进行调试 JS CSS

    什么是JSP技术
    JSP是Java Server Pages 的简称,是一种运行在服务器端的Java页面,开发时是采用在HTML页面中嵌套Java页面来实现的。JSP 和Servlet技术一样,都是动态网页开发技术 (JSP在运行时,需要先翻译为Servlet才能运行)。

    (二)JSP运行原理

    当用户访问JSP页面时,JSP页面的处理过程如图所示。

    这里写图片描述

    (1)当客户第一次请求JSP页面时,JSP引擎会通过预处理把JSP文件中的静态数据(HTML文本)和动态数据(Java脚本)全部转换为Java代码。这个转换工作实际上是非常直观的,对于HTML文本只是简单的用out.println()方法包裹起来,对于Java脚本只是保留或做简单的处理。

    (2)JSP引擎把生成的.java文件编译成Servlet类文件(.class)。对于Tomcat服务器而言,生成的类文件默认的情况下存放在< Tomcat>work目录。

    (3)编译后的class对象被加载到容器中,并根据用户的请求生成HTML格式的响应页面。

    在执行JSP网页时,Web容器执行字节码文件将生成的结果返回给客户端进行显示。通常可分为两个时期:转译时期(Translation Time)和请求时期(Request Time)。在转译时期,JSP网页被转译成Servlet类,然后被编译成类文件;在请求时期,Servlet类执行后,响应结果至客户端。

    尽管JSP文件看起来更像是HTML文件而不是Servlet文件,但事实上它将转换为Servlet文件,音标大全其中的静态HTML仅仅用来输出Servlet服务方法返回的信息。如果JSP页面已经被转换为Servlet且该Servlet被编译进而被转载(在第一次被请求时),这样再次请求次JSP页面时,将感觉不到延迟。一些Web服务器允许为JSP文件定义别名,好像一个URL是指向一个HTML,但事实上指向的是一个Servlet或JSP页面。

    其中,对于编译阶段
    JSP页面在第一次被访问的时候,web容器(JSP引擎)会将JSP翻译成一个Servlet,然后调用servlet的service()方法,所以第一次访问的时候比较慢。

    JSP编译后的Servlet会被放到< Tomcat>workCatalinalocalhostwebcontext

    当jsp页面被再次访问的时候,web容器会去直接调用Servlet的 service()方法,所以通常来讲 jsp 只是在第一次被访问的时候比较慢。如果jsp页面做了修改,此时web容器会重新翻译jsp

    (三)JSP的页面结构

    构造一个JSP页面,除了可内嵌规则的HTML代码之外,还有三类主要的JSP元素:指令标识(Directive),脚本标识(Scripting)和动作标识(Action)。

    指令标识

    指令标识主要用于设定整个JSP页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何内容输出到网页中,即指令标识对于客户浏览器是不可见的。

    • 指令名:用于指定指令名称,在JSP中包含pageincludetaglib 3条指令。
    • 属性:用于指定属性名称,不同的指令包含不同的属性。在一个指令中,可以设置多个属性,各属性之间用逗号或空格分隔。
    • 属性值:用于指定属性信息。
      JSP指令标识的语法格式:

    page指令
    page指令用于向jsp引擎说明jsp的页面情况,page指令一般都放在页面的开头,但是不管放在哪都对整个页面起作用。
    page指令是针对当前页面的指令,常用的page指令有8个:

    1.<%@page language=”java”%>设置jsp中用到的语言,用到的是java,也是目前唯一有效的设定

    2.<%@page extends=”mypackage.myclass”%>设置目前jsp要继承的父类,一般不需要设置,在默认情况下,jsp页面默认的父类是HttpJspBase。

    3.<%@page import=”java.sql.*”% > jsp页面所用到的类

    4.<%@page errorPage=”error.jsp”%> 设置该jsp页面出现异常时所要转到的页面,如果没设定,口语学习方法容器将使用当前的页面显示错误信息

    5.<%@page isErrorPage=”true”%> 设置该jsp页面是否作为错误显示页面,默认是false,如果设置为true,容器则会在当前页面生成一个exception对象,和4拍配使用

    6.<%@page contentType=”text/html;charset=gb2312”%> 设置页面文件格式和编码方式

    7.<%@page isThreadSafe=”true”% > 设置容器以多线程还是单线程运行该jsp页面,默认是true,是多线程。设置为false,则以单线程的方式运行该jsp页面

    8.<%@page session=”true”% > 设置该jsp页面是否可以用到session对象(jsp内置对象,为web容器创建),默认是true,能用到session.设置为false,则用不到

    最后,对于page指令,还有几点需要注意:

    1.<%@page %>指令作用于整个JSP页面,同样包含静态的包含文件。但是<%@page%>指令不能作用于动态的包含文件。

    2.可以再一个页面中引用多个<%@page %>指令,但是除了import属性能多次使用之外,其他的属性都只能用一次。

    3.<%@page %>指令可以放在JSP文件的任何地方,但是为了JSP程序的可读性及养成好的编程习惯,最好还是放在JSP文件的顶部。

    include指令

    文件包含指令include是JSP的另一条指令标识。通过该指令可以在一个JSP页面中包含另一个JSP页面。不过该指令是静态包含,也就是说被包含文件中所有内容会被原样包含到该JSP页面中,即使被包含的文件中有JSP代码,在包含时也不会被编译执行。使用include指令,最终将生成一个文件,所以在被包含和包含的文件中,不能有相同名称的变量。include指令包含文件的过程如下图所示:
    这里写图片描述

    include指令的语法格式如下:

    使用include指令包含文件可以大大提高代码的重用性,而且也便于以后的维护和升级。

    taglib指令

    在JSP文件中,可以通过taglib指令标识声明该页面中所使用的标签库,同时引用标签库,雅思培训费并制定标签的前缀,在页面中引用标签库后,就可以通过前缀来引用标签库中的标签。taglib指令的语法如下:

    脚本标识

    脚本标识(Scripting Element)包含三个部分:Scriptlet(脚本程序)、Expression(表达式)和Declaration(声明)。

    Scriptlet元素允许Java代码被直接嵌入到JSP页面。

    语法:<% Java代码或是脚本代码 %>

    功能:Scriptlet中可以包含有效的程序片段,只要是合乎Java本身的标准语法即可。通常主要的程序也是写在这里,Scriptlet是以<%为开始,%>为结尾。

    注意:编译JSP时,编译器在_jspService()方法中只是简单地不做修改地包含Scriptlet的内容。

    Scriptlet能够包含多个语句,方法,变量,表达式,可以完成以下功能。

    (1) 声明将要用到的变量或方法;

    (2)显示出表达式;

    (3)使用任何隐含对象和使用声明过的对象;

    (4)当JSP收到客户端的请求时,Scriptlet就好被执行,如同Servlet的doGet()和doPost()。

    Expression元素是Java语言表达式,它的值用于计算以及作为字符串返回到页面。(JSP表达式用于向页面中输出信息)

    语法:<%=表达式 %>

    功能:JSP提供了一种简单方法访问可用的Java变量和Java表达式,并生成页面HTML字符串。Expression元素是以<%=为开始,%>为结尾的,其中内容包含一段合法Java的表达式。

    主要:

    (1)表达式会被自动转化为字符串然后显示出来;

    (2)<%与=之间不能有空格;

    (3)表达式不能以分号结尾

    Declaration元素用于声明在页面中初始化的变量、方法和类。

    语法:<%! 声明变量或方法的代码%>

    功能:在JSP程序中定义全局变量、方法和类。声明是以<%!为开始,%>为结尾的。不同于Scriptlet,通过声明标识定义的变量和方法可以被整个JSP页面访问。(服务器执行JSP页面时,会将JSP页面转为Servlet类,在该类中会把使用JSP声明标识定义的变量和方法转换为类的成员变量和方法)

    通过上述代码声明全局变量和全局方法后,在后面如果通过表达式语句调用全局方法,则每次刷新界面,都会输出前一次值+1的值。

    隐藏注释

    通过在文档中添加的HTML注释虽然在浏览器中不显示,但是可以通过查看源代码看到这些注释信息。所以严格来说,这种注释是不安全的。不过JSP还提供了一种隐藏注释,这种注释不仅在浏览器中看不到,而且在查看HTML源码时也看不到,所以这种注释的安全性比较高。

    其中与的区别在之后Blog会讲到。

    动作标识

    JSP动作不同于JSP指令,它利用XML语法格式的标记来控制Servlet引擎的行为。sat香港考试团JSP动作可以改变out流,以及创建和使用对象。遵循XML标准,JSP动作也可以有属性。有2个属性是所有JSP动作共有的:一是id属性;二是scope属性。

    id属性唯一地标识JSP动作,这就允许在JSP页面内引入动作。

    scope属性标识JSP动作的生命期。scope属性有4个可能的值:page、request、session、和application。

    id属性和scope属性直接相关,因为scope属性决定与id相关联的对象的生命期。

    JSP动作的语法如下:

     

    JSP动作可以分为两类:Resource动作和JavaBean动作。

    Resource动作
    (1): 可以用于将静态和动态页面插入当前页面。

    include动作的语法如下:

    这里的flush参数必须为true。

    静态包含:静态包含是指将被包含的文件插入JSP页面中,简单的说是将另一个文件中的代码复制到一个JSP页面中,被包含的文件代码将会在JSP中执行。先将页面包含,后执行页面代码,即将一个页面的代码复制到另一个页面中。

    动态包含: 先执行页面代码,后将页面包含,即将一个页面的运行结果包含到另一个页面中。当包含静态页面时效果等同于静态包含。

    注意:include动作和include指令有很大的不同。include动作在执行时才对包含的文件进行处理,如果对包含的文件进行了修改,那么运行时可以看到所包含文件修改后的结果。而include指令包含的文件如果发生了变化,雅思入门必须重新将JSP文件编译为Servlet文件才能看到所包含文件修改后的结果。

    (2):终止当前页面的动作并将请求转发到另一个资源。

    (3):根据浏览器的类型,插入通过Java插件运行Java Applet所必须的OBJECT和EMBED元素。

    JavaBean动作
    JavaBean动作都涉及在JSP页面内使用服务器端JavaBean,包括:

    : 用于寻找或者实例化一个新的javaBean供以后在JSP页面中使用。

    :设置JavaBean的属性。

    :获取JavaBean的属性。

    这里写图片描述

    (四)JSP对象常见的四个作用域

    page作用域:只在当前页面有效,一旦离开当前页面,则在该范围内创建的对象将无法访问。

    request作用域:在同一个请求范围内,可以访问该范围内创建的对象,一旦请求失败,则创建的对象也随之失效。

    session作用域:在会话没有失效或者销毁前,都可以访问该范围内的对象。

    application作用域:在整个Web应用服务器没有停止前,都可以从application中进行数据存取。

    范围由小到大: page(jsp有效) request(一次请求) session(一次会话) application(当前web应用)

    page : PageContext对象

    request : HttpServletRequest对象

    session : HttpSession对象

    application : ServletContext对象

    什么是域?为什么把这4个对象叫做域对象呢?

    域: 即范围的意思

    web中的域对象,可以存储对象,在作用范围内都可以取到

    内部是Map集合的实现 Map < String, Object>

    哪种情况下用哪种域对象

    原则: 四个域对象在选择的时候,能用范围小的绝不用范围大的

    page: 数据只是暂时存在集合,在jsp页面的其他地方要用,用page(页面中自定义的map)

    什么时候需要用map了,就用page

    request:数据只是做显示的,看完了就没用了,就存request域

    请求转发, Servlet 产生的处理结果(数据) 交给jsp显示,

    session: 数据给用户看完了,一会还要用,会话结束了就没用了

    用户登陆,用户信息发给客户端看,看完了,外贸英语培训一会访问别的页面还要看用户信息

    购物车,购物成功了,给用户看购物车,待会随时可以查看购物车

    请求重定向,因为是两次请求,第一次请求的数据,第二次请求还要看

    application : 数据给一个用户用完了,别人还要用

    聊天室,聊天记录,需要给所有的用户看

    统计网站在线人数,所有人看到的应该是一个数

    总结: 需要定义Map不如用page,请求转发Servlet带给jsp的数据存request

    请求重定向带过去的数据存Session,全局的数据存application

    在整个Web应用的多个JSP、Servlet之间共享数据

    看下面的页面, 该页面仅仅声明了一个整型变量, 每次刷新该页面时,该变量值加1,然后将该变量的值放入application 内。下面是页面的代码。

    虽然使用application (即ServletContext 实例〉可以方便多个JSP 、Servlet 共享数据,但不要仅为了JSP、Servlet 共享数据就将数据放入application 中!由于application 代表整个Web 应用,所以通常只应该把Web应用的状态数据放入application 里。

    使用application访问web应用的配置参数

    application 还有一个重要用处:可用于获得Web 应用的配置参数。看如下JSP 页面,该页面访问数据库,但访问数据库所使用的驱动、URL、用户名及密码都在web.xml 中给出。

    上面的程序中粗体字代码使用application 的getlnitParameter(String paramName)来获取Web 应用的配置参数,这些配置参数应该在web.xml 文件中使用context-param 元素配置,每个<context-param… />元素配置一个参数,英语国际音标该元素下有如下两个子元素。

    • param-name ,配置Web 参数名
    • param-value:配置Web 参数值

    web.xml 文件,中使用<context-param.. ./>元素配置的参数对整个Web 应用有效,所以也被称为Web应用的配置参数。与整个Web 应用有关的数据,应该通过application 对象来操作。为了给Web 应用配置参数,应在web.xml 文件中增加如下片段。

    通过这种方式,可以将一些配置信息放在web.xml 文件中配置,避免使用硬编码方式写在代码中,从而灵好地提高程序的移植性. 

  • 相关阅读:
    Layabox记录坑
    爬虫 Beautifulsoup 常用笔记
    opencv +python 提取roi目标区域全部像素的值 得出上下限 均匀值
    opencv + python 读取像素点 BGRtoRGB 以及注意事项
    pyinstaller打包python+opencv 无法在别人电脑上正常运行 问题所在:opencv_ffmpeg341_64.dll
    python 绝对路径相对路径
    面向对象编程-OOP-一张图看懂类和实例的基本用法
    python3 _笨方法学Python_日记_DAY7
    儋州“炰米”:美味的特制粮食
    PHP学习步骤
  • 原文地址:https://www.cnblogs.com/zhangyanran/p/10037564.html
Copyright © 2011-2022 走看看