当前位置: 移动技术网 > IT编程>网页制作>CSS > Web基础了解版06-Jsp

Web基础了解版06-Jsp

2019年12月26日  | 移动技术网IT编程  | 我要评论

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中获取方式:无。

  • 类型:httpservletrequest

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

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

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

    1. 获取请求参数

    2. 获取url地址参数

    3. 请求转发

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

    5. 获取请求头信息

  • 在servlet中获取方式:doget()或dopost()中直接使用。

session

  • 类型:httpsession

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

  • 作用

    • 会话域对象,

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

application

  • 在servlet中获取方式 :request.getsession();

  • 类型: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应用卸载

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网