Web基础了解版06-Jsp
jsp
jsp全称java server pages,也就是在我们javaweb中的动态页面。
jsp其本质就是一个servlet。servlet能做的事情jsp都能做。
jsp必须运行在服务器中,不能直接使用浏览器打开。
jsp是动态页面,html是静态页面
动态页面 | 静态页面 | |
---|---|---|
运行原理 | 通过服务器解析后,将数据在浏览器中显示 | 直接在浏览器中解析运行 |
维护成本 | 较低,可以修改后台数据,进而影响页面中的数据 | 较高,必须将修改后的页面覆盖原页面 |
数据库 | 可以连接数据库 | 不可连接数据库 |
访问速度 | 较慢 | 较快 |
书写代码 | 可以书写java代码 |
注意事项
1、jsp页面是一个类似于html的一个页面。 jsp直接存放到webcontent目录下,和html一样访问jsp的时候,也和访问html一样
- 实际上tomcat在运行jsp时,并不是直接显示的我们所编写的jsp页面,而是将jsp页面转换成了一个java类,它实际上就是一个servlet。
- 让我们来找到那个目录,对于eclipse来说是在:工作空间下,右键tomcat服务点击browse deployment location...
- 在work目录下的...work\catalina\localhost\day07_jsp\org\apache\jsp文件夹中
- 打开index_jsp.java文件查看里面的内容:发现,生成的类继承于httpjspbase类。这是一个jsp文件生成servlet程序要继承的基类!并且这个httpjspbase类继承于httpservlet类。
- 那么当我们访问 一个xxx.jsp文件后翻译成java文件的全名是 xxx_jsp.java文件。
-
如果文件未改变,不会被翻译和编译
-
指令
-
- 三大指令:<%@ page %> ,<%@ include %> ,| <%@ taglib %>
- html&css&js&jquery等...
<% int i = 0;%>
<%=i%>
-
-
html:<!-- -->
-
jsp注释 | java注释 | html注释 | |
---|---|---|---|
jsp页面 | 可见 | 可见 | 可见 |
java代码 | 不可见 | 可见 | 可见 |
浏览器 | 不可见 | 不可见 |
-
<%@ 指令名 属性=属性值 属性2=属性值2 ... %>
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%>
-
language:语言,值为java且仅java。
-
contenttype:与response.setcontenttype()作用一致,设置浏览器编码。
-
pageencoding:设置jsp页面的编码字符集。
-
import:导包
-
iserrorpage:设置当前页面是否为错误页面,默认值"false"。
-
true:设置当前页面为错误页面,可以使用exception内置对象,捕获异常 。
-
false:设置当前页面不是错误页面,不可以使用exception内置对象,捕获异常 。
-
-
<%@include file="被包含文件的路径" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-
prefix用来指定前缀名,我们通过该名来使用jstl。
-
uri相当于库的唯一标识,因为jstl由多个不同的库组成,使用该属性指定要导入哪个库。
-
-
jsp动作标签与html标签不同,html标签由浏览器来解析,而jsp动作标签需要服务器(tomcat)来运行。
作用:在页面中用于转发操作
<jsp:forward page="target.jsp"></jsp:forward>
转发子标签;在转发时设置请求参数,通过request.getparameter()在目标页面获取请求参数。
<jsp:forward page="target.jsp"> <jsp:param value="paramvalue" name="paramname"/> </jsp:forward>
注意:如果转发动作标签不需要设置请求参数,该标签开始与结束标签内部,不允许书写任何内容,(包括空格)
作用:动态包含,将其他页面包含到当前页面中。
<jsp:include page="target.jsp"></jsp:include>
org.apache.jasper.runtime.jspruntimelibrary.include(request, response, "target.jsp", out, false);
@include指令 | jsp:include标签 | |
---|---|---|
特点 | 静态包含 | 动态包含 |
语法的基本形式 | <%@ include file=”…”%> | <jsp:include page=”…”/> |
包含动作发生的时机 | 翻译期间 | 请求期间 |
是否生成java文件 | 不生成 | 生成 |
合并方式 | 代码复制 | 合并运行结果 |
包含的内容 | 文件实际内容 | 页面输出结果 |
代码冲突 | 有可能 | 不可能 |
编译次数 | 1 | 包含的文件 + 1 |
适用范围 | 适用包含纯静态内容(css,html,js),或没有非常耗时操作。或大量java代码的jsp |
jsp容器为每个页面提供的java对象,开发者可以直接使用它们而不用显式声明
-
-
定义:代表页面域对象,用来代表整个jsp页面。
-
作用:
-
页面域对象
-
九大隐式对象的“大哥”,可以直接调用其他八大隐式对象。
-
-
-
-
定义:代表浏览器向服务器发送的请求报文,该对象由服务器创建,最终以参数的形式发送到doget()和dopost()方法中。
每当客户端请求一个jsp页面时,jsp引擎就会制造一个新的request对象来代表这个请求。request对象提供了一系列方法来获取http头信息,cookies,http方法等等。
-
作用(详见servlet中request对象)
-
获取请求参数
-
获取url地址参数
-
请求转发
-
向请求域中保存数据(获取数据&移除数据)
-
获取请求头信息
-
-
-
-
定义:代表浏览器与服务器之间的会话。
-
作用
-
会话域对象,
session对象用来跟踪在各个客户端请求间的会话。
-
-
-
定义:servlet上下文,代表当前web应用。
web容器在启动时,它会为每个web应用程序都创建一个唯一对应的servletcontext对象,意思是servlet上下文,代表当前web应用。
-
作用
-
获取项目的上下文路径(带/的项目名):getcontextpath()
-
获取虚拟路径所映射的本地真实路径:getrealpath(string path)
-
-
4. 获取web应用初始化参数:application.getinitparameter("paramname");
- 在servlet中获取方式:使用this.getservletcontext()方法获取。
-
类型:object
-
作用:this,当前类对象。
-
类型:httpservletresponse
-
定义:代表服务器向浏览器发送的响应报文,该对象由服务器创建,最终以参数的形式发送到doget()和dopost()方法中。
-
作用:
-
向页面(响应体)中响应数据,数据包括文本、html等。
-
重定向
-
设置响应头信息
-
-
在servlet中获取方式:doget()或dopost()中直接使用
-
类型:servletconfig
-
定义:代表当前servlet的配置信息,每一个servlet都有一个唯一对应的servletconfig对象。
-
作用:
-
获取servlet名称:getservletname()
-
获取全局上下文servletcontext对象:getservletcontext()
-
获取servlet初始化参数:getinitparameter(string) / getinitparameternames()。
-
-
在servlet中获取方式:this.getservletconfig()
-
类型:jspwriter
-
定义:代表当前页面的输出流。
-
作用:与servlet中的printwriter功能类似,将数据响应到页面,响应的数据可以是页面、页面片段、字符串等。
-
在servlet中获取方式:无
exception
-
类型:throwable
-
定义:代表当前页面的异常对象。
-
作用:捕获处理页面中的异常信息。
-
九大内置对象,都是我们可以在【代码脚本】中或【表达式脚本】中直接使用的对象。
程序中的域对象,主要负责在不同web资源之间进行数据交换,(如:servlet和jsp之间的数据交换)。
每个域对象内部都维护了一个map<string , object>,域对象的共同方法。
-
设置属性到域中:void setattribute(string key , object value);
-
从域中获取指定的属性:object getattribute(string key);
-
移除域中指定属性:void removeattribute(string key);
-
-
每个页面都有自己唯一的一个pagecontext对象。
-
注意servlet中没有该对象。
-
-
request: 当前请求*享数据有效。
-
当前请求:转发、直接访问一个页面为当前请求。
-
不在当前请求:重定向、 打开页面再点击页面中的超链接不在当前请求 。
-
-
session: 一次会话范围*享数据有效。
-
当前会话:当前浏览器不关闭&不更换浏览器即为当前会话。
-
只关心浏览器是否关闭,不关心服务器关闭重启。
-
不同浏览器不共享会话。
-
-
application: 在服务器运行的一次过程*享数据有效。
-
作用范围 | 起始时间 | 结束时间 | |
---|---|---|---|
pagecontext | 当前jsp页面 | 页面加载 | 离开页面 |
request | 同一个请求 | 收到请求 | 响应 |
session | 同一个会话 | 开始会话 | 结束会话 |
application | 当前web应用 | web应用加载 |