jsp总结

JSP 定义:
    1)Java Server Page, Java EE 组件,本质上是 Servlet。
    2)运行在 Web Container.接收 Http Request,生成 Http Response(默认协议是 Http 请求和响应) 
    3)JSP 使得我们能够分离页面的静态 HTML 和动态部分——我们需要的技术。
    4)使页面可以混和html代码、Java代码以及JSP标签;允许访问组件。

    5)开发者把编好的jsp页面部署在web容器中,web容器会将jsp编异成对应的servlet

Servlet的缺陷(JSP出现的原因):

    1)写静态页面必须部署后才能看到效果,很难控制页面的外观。
    2)从技术角度来说Servlet是Java代码和HTML静态代码的混合代码。
    3)从市场竞争角度来说,微软推出了ASP产品。

    4)servlet的开发效率低,特别是当使用servlet生成表现层负面时,页面的所有的html标签,都需要采用servlet的输出流来输出。

1.JSP指令(direction)

   指令用于从JSP发送信息到容器上。用来设置全局变量,声明类,要实现的方法和输出内容等。
   指令在JSP整个文件内有效。它为翻译阶段提供了全局信息。

      <%@......%>  // "@"符号
   指令包括:page、include、taglib

(1).page指令

      import:导入其他的包和类; 其中,JSP默认导入的包是java.lang.* 

      Session:指示当前的jsp是否参与会话 (默认为true; 参与会话) 
                   通过指令使当前页面与session不可会话:    <%@page session="false"%> 
                       session="true"时,可用内建对象session直接访问会话,例如:
                         <%  session.setAttribute("username","maxwell");
                                  String name = (String)session.getAttribute("username"); %>
                         <%=name%>

     errorPage:指定错误处理页面,如果本页面产生了异常或者错误,而jsp页面没有处理代码,则会调用该属性指定的jsp页面

     isErrorPage:Jsp页面中出现异常的处理方式
                      对于有可能出现异常的页面: 
                           <%@page errorPage="error.jsp"%> //异常时会跳转到处理异常的页面;这页面自己写
                      在有可能异常的地方打印原因:  throw new Exception("数据库连接出错");
                      对于处理异常的页面(error.jsp)里:
                           <%@page isErrorPage="true"%>,其中使用<%=exception.getMessage() %>把异常信息打印出来 

     language:java唯一值,表示脚本中使用的编程语言

     contentType:设置了内容的类型和静态页面的编码 (告诉浏览器以什么编码显示) 
     pageEncoding:页面本身的编码格式 (写页面时用的编码格式) 

(2).include指令

     把目标页面的内容包含到当前页面,产生页面叠加以后的输出效果 //相当于将两个页面合并;编译时就包含进来
        <%@include file="foot.jsp"%> //可插入任意位置

     可以包含静态的文本,也可以是动态的JSP页面

(3).taglib指令

     用于定义和访问自定义标签

JSP的七大动作指令

1.forword指令

  将页面响应转发到另外的页面,既可以转发到静态的HTML页面,也可以转发到动态的jsp,或者转发容器的servlet中

  形式:<jsp:forward page="another.jsp"/>
          等价于 Servlet中通过RequestDispatcher.forward();
     可以传参数
          <jsp:forward  page="another.jsp">
             <jsp:param name="name" value="maxwell"/>
             <jsp:param name="age" value="20" />
          </jsp:forward>

2.include指令

   指令是一个动态的include指令,也用于包含某个页面,它不会导入被include页面的编译指令,仅仅被导入页面的body内容插入本页面。

   形式:<jsp:include page="another.jsp"/>
          等价于 Servlet中通过RequestDispatcher.include();
      Include动作也可以传参数
          <jsp:include  page="b.jsp" flush="true">
             <jsp:param name="name" value="narci"/>
          </jsp:include> 
      与<%@include file=""%>比较:
         include动作在运行期处理(include指令编译期),jsp:include包含的是所包含URI的响应,而不是URI本身。
         这意味着:jsp:include 对所指出的 URI 进行解释,因而包含的是生成的响应。
         对于页面是静态内容,这没有太大的关系。但如果是动态内容,include动作可传参数。

3.useBean、setProperty、getProperty指令

    这三个指令与Javabean相关

    useBean指令用于在JSP页面中初始化一个Java实例;

    setBean指令用于为JavaBean实例额的属性设置;

    getBean指令用于输出JavaBean实例的属性

4.plugin指令

    plugin指令主要用于下载服务器的JavaBean或者Applet到客户端执行

5.param指令

    param指令用于设置参数值;常与一下三个指令结合

    include ,forward,plugin指令结合

九大内置对象四个作用域

九大内置对象都是Servlet API接口的实例,可以直接使用。

http://www.cnblogs.com/sunli0205/p/5896980.html

一  aplication对象   应用程序对象          类型 javax.servlet.ServletContext        作用域 Application

 1.什么是application: 
     服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所       有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
 2.application对象常用方法: 
     (1)public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。
     (2)public Object getAttribute(String key): 获取application对象中含有关键字的对象。 

二  request对象     请求对象             类型 javax.servlet.ServletRequest        作用域 Request  一次请求

    该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息, 即使用该对象可以获取用户提交信息。 客户端的请求参数都被封装到这个对象里面

   Request常用的方法:getParameter(String strTextName) 获取表单提交的信息.

   getProtocol() 获取客户使用的协议。

   String strProtocol=request.getProtocol();

   getServletPath() 获取客户提交信息的页面。String strServlet=request.getServletPath();

   getMethod() 获取客户提交信息的方式 String strMethod=request.getMethod();

   getHeader() 获取HTTP头文件中的accept,accept-encoding和Host的值,String strHeader=request.getHeader();

   getRermoteAddr() 获取客户的IP地址。String strIP=request.getRemoteAddr();

   getRemoteHost() 获取客户机的名称。String clientName=request.getRemoteHost();

   getServerName() 获取服务器名称。 String serverName=request.getServerName();

   getServerPort() 获取服务器的端口号。 int serverPort=request.getServerPort();

   getParameterNames() 获取客户端提交的所有参数的名字。

三  response          响应对象              类型 javax.servlet.SrvletResponse        作用域 Page

    通常很少使用该对象直接响应,而是直接使用out对象。response对象常用于重定向,常用的方法有getOutStream()、sendRedirect(java.lang.Stringlocation)等

    response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

    在某些情况下,当响应客户时,需要将客户重新引导至另一个页面,可以使用Response的sendRedirect(URL)方法实现客户的重定向。

    例如response.sendRedirect(index.jsp);

四 session           会话对象              类型 javax.servlet.http.HttpSession      作用域 Session

    1.什么是session:session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。 
      从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反       复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
    2.session对象的ID:当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户       端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏         览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。

五 pageContext       页面上下文对象        类型 javax.servlet.jsp.PageContext       作用域 Page

    javax.servlet.jsp.PageContext 的实例,对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,通过此对象可以拿到其他8大对象,使用该对象可以访问     页面中的共享数据。常用的方法有getServletContext()和getServletConfig()等。

    使用pageContext对象可以访问page、request、session、application范围的变量。

   //使用pageContext 设置属性,该属性默认在page 范围内 
    pageContext. setAttribute ("page" , "hello") ; 

六 out               输出对象              类型 javax.servlet.jsp.JspWriter         作用域 Page

    Javax.servlet.jsp.JspWriter 的实例  out 对象是一个输出流,用来向客户端输出数据。out对象用于各种数据的输出。

    out.print():输出各种类型数据。

    out.newLine():输出一个换行符。

    out.close():关闭流。

七 config            配置对象              类型 javax.servlet.ServletConfig         作用域 Page

    javax.servlet. ServletConfig 的实例,该实例代表该JSP 的配置信息。常用的方法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事       实上, JSP 页面通常无须配置,也就不存在配置信息。因此,该对象更多地在Servlet 中有效。

八 page              页面对象              类型 javax.lang.Object                   作用域 Page

    代表页面本身,很少使用page对象,Servlet中的this,其类型的作用是生成Servlet类,能用到page的地方可用this  

九 exception         例外对象              类型 javax.lang.Throwable                作用域 page

    该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的isErrorPage 属性为true 时,该对象才可以使用。常用的方法有getMessage()和             printStackTrace()等。

四个作用域:request域  session域  application域  page域

application:
全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。

变量一直在累加,除非你重启tomcat,否则它会一直变大。

session:
会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。

量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问这页,session里的变量就重新计算了。

request:
请求作用域,就是客户端的一次请求。变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。

page:
一个JSP页面。变量没法从index.jsp传递到test.jsp。只要页面跳转了,它们就不见了。

以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。