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页面。

  • 作用:

    1. 页面域对象

    2. 九大隐式对象的“大哥”,可以直接调用其他八大隐式对象。

  • 在Servlet中获取方式:无。

request

  • 类型:HttpServletRequest

  • 定义:代表浏览器向服务器发送的请求报文,该对象由服务器创建,最终以参数的形式发送到doGet()和doPost()方法中。

    每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。

  • 作用(详见Servlet中request对象)

    1. 获取请求参数

    2. 获取url地址参数

    3. 请求转发

    4. 向请求域中保存数据(获取数据&移除数据)

    5. 获取请求头信息

  • 在Servlet中获取方式:doGet()或doPost()中直接使用。

session

  • 类型:HttpSession

  • 定义:代表浏览器与服务器之间的会话。

  • 作用

    • 会话域对象,

    session对象用来跟踪在各个客户端请求间的会话。

在Servlet中获取方式 :request.getSession();

application

  • 类型:ServletContext

  • 定义:Servlet上下文,代表当前web应用。

    Web容器在启动时,它会为每个Web应用程序都创建一个唯一对应的ServletContext对象,意思是Servlet上下文,代表当前Web应用。

  • 作用

    1. 获取项目的上下文路径(带/的项目名):getContextPath()

    2. 获取虚拟路径所映射的本地真实路径:getRealPath(String path)

    3. 获取WEB应用程序的全局初始化参数(基本不用)

      4. 获取Web应用初始化参数:application.getInitParameter("ParamName");

  • 在Servlet中获取方式:使用this.getServletContext()方法获取。

page

  • 类型:Object

  • 作用:this,当前类对象。

response

  • 类型:HttpServletResponse

  • 定义:代表服务器向浏览器发送的响应报文,该对象由服务器创建,最终以参数的形式发送到doGet()和doPost()方法中。

  • 作用:

    1. 向页面(响应体)中响应数据,数据包括文本、Html等。

    2. 重定向

    3. 设置响应头信息

  • 在Servlet中获取方式:doGet()或doPost()中直接使用

config

  • 类型:ServletConfig

  • 定义:代表当前Servlet的配置信息,每一个Servlet都有一个唯一对应的ServletConfig对象。

  • 作用:

    1. 获取Servlet名称:getServletName()

    2. 获取全局上下文ServletContext对象:getServletContext()

    3. 获取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的更多相关文章

  1. Web基础了解版04-XML-Tomcat-Http

    XML 什么是XML - Tomcat - Http XML:eXtensible Markup Language (可扩展标记语言). XML 是一种标记语言,很类似 HTML. XML 的设计宗旨 ...

  2. WEB基础(一)--JSP的9个内置对象

    1.request request 对象是 javax.servlet.httpServletRequest类型的对象. 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据. ...

  3. Web基础了解版05-Servlet

    Servlet Servlet? 从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案.而具体的Servlet容器负责提 ...

  4. Web基础了解版10-Filter-Listener

    Filter 对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息. 在一个WEB应用中可以部署多个过滤器,多个过滤器就组成了一个过滤器链,请求 ...

  5. Web基础了解版07-EL表达式-运算符-11个隐式对象

    EL EL(Expression Language)是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作.EL在得到某个数据时,会自动进 ...

  6. Web基础了解版09-Cookie-Session

    Cookie Cookie 是一种服务器发送给浏览器以键值对形式存储小量信息的技术. 当浏览器首次请求服务器时,服务器会将一条信息封装成一个Cookie发送给浏览器,浏览器收到Cookie,会将它保存 ...

  7. Web基础了解版02-JavaScript

    JavaScript 特性 ① 解释型语言.JavaScript是一种解释型的脚本语言,JavaScript是在程序的运行过程中逐行进行解释,不需要被编译为机器码再执行. ② 面向对象.JavaScr ...

  8. Web基础了解版08-JSTL-Core标签库

    JSTL JSP为我们提供了可以自定义标签库(Tag Library)的功能,用来替代代码脚本,Sun公司又定义了一套通用的标签库名为JSTL(JSP Standard Tag Library),里面 ...

  9. Web基础了解版01-html-css

    HTML 网页构成 摘要 说明 结构(HTML) HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 表现(CSS) CSS样式是表现.就像网页的 ...

随机推荐

  1. python3 使用aria2下载的一个脚本

    import requests import time ariaurl="http://localhost:6800/jsonrpc" dlurl="http://xxx ...

  2. MySQL中\g和\G的作用

    \g的作用和MySQL中的分号”;"是一样: \G的作用是讲查找到的内容结构旋转90度,变成纵向结构: 下面举例说明,查找数据库中的存在的存储过程状态: SHOW PROCEDURE STA ...

  3. Servlet3.0要点小结

    1. 注解配置Servlet @WebServlet name属性: servlet名称 value属性或urlPatterns属性: servlet映射路径, 可配置多个 initParams属性: ...

  4. js实现获取两个日期之间所有日期的方法

    function getDate(datestr){ var temp = datestr.split("-"); var date = new Date(temp[0],temp ...

  5. PAT甲级——A1080 Graduate Admission

    It is said that in 2011, there are about 100 graduate schools ready to proceed over 40,000 applicati ...

  6. svn both sides of the move must be committed together

    从一个模块移动文件到另一个模块下,提交的时候报错. 选择2个模块工程,team-与资源库同步 选择2个模块下,2份文件,一份减号图标,一份加号图标,同时提交. 还有种情况,当你重名文件后,提交报错 打 ...

  7. MyBatis - Mapper动态代理开发

    Mapper接口开发方法编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象. Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发, ...

  8. tiger-complier 问题记录 类型检查

    1 注意区分 Ty_xxx 和 a_ 的区别 A 开头是对应的是原程序中的一个实体 Ty _ 开头则是类型检查中的一个抽象类 代表了一类实体 比如 A_recordTy 是原程序中的 type per ...

  9. Python学习之--函数/生成器/装饰器

    Function,函数,主要是为了:1提高代码的复用程度,2将程序模块化. 定义函数 在Python中,使用def 用来定义函数,一般函数的定义如下: def name(arg1,arg2,....) ...

  10. double转integer

    double id0 = row.getCell(0).getNumericCellValue(); Integer id = Integer.valueOf(Double.valueOf(id0). ...