zoukankan      html  css  js  c++  java
  • jsp

    jsp学习

    Java Server Pages,是一种动态网页开发技术、

    jsp的功能

    ​ JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

    ​ JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息

    jsp处理

    • 就像其他普通的网页一样,您的浏览器发送一个 HTTP 请求给服务器。

    • Web 服务器识别出这是一个对 JSP 网页的请求,并且将该请求传递给 JSP 引擎。通过使用 URL或者 .jsp 文件来完成。

    • JSP 引擎从磁盘中载入 JSP 文件,然后将它们转化为 Servlet。这种转化只是简单地将所有模板文本改用 println() 语句,并且将所有的 JSP 元素转化成 Java 代码。

    • JSP 引擎将 Servlet 编译成可执行类,并且将原始请求传递给 Servlet 引擎。

    • Web 服务器的某组件将会调用 Servlet 引擎,然后载入并执行 Servlet 类。在执行过程中,Servlet 产生 HTML 格式的输出并将其内嵌于 HTTP response 中上交给 Web 服务器。

    • Web 服务器以静态 HTML 网页的形式将 HTTP response 返回到您的浏览器中。

    • 最终,Web 浏览器处理 HTTP response 中动态产生的HTML网页,就好像在处理静态网页一样

      jsp生命周期

      • 编译阶段:

        servlet容器编译servlet源文件,生成servlet类

      • 初始化阶段:

        加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法

      • 执行阶段:

        调用与JSP对应的servlet实例的服务方法

      • 销毁阶段:

        调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

        jsp编译

        • 解析JSP文件。

        • 将JSP文件转为servlet。

        • 编译servlet。

          jsp初始化

          public void jspInit(){
            // 初始化代码
          }
          

          jsp执行

          当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。

          jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数

          void _jspService(HttpServletRequest request,
                           HttpServletResponse response)
          {
             // 服务端处理代码
          }
          

          jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等

          jsp清理

          JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切

          jspDestroy()方法在JSP中等价于servlet中的销毁方法

          public void jspDestroy()
          {
             // 清理代码
          }
          
        • jsp语法

        • <% 代码片段 %>
          

          任何文本、HTML标签、JSP元素必须写在脚本程序的外面

          中文编码问题

          如果我们要在页面正常显示中文,我们需要在 JSP 文件头部添加以下代码:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding="UTF-8"%>
          

          jsp声明

          一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们

          <%! declaration; [ declaration; ]+ ... %>
          

          jsp表达式

          一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

          由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。

          表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

          JSP表达式的语法格式:

          <%= 表达式 %>
          

          jsp注释

          jsp注释的两个作用为代码作注释以及将某段代码注释掉

          JSP注释的语法格式:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding="UTF-8"%>
          <!DOCTYPE html>
          <html>
          <head>
          <meta charset="utf-8">
          <title>菜鸟教程(runoob.com)</title>
          </head>
          <body>
          <%-- 该部分注释在网页中不会被显示--%> 
          <p>
             今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
          </p>
          </body> 
          </html> 
          
        • <%-- 注释 --%> JSP注释,注释内容不会被发送至浏览器甚至不会被编译
          HTML注释,通过浏览器查看网页源代码时可以看见注释内容
          <% 代表静态 <%常量
          %> 代表静态 %> 常量
          ' 在属性中使用的单引号
          " 在属性中使用的双引号

          jsp指令

          JSP指令用来设置与整个JSP页面相关的属性。

          JSP指令语法格式:

          <%@ page ... %>	定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
          <%@ include ... %>	包含其他文件
          <%@ taglib ... %>	引入标签库的定义,可以是自定义标签<%@ directive attribute="value" %>
          

          jsp行为

          JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。

          行为标签只有一种语法格式,它严格遵守XML标准:

          <jsp:action_name attribute="value" />
          

    jsp指令

    JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。

    语法格式如下:

    <%@ directive attribute="value" %>
    

    page指令

    Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令

    Page指令的语法格式:

    <%@ page attribute="value" %>
    

    include指令

    JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

    Include指令的语法格式如下:

    <%@ include file="文件相对 url 地址" %>
    

    taglib

    JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

    Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

    Taglib指令的语法:

    <%@ taglib uri="uri" prefix="prefixOfTag" %>
    

    uri属性确定标签库的位置,prefix属性指定标签库的前缀

    jsp动作元素

    SP动作元素在请求处理阶段起作用

    利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。

    动作元素只有一种语法,它符合XML标准:

    <jsp:action_name attribute="value" />
    

    常用动作属性

    所有的动作要素都有两个属性:id属性和scope属性。

    • id属性:

      id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用。

    • scope属性:

      该属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命。 scope属性有四个可能的值: (a) page, (b)request, (c)session, 和 (d) application。

    jsp隐式对象

    JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量

    request对象

    request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。

    request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。


    response对象

    response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。

    response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。

    out对象

    out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。

    最初的JspWriter类对象根据页面是否有缓存来进行不同的实例化操作。可以在page指令中使用buffered='false'属性来轻松关闭缓存。

    JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter新增了一些专为处理缓存而设计的方法。还有就是,JspWriter类会抛出IOExceptions异常,而PrintWriter不会。

    方法 描述
    out.print(dataType dt) 输出Type类型的值
    out.println(dataType dt) 输出Type类型的值然后换行
    out.flush() 刷新输出流

    session对象

    session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。

    session对象用来跟踪在各个客户端请求间的会话。


    application对象

    application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。

    这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。

    通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。


    config对象

    config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。

    这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。

    以下是config对象的使用方法,不是很重要,所以不常用:

    config.getServletName();
    

    它返回包含在元素中的servlet名字,注意,元素在 WEB-INFweb.xml 文件中定义。


    pageContext 对象

    pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。

    这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。

    这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。

    pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。

    PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。

    其中一个重要的方法就是 removeAttribute(),它可接受一个或两个参数。比如,pageContext.removeAttribute("attrName") 移除四个scope中相关属性,但是下面这种方法只移除特定 scope 中的相关属性:

    pageContext.removeAttribute("attrName", PAGE_SCOPE);
    

    page 对象

    这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。

    page 对象就是this对象的同义词。


    exception 对象

    exception 对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。

    jsp客户端请求

    HttpServletRequest类

    request对象是javax.servlet.http.HttpServletRequest类的实例。每当客户端请求一个页面时,JSP引擎就会产生一个新的对象来代表这个请求。

    request对象提供了一系列方法来获取HTTP信息头,包括表单数据,cookies,HTTP方法等等

    jsp服务器响应

    Response响应对象主要将JSP容器处理后的结果传回到客户端。可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie、HTTP文件头信息等。

    HttpServletResponse类

    response 对象是 javax.servlet.http.HttpServletResponse 类的一个实例。就像服务器会创建request对象一样,它也会创建一个客户端响应。

    response对象定义了处理创建HTTP信息头的接口。通过使用这个对象,开发者们可以添加新的cookie或时间戳,还有HTTP状态码等等。

    JSP HTTP 状态码

    HTTP请求与HTTP响应的格式相近,都有着如下结构:

    • 以状态行+CRLF(回车换行)开始
    • 零行或多行头模块+CRLF
    • 一个空行,比如CRLF
    • 可选的消息体比如文件,查询数据,查询输出

    设置HTTP状态码的方法

    下表列出了HttpServletResponse 类中用来设置状态码的方法:

    S.N. 方法 & 描述
    1 public void setStatus ( int statusCode )此方法可以设置任意的状态码。如果您的响应包含一个特殊的状态码和一个文档,请确保在用PrintWriter返回任何内容前调用setStatus方法
    2 public void sendRedirect(String url)此方法产生302响应,同时产生一个 Location 头告诉URL 一个新的文档
    3 public void sendError(int code, String message)此方法将一个状态码(通常为 404)和一个短消息,自动插入HTML文档中并发回给客户端

    JSP 表单处理

    我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理。浏览器中使用 GET 和 POST 方法向服务器提交数据。


    GET 方法

    GET方法将请求的编码信息添加在网址后面,网址与编码信息通过"?"号分隔。如下所示:

    http://www.runoob.com/hello?key1=value1&key2=value2
    

    GET方法是浏览器默认传递参数的方法,一些敏感信息,如密码等建议不使用GET方法。

    用get时,传输数据的大小有限制 (注意不是参数的个数有限制),最大为1024字节。


    POST 方法

    一些敏感信息,如密码等我们可以通过POST方法传递,POST提交数据是隐式的。

    POST提交数据是不可见的,GET是通过在url里面传递的(可以看一下你浏览器的地址栏)。

    JSP使用getParameter()来获得传递的参数,getInputStream()方法用来处理客户端的二进制数据流的请求。

    JSP 读取表单数据

    • getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。
    • getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkbox类型
    • getParameterNames():该方法可以取得所有变量的名称,该方法返回一个 Enumeration。
    • getInputStream():调用此方法来读取来自客户端的二进制数据流。
  • 相关阅读:
    产品经理的职责有哪些?到底该做什么?(转) 写的非常好,非常专业
    互联网界产品经理和项目经理(转) 总结的非常好
    各式结构化数据 动态 接入-存储-查询 的处理办法 (第二部分)
    各式结构化数据 动态 接入-存储-查询 的处理办法 (第一部分)
    不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller
    大数据架构-使用HBase和Solr将存储与索引放在不同的机器上
    小程序项目别的页面初始化拿到的值为两种状态(已解决)
    vue项目引入第三方js插件,单个js文件引入成功,使用该插件方法时报错(问题已解决)
    qs.stringify和JSON.stringify的使用和区别
    百度地图API-javascript-web地图的应用
  • 原文地址:https://www.cnblogs.com/wenqihe/p/12733185.html
Copyright © 2011-2022 走看看