jsp模式

jsp模式

JSP基础知识

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

  • 什么是jsp

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

  • 为什么会有jsp?

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

  • 动态网页

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

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

jsp注释

语法 描述
<%-- 注释 --%> JSP注释,注释内容不会被发送至浏览器甚至不会被编译
< !-- 注释 --> HTML注释,通过浏览器查看网页源代码时可以看见注释内容

总结
jsp的注释不会显示在源码上,更加安全 , 所以在jsp页面中推荐使用jsp的注释。

JSP生命周期

jsp模式_第1张图片

  • 编译阶段
    当浏览器请求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
}
  • 销毁阶段
// 可以重写此方法,添加销毁操作
public void _jspDestroy() {
}

从一个JSP页面到用户能够在浏览器上看到页面效果需要经历几个阶段: JSP ->(Tomcat容器负责) JAVA -> class -> 浏览器(HTML)

jsp书写java代码的三种方式

Java代码片段

① 脚本片段格式
格式:<% Java代码片段 %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
 书写java代码的三种方式  

<% int x = 10; %> 
 

②脚本片段作用

在jsp翻译后的_jspService方法中,嵌入java代码

③ 脚本片段使用注意事项
脚本片段可以分开书写,最终是组合在一起的,示例:
脚本片段内容

<% for(int j = 0 ; j < 5 ;j++){%> 
Hello World!!!
<%}%>

JSP声明变量、方法

<%! 

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

注:这种使用频率非常低

JSP表达式

<%=age %>

三大JSP指令

  • page
  • include
  • taglib

指令写法

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

page指令

  • language
    表明jsp页面中可以写java代码
  • contentType
    其实是说这个文件是什么类型,告诉浏览器我是什么内容类型,以及使用什么编码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  • pageEncoding jsp内容编码
  • extends 用于指定jsp翻译成java文件后,继承的父类是谁,一般不用改。

注意:如果指定了此属性, 要继承的这个父类必须继承默认的HttpJspBase(因为Java只能继承一个类),否则JSP页面无法运行

  • 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,并且设置、获取属性
这三个标签当成bean包中setterXX和getterXX来理解




JSP九大内置对象

所谓内置对象,就是我们可以直接在jsp页面中使用这些对象。 不用创建。
jsp模式_第2张图片

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 设置指定名字参数值

response 【javax.servlet.http.HttpServletResponse】

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

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

pageContext 【javax.servlet.jsp.PageContext】

主要作用有两个:

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

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 是否为自动输出

config 【javax.servlet.ServletConfig】

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

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

page 【java.lang.Object】

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

exception 【java.lang.Throwable】

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

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

四个作用域

表示这些对象可以存值,他们的取值范围有限定。 setAttribute 和 getAttribute
jsp模式_第3张图片

使用作用域来存储数据

<%
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】

整个工程都可以访问, 服务器关闭后就不能访问了。
在java程序中叫ServletContext;在jsp中叫application。一个意思两种叫法

常与el和jstl表达式一起使用见下篇el和jstl表达式

HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统HTML有所区别,JSP文件的扩展名为.jsp。
JSP技术所开发的Web应用程序是基于Java的,本质上就是一个Servlet , 它可以用一种简捷而快速的方
法从Java程序生成Web页面,其使用上具有如下几点特征:

  • 跨平台:由于JSP是基于Java语言的,它可以使用Java API,所以它也是跨平台的,可以应用于不同的系统中,如Windows、Linux等。当从一个平台移植到另一个平台时,JSP和JavaBean的代码并不需要重新编译,这是因为Java的字节码是与平台无关的,这也应验了Java语言“一次编译,到处
    运行”的特点
  • 业务代码相分离:在使用JSP技术开发Web应用时,可以将界面的开发与应用程序的开发分离开。开发人员使用HTML来设计界面,使用JSP标签和脚本来动态生成页面上的内容。在服务器端,JSP引擎(或容器,本书中指Tomcat)负责解析JSP标签和脚本程序,生成所请求的内容,并将执行结
    果以HTML页面的形式返回到浏览器。
  • 组件重用:JSP中可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码
    或者作为一个数据存储模型,在JSP页面中,甚至在整个项目中,都可以重复使用这个JavaBean,同时,JavaBean也可以应用到其他Java应用程序中。
  • 预编译:预编译就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,
    并且仅执行一次编译。编译好的代码将被保存,在用户下一次访问时,会直接执行编译好的代码。
    这样不仅节约了服务器的CPU资源,还大大的提升了客户端的访问速度。

你可能感兴趣的:(jsp模式)