javaWeb笔记--JSP

  

                                      JSP:Java Server Pages

1.在传统的网页HTML文件中,加入java程序片段(Scriptlet)和JSP标签,就构成了JSP网页。   所有程序操作都在服务器端执行,网络上传给客户端的仅仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访问JSP。

2.JSP执行流程

  

首先,用户对jsp发出request,然后利用服务器的JSP解析器jsp parser,会把JSP转化成一个.java文件,也就是Servlet。换句话说,JSP本源就是一个Servlet,JSP能实现的Servlet也能实现,Servlet能实现的,JSP 也能实现,他们其实是一回事,只不过写法不一样。

然后JDK 把.java文件编译成.class文件。然后执行,把response(静态的结果)返回给浏览器。   这些所有的东西都是在服务器完成的,客户端接收到的是静态的结果。

JSP最终都会转换成Servlet去执行。

3.JSP具体执行流程

javaWeb笔记--JSP_第1张图片

 

如果.class已经存在就不会再去编译。当修改了JSP 就会重新编译。

4.JSP源代码包含了JSP元素和Template(模版) Data两类

  Template Data是指JSP引擎(例如Tomcat)不处理的部分,也就是不处理的部分,写什么就显示什么。

  JSP元素也就是java小脚本,标记为<%  %>。

****************************************************************************************

JSP 语法分为三种不同的类型:
    (1)编译器指令 例如<%@ page import="java.io.*"%>
    (2)脚本语法:java小脚本,不是指JavaScript
  (3)动作语法:例如<jsp:forward> <jsp:getProperty> <jsp:include>

脚本语法:
     HTML注释:<!-- -->
         HTML的注释会执行注释的内容,发送到客户端
        <!-- new java.util.Date() -->          注释的内容就是 new java.util.Date()
        <!-- <%= new java.util.Date() %> -->   注释的内容是  当前的系统时间
    隐藏注释(JSP注释)<%-- --%>
          JSP注释不会发送到客户端
    声明 <%!声明;%>
          <%! int a=3; %> (声明)(用的比较少,因为web是要多用户使用的)
          <% int b = 3 %>  (脚本段)
          <%= a-- %>
          <%= b-- %>
         每次刷新a的值都会减一,但是b不会,b一直是3.
         声明的变量,在jsp转换成servlet的代码中,是成员变量,而脚本段中的是 局部变   量,servlet又是单实例的,这样成员变量的值只有一个,互不影响。而局部变量每个用户访问时各有一份。访问一次,调用service方法,a的值减一,b的值也减一,当方法结束的时候,局部变量消失。 所以下一次刷新的时候a的值一直减小,b的值每次都是重新定义的3.
  
     表达式  <%=表达式 %>
     脚本段  <% 代码 %>

编译器指令:(常用page和include)
     包含指令<%@ include file=" "%>
           Page指令,用于定义JSP文件中的全局属性,作用于整个JSP页面,同样包括静态的包含文件。 无论把page指令放在页面的哪个位置作用范围都是整个页面。
     属性:language="java"
            import="{package.class} "
     java.lang.*   javax.servlet.*  javax.servlet.jsp.* javax.servlet.http.*这几个包在JSP 编 译时已经指定,不需要再导入。
 taglib指令 <%@ taglib %>(标签库)
动作语法:
       <jsp:forward>用于转向页面,在该指令后面的所有代码都没有机会执行了,因为页面的流程已经转向了另外一个页面了。
      <jsp:forward page = "forwardTo.jsp ">
      <jsp:param name="username" value="risl" />
      </jsp:forward> 
  
      <jsp:include>  包含一个静态或动态文件,可以向被包含的页面里传参数。
 *******************************************************************************************
 JSP的内置对象:
    内置对象就是服务器帮我们创建好的实例对象,可以直接使用,不用初始化之类的。
    request 请求对象              javax.servlet.ServletRequest的子类
    response 响应对象 
    pageContext 页面上下文对象
    session 会话对象              javax.servlet.http.HttpSession的子类。
    application 应用程序对象  javax.servlet.ServletContext的子类
    out 输出对象
    config 配置对象
    page 页面对象
    exception 异常对象

    out.println()的换行是指源代码的换行,<br>是指页面上的换行。

    request对象代表的是来自客户端的请求,例如哦我们在FORM表单中填写的信息。最常用的是getParameter(),getParameterNames()返回一个枚举(Enumeration),getParameterValues()返回一个String[]
    getParameter 方法是getParameterValues方法的特例,表示请求参数只有一个,如果请求参数有多个,请使用getParameterValues方法。在多选框的情况下,需要使用getParameterValues方法来获取用户所选择的多个复选框的值。
    resopnse对象代表的是对客户端的响应,也就是说可以通过response对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用out 对象即可。 

    pageContext对象直译时可以称作"页面上下文"对象,代表的是当前页面运行的一些属性,常用的方法包括findAttribute,getAttribute等方法。一般Servlet容器会使用该对象,用到的也不是很多。

    session 对象代表服务器与客户端所建立的对话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在购物,客户轨迹跟踪等。  HTTP是无状态的协议,Web Server对每一个客户端都没有历史记忆,session是用来保存客户端的状态信息。session可以突破HTTP的无状态协议。常用的方法有setAttribute和getAttribute。
   
    application对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMineType和getRealPath等。

    out对象代表了向客户端发送数据的对象,与response不同的是,通过out对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过out对象直接向可短短写一个由程序动态生成HTML文件。常用的方法除了print和println之外,还包括clear,clearBuffer,flush,getBufferSize等,这是因为out对象内部包含了一个缓冲区。

    config对象提供了一些配置信息,常用的方法有getInitParameter和getInitParameterNames以获得Servlet初始化时的参数。

    page对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。

    exception 对象则代表了JSP文件运行时所产生的异常对象,比对象不能在一般JSP文件中直接使用,而只能在使用了<%@ page isErrorPage="true" %>的JSP文件中使用。

***********************************************************************************
三种最重要的内置对象:
 request请求对象:
  1.getAttribute  与 getParameter的区别
 getAttribute原型:public java.lang.Object getAttribute(java.lang.String name)以对象的形式返回特定名称的属性值。这个方法允许Servlet引擎给出一个客户请求的特定信息。
 getAttribute总是获取服务器端设置的内容,跟客户端没有关系。与setAttribute一般是成对出现的。首先setAttribute设置属性与属性值,然后通过getAttribute方法获取属性值(获取到之后一般都要进行向下类型转换,将这个属性值转换为他真正的对象),这两个方法都是在服务器端内部执行的。
 getParameter获取客户端的请求参数,是客户端与服务器端之间的交互。服务器端想要获取客户端发送过来的数据就要使用getParameter方法来获取。并没有setParameter方法。


  3.request对象内数据的存活范围就是在request对象的存活范围内,当客户端向福务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了;之后再向服务器端发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此也无法获得在之前request对象中存放的任何数据。
  4.session对象内数据的存活范围也就是session对象的存活范围(现在可以简单理解成,只要浏览器不关闭,session就会一直存在,其实这是不正确的)因此在同一个浏览器窗口中,无论向服务器端发送多少个请求,session对象只有一个。
  5.application(应用对象):存活范围最大的对象,只要服务器没有关闭,application对象中的数据就会一直存在。在整个服务器运行过程当中,application对象只有一个。
  6.request,session以及application这三个对象的范围是逐个增加的:request只有一个请求的范围内:request只在一个请求的范围内,session是在浏览器窗口内(不是很准确),application则是在整个服务器的运行过程中。

  getRealPath()方法会返回资源在服务器上的绝对路径
  application.getRealPath();
 

 

 

 

 

 

  

你可能感兴趣的:(jsp,servlet,session,浏览器,服务器,application)