JSP基础

1.什么是JSP?

  JSP的全名是 java server page 即Java服务器端的页面,是一种能够动态生成网页数据的技术。它特点是html和java程序并存,在jsp页面第一次被访问时,服务器会将jsp文件转译成Servlet。

2.JSP的实现原理

  jsp本质上还是Servlet。在第一被访问时,会被服务器转译成Servlet。以Tomcat为例,在Tomcat的配置文件web.xml中有以下这么一段代码

<servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
<servlet-mapping>
      <servlet-name>jsp</servlet-name>
     <url-pattern>*.jsp</url-pattern>
     <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

当访问以".jsp"或".jspx"为后缀的页面时,Tomcat就会去调用一个Servlet (org.apache.jasper.servlet.JspServlet),这个Servlet被称为JSP引擎,用来将jsp中的内容转译成Servlet。转译后的Servlet类文件被存放在work文件夹中。

3.为什么要使用JSP

  Servlet在需要动态改变页面内容时较为麻烦,需要将html代码通过ServletResponse对象字符串拼接的方式输出给浏览器,代码编写困难。而JSP可以将html和java代码整合起来,服务器会帮我们转成Servlet,代码编写简单。但相对的JSP在java逻辑处理方面比较麻烦,而Servlet正好可以弥补这一缺点,所一般采用 jsp+servlet+javabean。

4.jsp页面组成(A)

jsp 页面包括以下内容:

1.静态内容(html代码)
2.注释
  <!-- html注释 -->数据不显示在页面中,jsp引擎还是会编译
  <%-- jsp注释 --%> jsp引擎还是会编译
3.脚本(java代码,位于方法中)
  <% java代码 %>
  转译后代码位于_jspService()方法中(不能定义方法、变量为局部变量)

4.声明(也是java代码,位于类中)
  <%! java代码 %>
  转译后代码位于serlvet的类中(可以定义方法。变量为全局变量)

5.表达式(在页面中输出)
  <%= 变量或方法 %>
  输出变量的值或调用方法并输出返回值

6.指令

<%@ 指令名 属性=值 %>
page指令
  pageEncoding 设置页面编码类型
  contentType 设置内容的类型及编码
  import 导入某个包/类
  session 表示是否在访问页面时,创建session对象,默认值为true
  isELIgnored 表示是否忽略EL的解析
  isErrorPage 表示该页面是处理异常的页面。
include指令
  file 引入一个jsp页面在当前页面中,相当于将两个jsp页面整合成一个Servlet,两个页面中不允许出现重复的变量名


taglib指令 导入标签库
  uri  标签库位置
  prefix 标签库前缀

5.动作语法

  jsp:forward 请求转发,使用该标签时注意标签里不能有任意字符,除非需要传参,可以使用<jsp:param>标签传参
  jsp:include 动态导入,导入一个服务器内部jsp页面

6.静态导入和动态导入

  静态导入:
  <%@ include file="logo.jsp" %>
    – 是在servlet引擎转译时,就把此文件内容包含了进去(两个文件的源代码整合到一起,全部放到_jspService方法中),所以只生成了一个servlet,所以两个页面不能有同名的变量。
    – 运行效率高一点点。耦合性较高,不够灵活。

  动态导入:
  <jsp:include page=“logo.jsp”></jsp:include>
    – 是在servlet引擎转译后,请求的此页面,所以共生成了两个servlet,所以可以有同名变量。
    – 生成两个servlet,相当于两个类之间的调用,耦合性较低,比较灵活。

7.九大内置对象

jsp九大内置对象:4+2+3
四大作用域:
  pageContext --> javax.servlet.jsp.PageContext
    代表当前页面,作用域:一个页面
  request --> HttpServletRequest
    来自客户端的请求,作用域:一次请求中所有Servlet
  session --> HttpSession
    代表一次会话,作用域:一次会话中所有Servlet
  application --> ServletContext
    代表当前web站点,作用域:当前项目中所有Servlet

两个输出
  out --> javax.servlet.jsp.JspWriter
    可以直接向客户端写一个由程序动态生成HTML文件
  response --> HttpServletResponse
    对客户端的响应

三个打酱油的
  page --> Object
    配置信息,很少使用
  config --> ServletConfig
    当前页面对象,基本不用
  exception --> Throwable
    异常对象,根本不用

原文地址:https://www.cnblogs.com/gaojinshun/p/10877468.html