Fork me on github

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-INF\web.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():调用此方法来读取来自客户端的二进制数据流。
posted on 2020-04-19 20:02  markyle  阅读(143)  评论(0编辑  收藏  举报