美文网首页
JavaEE基础篇:JSP

JavaEE基础篇:JSP

作者: younger_times | 来源:发表于2018-05-10 13:47 被阅读16次

    JSP笔记

    最终都会编译成Servlet

    组成部分

    1. 静态部分:标准的 HTML 标签、静态的页面内容,这些内容与静态 HTML 页面相同。
    2. 动态部分:受 Java 程序控制的内容,这些内容由 Java 脚本动态生成。
    image
    1. JSP 文件必须在 JSP 服务器内运行。
    2. JSP 文件必须生成 Servlet 才能执行。
    3. 每个 JSP 页面的第一一个访问者速度很慢,因为必须等待 JSP 编译成 Servlet。
    4. JSP 页面的访问者无须安装任何客户端,甚至不需要可以运行 Java 的运行环境,因为 JSP 页面输送到客户端的是标准 HTML 页面。

    JSP声明

    JSP 声明用于声明变量和方法。

    不能使用 abstract 修饰声明部分的方法,因为抽象方法将导致;JSP 对应 Servlet 变成抽象类,从而导致无法实例化。

    <%! 声明部分 %>

    <%!
    public int count;
    public String info(){
        return "hello";
    }    
    %>
    

    输出JSP表达式

    JSP 提供了一种输出表达式值的简单方法

    <%=表达式%>

    <%=count %>
    <%=info() %>
    

    JSP脚本

    JSP 脚本里可以包含任何可执行的的 Java 代码
    <% %>

    JSP 小脚本部分也可以声明变量,但在 JSP 脚本部分声明的变量是局部变量,但不能使用 private、public 等访问控制符修饰,也不可使用 static 修饰。JSP脚本里不能定义方法

    <%
    for (int i 0; i <'10; i++){
        //todo
    }
    %>
    <p><%=i%></p>
    
    <%}%>
    

    JSP的3个编译指令

    • page:该指令是针对当前页面的指令,
    • include:用于指定包含另一个页面。
    • taglib:用于定义和访问自定义标签。

    <%@ 编译指令名 属性名="属性值"....%>

    page指令

    JSP 内建了异常机制支持,所以 JSP 可以不处理异常,即使是 checked 异常。

    • language:声明当前 JSP 页面使用的脚本语言的种类,因为页面是 JSP 页面,该属性的值通常都是 java,该属性的默认值也是 java,所以通常无须设置。
    • extends:指定 JSP 页面编译所产生的 Java 类所继承的父类,或所实现的接口。import:用来导入包。下面几个包是默认自动导入的,不需要显式导入。默认导入的包有:java.lang. *、javax.servlet. *、javax.servlet.jsp. *、javax.servlet.http. *。
    • session:设定这个 JSP 页面是否需要 HTTP Session。
    • buffer:指定输出缓冲区的大小。输出缓冲区的 JSP 内部对象
    • out: 用于缓存 JSP 页面对客户浏览器的输出,默认值为 8 KB,可以设置为 none,也可以设置为其他的值,单位为 KB.
    • autoFlush:当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为 true 时为正常输出;如果设置为 false,则会在 buffer 溢出时产生一个异常。
    • info:设置该 JSP 程序的信息,也可以看做其说明,可以通过 Servlet.getServletInfo()方法获取该值。如果在 JSP 页面中,可直接调用 getServletInfo()方法获取该值,因为 JSP 页面的实质就是 Servlet.
    • errorPage:指定错误处理页面。如果本页面产生了异常或者错误,而该 JSP 页面没有对应的处理代码,则会自动调用该属性所指定的 JSP 页面。
    • isErrorPage:设置本 JSP 页面是否为错误处理程序。如果该页面本身已是错误处理页面,则通常无须指定 errorPage 属性。
    • contentType:用于设定生成网页的文件格式和编码字符集,即 MIME 类型和页面字符集类型, 默认的MIME类型是text/html;默认的字符集类型为IS0-8859-1。
      *pageEncoding:指定生成网页的编码字符集。

    include指令

    使用 include 指令,可以将一个外部文件嵌入到当前 JSP 文件中,同时解析这个页面中的 JSP语句。这是个静态的 include 语句,它会把目标页面的其他编译指令也包含进来。

    <%@include file="relativeURLSpec" %>
    

    JSP的7个动作指令

    • jsp: forward:执行页面转向,将请求的处理转发到下一个页面。
    <jsp:forward page="forward-result.jsp">
         <jsp: param name="age" value="29"/> 
    </jsp:forward>
    

    跳转结果页面可以使用内置对象获取age

    <%=request.getParameter("age")%>
    
    • jsp: param:用于传递参数,必须与其他支持参数的标签一起使用,如:jsp:include,jsp:forward,jsp:plugin。
    • jsp: include:用于动态引入一个 JSP 页面。

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

    • jsp: plugin:用于下载 JavaBean 或 Applet 到客户端执行。
    • jsp: useBean:创建一个 JavaBean 的实例。
    • jsp: setProperty:设置 JavaBean 实例的属性值。
    • jsp: getProperty:输出 JavaBean 实例的属性值。
      • page:该 JavaBean 实例仅在该页面有效。
      • request:该 JavaBean 实例在本次请求有效。
      • session:该 JavaBean 实例在本次 session 内有效。
      • application:该 JavaBean 实例在本应用内一直有效。
    <jsp: useBean id="name" class="classname" scope="page | request|session| application"/>
    

    name 属性确定需要输出的 JavaBean 的实例名;property 属性确定需要输出的属性名。

    静态导入和动态导入区别

    • 静态导入是将被导入页面的代码完全融入,两个页面融合成-个整体 Servlet;而动态导入则在:Servlet 中使用 include 方法来引入被导入页面的内容。
    • 静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的 body 内容。
    • 动态包含还可以增加额外的参数。

    JSP脚本中的9个内置对象

    • application: javax servlet.ServletContext 的实例,该实例代表 JSP 所属的 Web 应用本身,可用于 JSP 页面,或者在 Servlet之间交换信息。常用的方法有 gettribute (String attName)、setAttribute (String attName, String attValue)和 getlnitParameter (String paramName)等。
    • config: javax.Servlet.ServletConfig 的实例,该实例代表该 JSP 的配置信息。常用的方法有 getInitParameter (String paramName)和 getInitParametermames()等方法。事实上,JSP 页面通常无须配置,也就不存在配置信息。因此,该对象更多地在 Servlet 中有效。
    • exception: java.lang.throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令 page 的 isErrorPage 属性为 true 时,该对象才可以使用。常用的方法有 getMessage()和 printStackTrace()等。
    • out: javax.servlet.jsp.JspWriter 的实例,该实例代表 JSP 页面的输出流,用于输出内容,形成 HTML 页面。
    • `page:代表该页面本身,通常没有太大用处。也就是 Servlet 中的 this,其类型就是生成的 Servlet 类,能用 page 的地方就可用 this。
    • pageContext: javax.servlet.jsp.PageContext 的实例,该对象代表该 JSP 页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有 getServletContext()和 getServletConfig()等。
    • request: javax.serlet.http.HttpServletRequest 的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。常用的方法有 getParameter (String paramName)、getParameterValues (String paramName)、setAtribute (String attrName, Object attrValue)、getAttribute (String attrName)和 setCharacterEncoding (String env)等。
    • response: javax.serlet.http.HttpServletResponse 的实例,代表服务器对客户端的响应。通常很少使用该对象直接响应,而是使用 out 对象,除非需要生成非字符响应。而 response 对象常用于重定向,常用的方法有 getOutputStream()、sendRedirect (java. Lang. String location)等。
    • session: javax.servlet.http.HttpSession 的实例,该对象代表一次会话。当客户端浏览器与站点建立连接时,会话开始;当客户端关闭浏览器时,会话结束。常用的方法有:getAttribute (String attrName)、setAttribute (String attrName, Object attrValue)等。

    application对象

    1. 让多个JSP,Servlet共享数据

    application 通过 setAttribute(String attrName, Object value)方法将一个值设置成 application 的 attrName 属性,该属性的值对整个 Web 应用有效,因此该 Web 应用的每个 JSP 页面或 Servlet 都可以访问该属性,访问属性的方法为 getAttribute (String attrName)。

    • jsp
    <%application.setAttribute("counter",1);%>
    <%=application.getAttribute("counter");%>
    
    • servlet
    ServletContext sc = getServletConfig().getServletContext();
    

    由于在 Servlet 中并没有 application 内置对象,在 JSP 页面中可通过 application 内置对象访问该实例,而 Servlet 中则必须通过代码获取。

    2. 获取Web应用配置参数 web.xml

    <%
    String driver = application.getInitParameter ("driver");
    %>
    

    web.xml的配置

    <context-param>
        <param-name>driver</param-name>
        <param-value>iOS</param-value>
    </context-param>
    

    config对象

    config 对象代表当前JSP配置信息

    <%=config.getInitParameter("age")%>
    

    exception对象

    JSP 脚本包含的所有可能出现的异常都可交给错误处理页面处理。也只有错误页面运行如此

    异常类型是:<%=exception.getClass () %> <br/>
    异常信息是:<%=exception.getMessage () %> <br/>
    

    out对象

    out 对象代表一个页面输出流,通常用于在页面上输出变量值及常量。out 是个页面输出流,负责输出页面表格及所有内容,

    out.print("<br/>");
    

    pageContext对象

    这个对象代表页面上下文,该对象主要用于访问 JSP 之间的共享数据。使用 pageContext 可以访问page、request、session、application 范围的变量。

    • getAttribute (String name):取得 page 范围内的 name 属性。
    • getAttribute (String name, int scope):取得指定范围内的 name 属性,其中 scope 可以是如下 4 个值。
      • PageContext.PAGE_SCOPE:对应于 page 范围。
      • PageContext.REQUEST_ SCOPE:对应于 request 范围。
      • PageContext.SESSION_ SCOPE:对应于 session 范围。
      • PageContext.APPLICATION_ SCOPE:对应于 application 范围。
    pageContext.setAttribute ("request2", "hello",pageContext.REQUEST_ SCOPE);
    

    获取其他内置对象

    • ServletRequest getRequest():获取 request 对象
    • ServletResponse getResponse():获取 response 对象。
    • ServletConfig getServletConfig():获取 config 对象。
    • ServletContext getServletContext():获取 application 对象。
    • HttpSession getSession():获取 session 对象。

    request对象

    request 对象是 JSP 中重要的对象,每个 request 对象封装着一次用户请求,并且所有的请求参数都被封装在 request 对象中,因此 request 对象是获取请求参数的重要途径。

    1. 获取请求头/请求参数

    • String getParameter (String paramName):获取 paramName 请求参数的值。
    • Map getParameterMap():获取所有请求参数名和参数值所组成的 Map 对象。
    • Enumeration getParameterNames():获取所有请求参数名所组成的 Enumeration 对象。
    • String [] getParameterValues (String name):paramName 请求参数的值,当该请求参数有多个值时,该方法将返回多个值所组成的数组。
      访问请求头
    • String getHeader (String name):根据指定请求头的值。
    • java.util.Enumeration <String> getHeaderNames():获取所有请求头的名称。
    • java.util.Enumeration <String> getHeaders (String name):获取指定请求头的多个值。
    • int getIntHeader (String name):获取指定请求头的值,并将该值转为整数值。
    • setCharacterEncoding ("GBK"):设置 request;编码所用的字符集。

    2. 操作request返回的属性

    1. setAttribute (String attName, Object attValue):将 attValue 设置成 request 范围的属性。
    2. Object getAttribute(String attName):获取 request 范围的属性。

    3. 执行forward 或 include

    • forward(ServletRequest request, ServletResponse response):执行 forward。
    • include(ServletRequest request, ServletResponse response):执行 include。

    response对象

    response 代表服务器对客户端的响应。

    1. response 响应生成非字符响应

     <%@ page contentType="image/png" language="java"%>
    

    2. 重定向

    重定向是 response 的另外一个用处,与 forward 不同的是,重定向会丢失所有的请求参数和 request 范围的属性,因为重定向将生成第二次请求,与前一次请求不在同一个 request 范围内,所以发送一次请求的请求参数和 request 范围的属性全部丢失。

    <%response.sendRedirect ("redirect-result.jsp");%>
    

    3. 增加Cookie

    • void addCookie (Cookie cookie):增加 Cookie。
    • Cooke[] getCookies() 获取cookes列表
    • setMaxAge(int age)设置Cookies生成期限

    4. session对象

    session 对象也是一个非常常用的对象,这个对象代表一次用户会话,session 范围内的属性可以在多个页面的跳转之间共享。

    • setAttribute(String attName, Object attValue):设置 session 范围内 attName 属性的值为 attValue.
    • getAttribute(String attName):返回 session 范围内 attName 属性的值。

    相关文章

      网友评论

          本文标题:JavaEE基础篇:JSP

          本文链接:https://www.haomeiwen.com/subject/jmmzrftx.html