JSP

文章目录

  • JSP & EL & JSTL
    • JSP基础知识
      • 页面结构
      • JSP声明变量、方法
      • JSP表达式
      • Java代码片段
      • JSP注释
      • JSP生命周期
    • 三大JSP指令
      • 指令写法
      • page指令
      • include指令
      • taglib
    • 七大JSP 动作标签
      • jsp:include
      • jsp:forward
      • jsp:param
      • jsp:useBean&jsp:setProperty&jsp:getProperty
    • JSP九大内置对象
      • pageContext 【javax.servlet.jsp.PageContext】
      • request 【javax.servlet.http.HttpServletRequest】
      • session 【javax.servlet.http.HttpSession】
      • application 【javax.servlet.ServletContext】
      • out 【javax.servlet.jsp.JspWriter】
      • response 【javax.servlet.http.HttpServletResponse】
      • exception 【java.lang.Throwable】
      • page 【java.lang.Object】
      • config 【javax.servlet.ServletConfig】
    • 四个作用域
      • 使用作用域来存储数据
      • 取出四个作用域中的值
      • 四个作用域的区别
    • 总结:

JSP & EL & JSTL

JSP基础知识

JSP全称Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。

  • 什么是jsp

从用户角度看待 ,就是是一个网页 , 从程序员角度看待 , 其实是一个java类, 它继承了servlet,所以可以直接说jsp 就是一个Servlet.

  • 为什么会有jsp?

html 多数情况下用来显示静态内容 , 一成不变的。 但是有时候我们需要在网页上显示一些动态数据, 比如: 查询所有的学生信息, 根据姓名去查询具体某个学生。 这些动作都需要去查询数据库,然后在网页上显示。 html是不支持写java代码 , jsp里面可以写java代码。

  • 动态网页

所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。

不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。

页面结构

JSP声明变量、方法

<%! 

  private int age = 0;
	
	public void sayHello() {
     out.println("Hello World!");
  }
  
%>

JSP表达式

<%=age %>

Java代码片段

<%

age = age + 10;
sayHello();

%>

JSP注释

语法 描述
<%-- 注释 --%> JSP注释,注释内容不会被发送至浏览器甚至不会被编译
HTML注释,通过浏览器查看网页源代码时可以看见注释内容
<% 代表静态 <%常量
%\> 代表静态 %> 常量
\’ 在属性中使用的单引号
\" 在属性中使用的双引号

JSP生命周期

  • 编译阶段

    当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

    • 解析JSP文件
    • 将JSP文件转为Servlet
    • 编译Servlet文件
  • 初始化阶段

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

    // 可以重写此方法,添加初始化逻辑
    public void _jspInit() {
           
    }
    
  • 执行阶段

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

    public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {
           
      // 分发请求
      // doGet
      // doPost
    }
    
  • 销毁阶段

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

    // 可以重写此方法,添加销毁操作
    public void _jspDestroy() {
           
    }
    

三大JSP指令

指令写法

<%@ 指令名字 属性名=“属性值” %>

page指令

  • language

表明jsp页面中可以写java代码

  • contentType

其实即使说这个文件是什么类型,告诉浏览器我是什么内容类型,以及使用什么编码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  • pageEncoding jsp内容编码
  • extends 用于指定jsp翻译成java文件后,继承的父类是谁,一般不用改。
  • import 导包使用的,一般不用手写。
  • session

值可选的有true or false .

用于控制在这个jsp页面里面,能够直接使用session对象。

具体的区别是,请看翻译后的java文件 如果该值是true , 那么在代码里面会有getSession()的调用,如果是false : 那么就不会有该方法调用,也就是没有session对象了。在页面上自然也就不能使用session了。

  • errorPage

指的是错误的页面, 值需要给错误的页面路径

  • isErrorPage

上面的errorPage 用于指定错误的时候跑到哪一个页面去。 那么这个isErroPage , 就是声明某一个页面到底是不是错误的页面。

include指令

包含另外一个jsp的内容进来。

	<%@ include file="other02.jsp"%>
  • 背后细节:

把另外一个页面的所有内容拿过来一起输出。 所有的标签元素都包含进来。

taglib

作用:用于引入标签库

语法:<%@ taglib prefix="" uri=""%>

uri: 标签库路径
prefix : 标签库的别名  

七大JSP 动作标签

七大动作标签

jsp:include



包含指定的页面, 这里是动态包含。 也就是不把包含的页面所有元素标签全部拿过来输出,而是把它的运行结果拿过来。

jsp:forward







<% request.setCharsetEncoding("UTF-8"); %>

	






前往哪一个页面。

jsp:param

意思是: 在包含某个页面的时候,或者在跳转某个页面的时候,加入这个参数。


  


在other02.jsp中获取参数


收到的参数是:
<%= request.getParameter("address")%>

jsp:useBean&jsp:setProperty&jsp:getProperty

这组动作标签用于实例化JavaBean,并且设置、获取属性





JSP九大内置对象

所谓内置对象,就是我们可以直接在jsp页面中使用这些对象。 不用创建。

pageContext 【javax.servlet.jsp.PageContext】

作用:为JSP页面包装页面的上下文。

方法名 说明
forward 重定向到另一页面或Servlet组件
getAttribute 获取某范围中指定名字的属性值
findAttribute 按范围搜索指定名字的属性
removeAttribute 删除某范围中指定名字的属性
setAttribute 设定某范围中指定名字的属性值
getException 返回当前异常对象
getRequest 返回当前请求对象
getResponse 返回当前响应对象
getServletConfig 返回当前页面的ServletConfig对象
getServletContext 返回所有页面共享的ServletContext对象
getSession 返回当前页面的会话对象

request 【javax.servlet.http.HttpServletRequest】

作用:向服务端请求数据

方法名 说明
isUserInRole 判断认证后的用户是否属于某一成员组
getAttribute 获取指定属性的值,如该属性值不存在返回Null
getAttributeNames 获取所有属性名的集合
getCookies 获取所有Cookie对象
getCharacterEncoding 获取请求的字符编码方式
getContentLength 返回请求正文的长度,如不确定返回-1
getHeader 获取指定名字报头值
getHeaders 获取指定名字报头的所有值,一个枚举
getHeaderNames 获取所有报头的名字,一个枚举
getInputStream 返回请求输入流,获取请求中的数据
getMethod 获取客户端向服务器端传送数据的方法
getParameter 获取指定名字参数值
getParameterNames 获取所有参数的名字,一个枚举
getParameterValues 获取指定名字参数的所有值
getProtocol 获取客户端向服务器端传送数据的协议名称
getQueryString 获取以get方法向服务器传送的查询字符串
getRequestURI 获取发出请求字符串的客户端地址
getRemoteAddr 获取客户端的IP地址
getRemoteHost 获取客户端的名字
getSession 获取和请求相关的会话
getServerName 获取服务器的名字
getServerPath 获取客户端请求文件的路径
getServerPort 获取服务器的端口号
removeAttribute 删除请求中的一个属性
setAttribute 设置指定名字参数值

session 【javax.servlet.http.HttpSession】

作用:用来保存每个用户的信息,以便跟踪每个用户的操作状态

方法名 说明
getAttribute 获取指定名字的属性
getAttributeNames 获取session中全部属性名字,一个枚举
getCreationTime 返回session的创建时间
getId 获取会话标识符
getLastAccessedTime 返回最后发送请求的时间
getMaxInactiveInterval 返回session对象的生存时间单位千分之一秒
invalidate 销毁session对象
isNew 每个请求是否会产生新的session对象
removeAttribute 删除指定名字的属性
setAttribute 设定指定名字的属性值

application 【javax.servlet.ServletContext】

作用:对应ServletContext对象, 在整个应用的生命周期内共享数据

方法名 说明
getAttribute 获取应用对象中指定名字的属性值
getAttributeNames 获取应用对象中所有属性的名字,一个枚举
getInitParameter 返回应用对象中指定名字的初始参数值
getServletInfo 返回Servlet编译器中当前版本信息
setAttribute 设置应用对象中指定名字的属性值

out 【javax.servlet.jsp.JspWriter】

作用:向客户端输出数据

方法名 说明
print或println 输出数据
newLine 输出换行字符
flush 输出缓冲区数据
close 关闭输出流
clear 清除缓冲区中数据,但不输出到客户端
clearBuffer 清除缓冲区中数据,输出到客户端
getBufferSize 获得缓冲区大小
getRemaining 获得缓冲区中没有被占用的空间
isAutoFlush 是否为自动输出

response 【javax.servlet.http.HttpServletResponse】

作用:封装了jsp产生的响应,然后被发送到客户端以响应客户的请求

方法名 说明
addCookie 添加一个Cookie对象
addHeader 添加Http文件指定名字头信息
containsHeader 判断指定名字Http文件头信息是否存在
encodeURL 使用sessionid封装URL
flushBuffer 强制把当前缓冲区内容发送到客户端
getBufferSize 返回缓冲区大小
getOutputStream 返回到客户端的输出流对象
sendError 向客户端发送错误信息
sendRedirect 把响应发送到另一个位置进行处理
setContentType 设置响应的MIME类型
setHeader 设置指定名字的Http文件头信息

exception 【java.lang.Throwable】

被调用的错误页面的结果,只有在错误页面中才可使用,

即在页面指令中设置:<%@page isErrorPage=“true”%>

page 【java.lang.Object】

它代表JSP被编译成Servlet,可以使用它来调用Servlet类中所定义的方法

config 【javax.servlet.ServletConfig】

作用:表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet

方法名 说明
getServletContext 返回所执行的Servlet的环境对象
getServletName 返回所执行的Servlet的名字
getInitParameter 返回指定名字的初始参数值
getInitParameterNames 返回该JSP中所有的初始参数名,一个枚举

四个作用域

表示这些对象可以存值,他们的取值范围有限定。 setAttribute 和 getAttribute

使用作用域来存储数据

<%
pageContext.setAttribute("name", "page");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>

取出四个作用域中的值

<%=pageContext.getAttribute("name")%>
<%=request.getAttribute("name")%>
<%=session.getAttribute("name")%>
<%=application.getAttribute("name")%>

作用域范围大小:

pageContext – request — session – application

四个作用域的区别

  • pageContext 【PageContext】

作用域仅限于当前的页面。

除了可以存储数据, 还可以获取其他8个内置对象

  • request 【HttpServletRequest】

作用域仅限于一次请求, 只要服务器对该请求做出了响应。 这个域中存的值就没有了。

  • session 【HttpSession】

作用域限于一次会话(多次请求与响应) 当中。

  • application 【ServletContext】

整个工程都可以访问, 服务器关闭后就不能访问了。

总结:

  • JSP

    三大指令

      page
      include
      taglib
    

    六个动作标签
    jsp:include
    jsp:forward
    jsp:param
    ​ jsp:useBean
    ​ jsp:setProperty
    ​ jsp:getProperty

    九个内置对象

      四个作用域
      	pageContext
      	request
      	session
      	application
    
      	out
      	exception
      	response
      	page
      	config
    

你可能感兴趣的:(Web)