JSP

作者: 米都都 | 来源:发表于2019-01-08 10:16 被阅读0次
  • Servlet和JSP是同一种编程效果所使用的不同的实现方式

JSP内部运行机制

  • 浏览器向服务器发送请求,调用JSP页面

  • 服务器将请求传递给Web容器,Web容器将JSP文件转化为Servlet的源文件,并对源文件进行编译,生成class文件

  • 转化和编译的过程发生在第一次调用JSP文件时,因此第一次加载JSP文件会比较慢


  • JSP转化和编译得到的.java文件和.class文件在Tomcat的work目录下

  • JSP转化后的Servlet要重写三个方法: jspInit、JSPDestroy和jspService,本质上和Servlet是一样的

JSP代码注释

一共有种方式

  • // 单行注释(只能出现在jsp文件的java代码区)

  • /* */ 多行注释(只能出现在jsp文件的java代码区)

  • <%-- --%> (转化时会忽略这部分代码)

  • (会发送到客户端)

指令标记

一共有6个(page, include, taglib, tag, attribute, variable),只影响当前JSP页面

(1) page: 提供当前JSP文件的有关信息

例如

<% @page language="java" contentType="text/html;charset=UTF-8" import="java.util.ArrayList">

(2) include: 设置当前JSP页面包含其他JSP或html页面,被包含页面中的Java代码和JSP元素会正确执行。包含的过程发生在JSP页面转化成Servlet的时候,包含的过程是静态的(被包含的内容是插入到JSP页面中include的位置的)

(3) taglib: 使用定制标记

声明标记

定义当前JSP页面中使用的变量和方法,定义的变量为JSP页面全局变量

语法

<%!
    ....
%>

其中....部分只能包含属性和方法的声明(java代码声明和实现是在一起的,所以这里声明==实现),不能直接嵌入Java代码片段和JSP内置对象

Scriptlet标记

包括任意多行的Java代码,标记中可以定义变量、方法和输出表达式的数值,以及使用JSP内置对象

语法

<%
    ....
%>

表达式标记

直接输出一个表达式的值,如果不是String类型,则调用toString方法

<%="...."%>

动作

本质是jsp内置的定制标记库,常用的有5个,分别是 include, useBean, getProperty, setProperty和forward

(1) <jsp:include>

  • 如果包含的是静态文件,则直接把内容包含到include动作所在的位置上

  • 如果包含的是动态文件,则把调用所包含JSP网页的输出内容插入到输出的内容中

  • <jsp:include>可以传递参数,通过 request.getParameter(String name)可以获得被包含文件传递的参数值

  • 示例

      <jsp:include page="/header.jsp">
          <jsp:param name="author" value="vv.com"/>
      </jsp:include>
    
  • include指令和<jsp:include>动作的区别:

    include指令发生在JSP转化为Servlet的阶段,只产生一个Servlet的.java文件和.class文件,把两个JSP内容的文件何在一起;

    <jsp:include>的本质是调用被包含文件的Servlet帝乡的jspService方法,因此会有多个Servlet的.java和.class文件

(2) <jsp:forward>

  • 作用是由当前JSP页面转到同一个Web应用的其他html页面或JSP页面,不能转到其他Web服务器页面(类似于 Servlet中的 RequestDispatcher.forward()方法)

  • 转发的时候可以传递参数,通过 request.getParameter(String name)可以获得参数

  • 示例

      <jsp:forward page="/register.jsp">
          <jsp:param name-"author" value="vv.com"/>
      </jsp:forward>
    

JSP内置对象

一共有9个内置对象

(1) out

  • 用于在浏览器上输出

  • 默认设置缓冲,当缓冲区没有满之前,数据不会真正被送出至客户端

(2) request

  • 相当于Servlet中的request

(3) response

  • 相当于Servlet中的response

  • 可以重定向 <% response.sendRedirect("www.baidu.com") %>

(4) session

  • 相当于Servlet中的HTTPSession

  • 当访问同一个Web应用的Servlet和JSP页面时,使用的是同一个session对象

(5) application

  • 相当于 javax.servlet.ServletContext

  • 可以跨用户的传递参数(而Session只能保存绑定单个用户)

    eg.

      <%
        application.setAttribute("website", "www.baidu.com");
        out.println(application.getAttribute("website"));
      %>
    
  • 可以设置context初始参数

    eg.

      <%
        out.println(application.getInitParameter("website"));
      %>
    
  • 使用log方法记录日志

    eg.

      <%
        application.log("I'm here")
      %>
    

(6) page

  • 代表当前所在的JSP页面,相当于this

(7) pageContext

  • 作用是获得其他内置对象,提供单一接口方便管理

    eg.

      getRequst()获得ServletRequest对象
      getServletConfig()获得ServletConfig对象
      ......
    

(8) exception

  • page指令(不是page内置对象)可以设定 errorPage属性指定专门处理异常的JSP页面

  • 专门处理异常的JSP页面需要设定 page指令中 isErrorPage 属性为true

  • 专门处理异常的JSP页面中需要使用 exception 对象

  • 示例

      <%@page contentType="text/html;charset="UTF-8" isErrorPage="true"%>
      <%@page import="java.io.PrintWriter%>
      <html>
          <head>
              <title>display error</title>
          </head>
          <body>
              网页发生异常信息:<%=exception%>
              <br>
              显示异常的堆栈信息:
              <br>
              <%
                exception.printStackTrace(new PrintWriter(out));
              %>
          </body>
      </html>
    

(9) config

  • 相当于 javax.servlet.ServletConfig

HTTP常见错误代码

(1) 401

  • 用户验证失败

(2) 403

(3) 404

  • 找不到请求的文件资源

(4) 405

  • 不允许访问该资源,例如Servlet只写了doPost没写doGet却用浏览器输入地址访问了

(5) 500

  • 服务器内部运行错误

相关文章

  • java基础-day43-JSP

    JSP 1. JSP 1.1 JSP概述 1.2 为什么要用JSP 1.3 JSP语法 1.3.1 JSP语法格式...

  • jsp学习 EL JSTL C标签

    JSP 第一个JSP程序 JSP对比servlet JSP中java脚本元素 JSP原理 JSP的翻译规则 JSP...

  • JSP基础学习笔记(3)--JavaBean

    JSP动作标签:

  • 用session对象实现用户登录

    index.jsp deal.jsp main.jsp exit.jsp

  • JavaWeb之JSP

    八、JSP 目录:什么是JSP、JSP原理、JSP基础语法、JSP指令、9大内置对象、JSP标签 JSTL标签 E...

  • jsp语法

    Jsp语法包含:注释、jsp指令、jsp脚本元素、jsp动作元素。 Jsp注释: Htm...

  • jsp

    jsp介绍 jsp语法 jsp指令 EL表达式 自定义标签 jsp指令 - page jsp指令 - includ...

  • JSP入门

    JSP的基本语法:1.JSP声明语法。2、JSP程序脚本。3、JSP脚本注释。4、JSP内容输出表达式。5、JSP...

  • jsp的内置标签

    jsp:forward 重定向标签

  • Java面试问题

    1、JSP: jsp和servlet的区别 jsp本质就是Servlet,jsp的工作原理是:JSP页面在执行的时...

网友评论

      本文标题:JSP

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