2021-06-09

第六章 JSP技术

1.JSP的简介

  • 什么是JSP
    JSP全名为Java Server Page 是为了简化servlet的工作而出现的替代品
    在JSP中java代码与HTML共同存在,其中HTML代码用于展示静态的内容,java代码用来展示动态的内容

  • 为什么出现JSP技术
    1997年Java Web中只有Servlet。生成html技术也需要在Servlet中完成,虽然servlet也可以完成所有的输出工作,但是使用过程比较麻烦,部署也比较复杂。为了克服这些缺点,1999年SUN公司退出JSP技术,该技术在生成HTML代码的时候相比servlet方便了许多。

  • 对于servlet和JSP技术的理解:

     servlet:在java代码中嵌入html代码,更擅长编写java业务代码
     JSP:在html中嵌入java代码,更擅长页面展示
    

2.JSP运行原理

jsp运行原理
jsp在第一次被访问时会被Web容器翻译成servlet,即 jsp本质上就是Servlet

过程: 第一次访问——->helloServlet.jsp—>helloServlet_jsp. java---->编译运行

被翻译后的servlet在Tomcat的work目录中可以找到,使用IDEA会单独为项目维护一个目录

通过观察发现 jsp会转化为java文件,并且间接的继承了HttpServlet,实现了其中的主要方法,init、service、destory,并且将html代码通过java方式输出给浏览器

3.JSP脚本与注释

JSP脚本

  1. <%java代码%>-----内部的java代码翻译到service方法的内部
  2. <%=java变量或表达式>-----会被翻译成service方法内部out print()
  3. <%/java代码%>----会被翻译成servlet的成员的内容

JSP注释

  1. Html注释:<!–注释内容–>----可见范围jsp源码、翻译后的servlet、页面显示html源码
  2. java注释://单行注释 “多行注释*/-----可见范围jsp源码、翻译后的servlet
  3. sp注释:<%–注释内容–%>----可见范围jsp源码

4JSP指令

jsp指令(3个)

jsp的指令是指导jsp翻译和运行的命令,jsp包三大指令:

page指令----属性最多的指令(实际开发中page指令默认)

属性最多的一个指令,根据不同的属性,指导整个页面特性
格式:<%@ page 属性名1=“属性值1”属性名2=“属性值2”.…%>

常用属性如下: language:Jsp脚本中可以嵌入的语言种类
contentType:response.setContentType(text/html:charset=UTF-8)
session:是否jsp在翻译时自动创建session import:导入java的包 errorPage:
当当前页面出错后跳转到哪个页面

include指令
页面包含(静态包含)指令:可以将一个jsp页面包含到另一个jsp页面中
格式:<%@ include file="被包含的文件地址" %>

taglib指令

在jsp页面中引入标签库(jstl标签库、struts2标签库)
格式:< %@ taglib url="标签库地址" prefix="前缀" %>

5.JSP隐式对象概述

  • 什么是隐式对象?
    JSP的隐式对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。

6.JSP九大隐式对象详解

1、application:
1.1 application对象有效的范围是从web应用程序服务器一开始执行,到web服务器结束服务为止。
1.2 对于一个网站中所有的JSP页面,application对象只有一个。它们操作的是同一个application对象。
1.3 application是一个全局变量,所有访问同一服务器的客户都可访问application对象。
使用下面一个小例子来证明,在开启了服务器后,在不同的浏览器中访问,可以看到计数器是不断上升的,而不会从1开始。
1.4 获取服务器系统相关信息
application对象负责提供应用程序在服务器中运行时的一些全局信息,因此我们可以利用application来获取一些系统相关信息。

2、config
2.1 config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数及服务器的有关信息。
2.2 主要是对web.xml的数据进行读取。实际上是通过getServletContext()方法获得application对象,再根据application对象获得。
可以直接在网页中获得web.xml中设置的数据

3、exception
作用如名所示,用来处理页面异常的。
3.1 exception对象常用方法如下
(1)getMessage()方法
(2)toString()方法
(3)printStackTrace()方法
(4)getLocalizedMessage()方法
(5)fillStackTrace()方法
3.2 用法:
注意:exception对象只能在定义了<%@ page isErrorPage=”true”%>中使用,否则没有该对象
testException.jsp

4、out
4.1 out对象主要用于向浏览器端输出数据
4.2 out实际上是带有缓冲特性的PrinterWriter,可以称之为JspWriter。缓冲区容量是可以设置的,甚至也可以关闭,
只要通过page指令的buffer属性就可以达到此目的。
4.3 JSP文件代码中的文件内容会自动生成out.print()或者out.println()输出。

5、page
5.1 page对象指代JSP页面本身、代表了正在运行的由JSP文件产生的类对象。
5.2 page对象的常用方法如下。
(1)getClass()方法
(2)equals()方法
(3)clone()方法
实际上就是从Object中继承的方法

6、request
6.1 请求有效:请求页面A,并向A中传递某些参数。
6.2 请求有效对象在处理结束时就会失效。
6.3 request对象可以获取哪些信息
6.3.1 建立HTML表单
6.3.2 用REQUEST对象处理
JSP页面将数据存放在request对象里,并将该请求传递到下一个页面,下一个页面访问request对象,处理上一个JSP页面传递过来的数据。
6.3.3 通过超链接来传递

<a   href="aaa.jsp?aa=aa&bb=bb&cc=cc">aaa</a>

6.3.4 通过jsp动作标签param来进行传递
6.4 传递一组数据

7、response
7.1 response对象负责将服务器端的数据发送回浏览器的客户端。主要用于向客户端发送数据,如Cookie、HTTP文件头等信息。
7.2 利用response实现自动刷新
7.2.1 刷新当前界面

response.setHeader("refresh", "3");  
out.print(new Date().toString());  

结果:每隔3秒刷新一次界面,显示当前时间
7.2.2 跳转界面

<%  
out.print("3秒后刷新...");  
response.setHeader("refresh", "3;url=count.jsp");  
%>  

7.3 添加Cookie

<%  
        Cookie cookie = new Cookie("username", "Chalmers");  
        //设置保存时间为60*60秒  
        cookie.setMaxAge(60 * 60);  
        response.addCookie(cookie);  
    %>  

8、pageContext
8.1 pageContext对象能够存取其他隐含对象。
8.2 当隐含对象本身也支持属性时,pageContext对象也提供存取那些属性的方法。

pageContext对对象就是jsp页面的上下文对象

  1. pageContext是一个域对象
  • setAttribute(String name, Object obj)
  • getAttribute(String name)
  • removeAttrbute(String name)
  1. pageContext可以向指定的其他域中存取数据
    setAttribute(String name, Object obj, int scope)
    getAttribute(String name,int scope)
    removeAttrbute(String name, int scope)
    findAttribute(String name)//获取顺序依次从pageContext域,request域,session域,application域中获取属性

3.可以获得其他8大隐式对象
例如:pageContext.getRequest()
pageContext.getSession()

9、session
9.1 session对象用于存储一个用户的会话状态,也就是说,session对象是对某个用户的会话过程中的信息存储。
9.2 当客户端访问服务器时,会在服务器中搜索对应的sessionID,如果没有找到,那么便会创建一个,如果找到了便直接使用。
所以在session 的有效时间内,每个客户端只有一个sessionID。

四大作用域的区别

page域;当前jsp页面范围
request域,一次请求 
session域;一次会话
application域;整个web应用

pageContext,request、session、application传递参数的使用范围:
10.1 设置参数值

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

10.2 当前页面中,所有的对象都可以通过getAttribute获得值
10.2 在request的forward方法传递中,pageContext接收数据失败,所以pageContext只能在定义页面中使用。
10.3 request的include方法同上
10.4 如果使用response的sendRedirect方法,那么request也将接收失败。原因:客户端向服务端请求数据,服务端在向客户端发送数据
完成后,该request便已经结束,客户端访问url时已经是一个新的request了,所以request的使用范围是一个request内。
10.5 在session的有效时间内,数据都是存在的,特别强调的是,关闭浏览器不会清除掉session。
10.6 而application只有在关闭服务端后才会被清除,可见上面的application介绍。
10.7 总结:范围大小: application>session>request>pageContext

7.JSP标签

什么是Jsp标签
JSP标签用来控制JSP行为,执行一些常用的JSP页面动作,通过标签可以实现很多行java代码才能够实现的功能,比如请求转发的功能

常用的JSP标签

  • 页面包含(动态包含):<jap:include page="被包含的页面/">
  • 请求转发:<jsp:forward page="要转发的资源’/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值