Web基础了解版06-Jsp
Jsp
Jsp全称Java Server Pages,也就是在我们JavaWeb中的动态页面。
Jsp能够以HTML页面的方式呈现数据,是一个可以嵌入Java代码的HTML。
Jsp其本质就是一个Servlet。Servlet能做的事情JSP都能做。
Jsp必须运行在服务器中,不能直接使用浏览器打开。
Jsp是Web网页的技术标准,主要语法组成包括:指令,html模板元素,脚本片段(小脚本),表达式,声明,注释,后缀是*.jsp。
Jsp主要负责显示及获取数据
Jsp是动态页面,html是静态页面
动态页面 | 静态页面 | |
---|---|---|
运行原理 | 通过服务器解析后,将数据在浏览器中显示 | 直接在浏览器中解析运行 |
维护成本 | 较低,可以修改后台数据,进而影响页面中的数据 | 较高,必须将修改后的页面覆盖原页面 |
数据库 | 可以连接数据库 | 不可连接数据库 |
访问速度 | 较慢 | 较快 |
书写代码 | 可以书写java代码 | 不能书写java代码 |
注意事项
1、jsp页面是一个类似于html的一个页面。 jsp直接存放到WebContent目录下,和html一样访问jsp的时候,也和访问html一样
2、jsp的默认编码集是iso-8859-1,修改jsp的默认编码为UTF-8
JSP运行原理
- 实际上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文件。
- 在tomcat下的conf目录中的web.xml配置好了JSP的映射信息
以后在访问同一个jsp文件
如果文件未改变,不会被翻译和编译
如果文件改变,会翻译和编译
Jsp基本语法
指令
语法格式:<%@ %>
- 三大指令:<%@ page %> ,<%@ include %> ,| <%@ taglib %>
模板元素
- html&css&js&jQuery等...
代码脚本片段
格式 :<%%>
作用:在_jspService()方法中,书写java代码。
- <% int i = 0;%>
表达式
格式: <%=%>
作用:将数据显示到页面,与out.print()作用相同。
- <%=i%>
声明
格式:<%!%>
作用:在翻译后的class helloworld_jsp这个Servlet类中,书写java代码。
注释
java:单行注释://,多行注释:/**/
html:<!-- -->
jsp:<%-- --%>
JSP注释 | Java注释 | HTML注释 | |
---|---|---|---|
JSP页面 | 可见 | 可见 | 可见 |
Java代码 | 不可见 | 可见 | 可见 |
浏览器 | 不可见 | 不可见 | 可见 |
Jsp常用指令
语法格式
<%@ 指令名 属性=属性值 属性2=属性值2 ... %>
page指令
- <%@ 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内置对象,捕获异常 。
errorPage:设置当前页面错误时的跳转目标页面。错误需要在_jspService()中才可以捕获。
include指令:静态包含
- <%@include file="被包含文件的路径" %>
作用:将目标文件包含到当前文件中。
特点:被包含的文件不会被翻译&编译。(先包含,再翻译)
taglib指令
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
属性
prefix用来指定前缀名,我们通过该名来使用JSTL。
uri相当于库的唯一标识,因为JSTL由多个不同的库组成,使用该属性指定要导入哪个库。
作用:引入标签库。
Jsp动作标签
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>
特点:被包含的文件同时会被翻译&编译。(先翻译,再包含)
本质原理:当使用动态包含时,Tomcat会在生成的Servlet中加入如下代码:
- 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 | 包含需要传递参数。含有大量java代码,运算,耗时很长的操作。 |
Jsp九大隐式对象
JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明
pageContext
类型:PageContext
定义:代表页面域对象,用来代表整个JSP页面。
作用:
页面域对象
九大隐式对象的“大哥”,可以直接调用其他八大隐式对象。
在Servlet中获取方式:无。
request
类型:HttpServletRequest
定义:代表浏览器向服务器发送的请求报文,该对象由服务器创建,最终以参数的形式发送到doGet()和doPost()方法中。
每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。
作用(详见Servlet中request对象)
获取请求参数
获取url地址参数
请求转发
向请求域中保存数据(获取数据&移除数据)
获取请求头信息
在Servlet中获取方式:doGet()或doPost()中直接使用。
session
类型:HttpSession
定义:代表浏览器与服务器之间的会话。
作用
会话域对象,
session对象用来跟踪在各个客户端请求间的会话。
在Servlet中获取方式 :request.getSession();
application
类型:ServletContext
定义:Servlet上下文,代表当前web应用。
Web容器在启动时,它会为每个Web应用程序都创建一个唯一对应的ServletContext对象,意思是Servlet上下文,代表当前Web应用。
作用
获取项目的上下文路径(带/的项目名):getContextPath()
获取虚拟路径所映射的本地真实路径:getRealPath(String path)
获取WEB应用程序的全局初始化参数(基本不用)
4. 获取Web应用初始化参数:application.getInitParameter("ParamName");
- 在Servlet中获取方式:使用this.getServletContext()方法获取。
page
类型:Object
作用:this,当前类对象。
response
类型:HttpServletResponse
定义:代表服务器向浏览器发送的响应报文,该对象由服务器创建,最终以参数的形式发送到doGet()和doPost()方法中。
作用:
向页面(响应体)中响应数据,数据包括文本、Html等。
重定向
设置响应头信息
在Servlet中获取方式:doGet()或doPost()中直接使用
config
类型:ServletConfig
定义:代表当前Servlet的配置信息,每一个Servlet都有一个唯一对应的ServletConfig对象。
作用:
获取Servlet名称:getServletName()
获取全局上下文ServletContext对象:getServletContext()
获取Servlet初始化参数:getInitParameter(String) / getInitParameterNames()。
在Servlet中获取方式:this.getServletConfig()
out
类型:JspWriter
定义:代表当前页面的输出流。
作用:与Servlet中的PrintWriter功能类似,将数据响应到页面,响应的数据可以是页面、页面片段、字符串等。
在Servlet中获取方式:无
exception
类型:Throwable
定义:代表当前页面的异常对象。
作用:捕获处理页面中的异常信息。
在Servlet中获取方式:new Throwable()
九大内置对象,都是我们可以在【代码脚本】中或【表达式脚本】中直接使用的对象。
Jsp四大域对象
程序中的域对象,主要负责在不同web资源之间进行数据交换,(如:servlet和jsp之间的数据交换)。
域对象分析
每个域对象内部都维护了一个Map<String , Object>,域对象的共同方法。
设置属性到域中:void setAttribute(String key , Object value);
从域中获取指定的属性:Object getAttribute(String key);
移除域中指定属性:void removeAttribute(String key);
域对象有效性
pageContext: 当前页面中共享数据有效,离开当前页面失效。
每个页面都有自己唯一的一个pageContext对象。
注意servlet中没有该对象。
request: 当前请求中共享数据有效。
当前请求:转发、直接访问一个页面为当前请求。
不在当前请求:重定向、 打开页面再点击页面中的超链接不在当前请求 。
session: 一次会话范围中共享数据有效。
当前会话:当前浏览器不关闭&不更换浏览器即为当前会话。
只关心浏览器是否关闭,不关心服务器关闭重启。
不同浏览器不共享会话。
application: 在服务器运行的一次过程中共享数据有效。
服务器关闭销毁
域对象 | 作用范围 | 起始时间 | 结束时间 |
---|---|---|---|
pageContext | 当前JSP页面 | 页面加载 | 离开页面 |
request | 同一个请求 | 收到请求 | 响应 |
session | 同一个会话 | 开始会话 | 结束会话 |
application | 当前Web应用 | Web应用加载 | Web应用卸载 |
Web基础了解版06-Jsp的更多相关文章
- Web基础了解版04-XML-Tomcat-Http
XML 什么是XML - Tomcat - Http XML:eXtensible Markup Language (可扩展标记语言). XML 是一种标记语言,很类似 HTML. XML 的设计宗旨 ...
- WEB基础(一)--JSP的9个内置对象
1.request request 对象是 javax.servlet.httpServletRequest类型的对象. 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据. ...
- Web基础了解版05-Servlet
Servlet Servlet? 从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案.而具体的Servlet容器负责提 ...
- Web基础了解版10-Filter-Listener
Filter 对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息. 在一个WEB应用中可以部署多个过滤器,多个过滤器就组成了一个过滤器链,请求 ...
- Web基础了解版07-EL表达式-运算符-11个隐式对象
EL EL(Expression Language)是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作.EL在得到某个数据时,会自动进 ...
- Web基础了解版09-Cookie-Session
Cookie Cookie 是一种服务器发送给浏览器以键值对形式存储小量信息的技术. 当浏览器首次请求服务器时,服务器会将一条信息封装成一个Cookie发送给浏览器,浏览器收到Cookie,会将它保存 ...
- Web基础了解版02-JavaScript
JavaScript 特性 ① 解释型语言.JavaScript是一种解释型的脚本语言,JavaScript是在程序的运行过程中逐行进行解释,不需要被编译为机器码再执行. ② 面向对象.JavaScr ...
- Web基础了解版08-JSTL-Core标签库
JSTL JSP为我们提供了可以自定义标签库(Tag Library)的功能,用来替代代码脚本,Sun公司又定义了一套通用的标签库名为JSTL(JSP Standard Tag Library),里面 ...
- Web基础了解版01-html-css
HTML 网页构成 摘要 说明 结构(HTML) HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 表现(CSS) CSS样式是表现.就像网页的 ...
随机推荐
- 廖雪峰Java11多线程编程-3高级concurrent包-6ExecutorService
Java语言内置多线程支持: 创建线程需要操作系统资源(线程资源,栈空间) 频繁创建和销毁线程需要消耗大量时间 如果可以复用一个线程 线程池: 线程池维护若干个线程,处于等待状态 如果有新任务,就分配 ...
- LUOGU P2580 于是他错误的点名开始了(trie树)
传送门 解题思路 trie树模板
- l洛谷 NOIP提高组模拟赛 Day2
传送门 ## T1 区间修改+单点查询.差分树状数组. #include<iostream> #include<cstdio> #include<cstring> ...
- We'll be fine.
可怜的人心中都有一种信念,那就是 明天会更好. Everything will be fine. 我拥见风来,嗅见花开,是避不掉的厉寒,是止不住的徘徊.
- http response 过长 导致Connection reset
http response 过长(2W byte) 导致Connection reset
- 02_Hibernate持久化配置
一.hibernate对象持久化 Web开发的分层: 为了把数据访问细节和业务逻辑分开, 一般把数据访问作为单独的持久化层.DAO是数据访问对象,使用hibernate后,数据访问对象中操作的API将 ...
- Python基础---序列对象
一.序列简介 数据结构是通过某种方式组织在一起的元素的集合. 容器(Container)是一种Python的数据结构,基本上是包含其他对象的任意对象.序列和映射(如字典)是两类主要的容器.集合(Set ...
- springboot 2 集成 redis 缓存 序列化
springboot 缓存 为了实现是在数据中查询数据还是在缓存中查询数据,在application.yml 中将mybatis 对应的mapper 包日志设置为debug . spring: dat ...
- [UVA12235] Help Bubu 思维题+状态定义+Dp
Online Judge:UVA12235 Label:思维题,状态定义,状压Dp 题面: 题目描述 有一个书架,上面放了n本书,从左往右的第i本书的高度为h[i].定义书架的混乱度为连续等高段的个数 ...
- Luogu P1850 换教室(期望dp)
P1850 换教室 题意 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1\l ...