Jsp知识点总结

问题

在学习了Servlet之后,使用Servlet进行页面的展现,代码书写过于麻烦。
极大的影响了开发的效率,那么有没有一种方式可以让我们像以前写网页一样来进行
网页的编程工作呢?

Jsp

虽然jsp这项技术随着时代的发展,前后端分离的浪潮以及各种框架的涌现,已经慢慢被淘汰,可能只有一些老项目还在使用,一些模板引擎能够更好的适应时代,虽然jsp也是一种模板引擎,但是里面可以嵌套Java代码,这就大大提高了程序的不安全性,因为前端程序员如果不是在很熟悉Java的情况下不小心改动了代码,那就可能会出现一些不可预料的错误,所以这项技术的淘汰是必然的。
FreeMarker、Thymeleaf等模板引擎兴起,能够更好的适应时代的要求。
但是学习Jsp我认为还是有点必要的。

  • 第一,大部分学校的书上还是会有这项技术的教学,所以为了考试,即使不深入了解,但是一些基础知识也是很有必要的。
  • 第二,模板引擎虽然各不相同,优点也不尽然,但是他们的设计理念都是相通的,所以学习了Jsp后,对于其他模板引擎的学习会有很大帮助,会很容易接受。

Jsp是什么

JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求

Jsp能干什么

  • JSP是一种Java servlet,主要用于实现Java
    web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

  • JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

  • JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

特点

  • 本质上还是Servlet
  • 跨平台,一次编写处处运行
  • 组件跨平台
  • 健壮性和安全性

访问原理

浏览器发起请求,请求JSP,请求被Tomcat服务器接受,执行JspServelt将请求的JSP文件转义成为对应的java文件(也是Servlet),然后执行转义好的Java文件。

语法和指令

内置对象

  • PageContext对象
  • Request对象
  • Session对象
  • Application对象
  • Response对象
  • 对象
  • Page对象
  • Exception对象
注释
  • 前端语言注释
<!--  这是标准的html注释 -->

会被转译,也会被发送,但是不会被浏览器执行

  • Java语言注释 会被转译,但是不会被servlet执行
单行注释// 多行注释 /* */
  • Jsp注释 不会被转译
<%-- --%> 这是Jsp注释

page指令

<%@page 属性名=“属性值” 属性名=“属性值”…%>

  • language:声明Jsp要被转译的语言。
  • import:声明转译的java文件要导入的包。不同的包使用逗号隔开。
  • pageEncoding:设置Jsp文件的数据编码格式。
  • contentType=“text/html; charset=utf-8” 设置Jsp数据响应给浏览器时,浏览器的解析和编码格式。
  • session:设置转译的servlet中是否开启session支持,默认开启,true表示开启,false表示关闭
  • errorPage:设置Jsp运行错误跳转的页面。
  • extends:设置Jsp转译的Java文件要继承的父类(包名+类名)。
    作用
    配置Jsp文件的转译相关的参数。

taglib指令

引用jsp的标签库,下篇介绍EL表达式和JSTL的时候再详细介绍语法。

局部代码块

  • 特点:
    局部代码块中声明的Java代码会被原样转译到Jsp文件对应的servlet文件的 _JspService方法中
    代码块中声明的变量都是局部变量
  • 使用:
<% Java代码 %>
  • 缺点:
    使用局部代码块在Jsp中进行逻辑判断,书写麻烦,阅读困难。
  • 开发:
    使用Jsp进行逻辑处理,使用Jsp进行页面展现。

全局代码块

  • 特点:
    声明的Java代码作为全局代码转译到对应的servlet类中。
  • 加粗样式使用:
<%! 全局代码块  %>
  • 注意:
    全局代码块声明的代码,需要使用局部代码块调用。

脚本段语句

  • 特点:
    帮助我们快速获取变量或者方法的返回值作为数据响应给浏览器。
  • 使用:
<%=变量名或方法%>
  • 注意:
    不要在变量名或者方法名后面使用分号。
  • 位置:
    除Jsp要求语法之外的任意位置

静态引入

<%@include file="要引入的Jsp文件的相对路径" %>
  • 特点:
    会将引入的Jsp文件和当前Jsp文件转译成一个Java(servelt)文件使用
    在页面中也就显示了合并后的显示效果。
  • 注意:
    静态引入的Jsp文件不会单独转译成Java(servlet)文件。
    当前文件和静态引入的Jsp文件中不能够使用Java代码块声明同名变量。

动态引入

<jsp:include page="要引入的Jsp文件的相对路径"></jsp:include>
  • 特点:
    会将引入的Jsp文件单独转译,在当前文件转译好的Java文件中调用引入的Jsp文件的转译文件。
    在网页显示合并后的显示效果。
  • 注意:
    动态引入中允许文件中声明同名变量。

转发标签

优点:
降低Jsp代码的冗余,便于维护升级。

使用:

<jsp:forward page="要转发的jsp文件的相对路径"></jsp:forward>
  • 特点:
    一次请求
    地址栏信息不改变
  • 注意:
    在转发标签的两个标签中间除了写<jsp:param name="str" value="aaa" />子标签不会报错,其他任意字符都会报错
  • name属性为附带的数据的键名
  • value为附带的数据内容
    **注意:**会将数据以?的形式拼接在转发路径的后面。

Jsp的九大内置对象

内置对象:

Jsp文件在转译成其对应的Servlet文件的时候自动生成的并声明的对象。我们在Jsp页面中直接使用即可。

注意:
内置对象在Jsp页面中使用,使用局部代码块或者脚本语句段语句来使用,不能够在全局代码块中使用。

内容:
九个对象

  • pageContext:页面上下文对象,封存了其他内置对象。封存了当前Jsp的运行信息。
    注意:
    每个Jsp文件单独有一个pageContext对象。 作用域:当前页面。
  • request:封存当前请求数据的对象。由Tomcat服务器创建。一次请求
  • session:此对象用来存储用户的不同请求的共享数据的。一次会话
  • application:也就是ServletContext对象,一个项目只有一个。存储用户共享数据的对象,以及完成其他操作。项目内
  • response:响应对象,用来响应请求处理结果给浏览器对象。设置响应头,重定向。
  • out:响应对象,Jsp内部使用。带有缓冲区的响应对象,效率高于response对象。(专门用来响应的,不能设置响应头,不能进行重定向)
  • page:代表当前Jsp的对象。相当与Java中的this。
  • exception:异常对象。存储了当前运行的异常信息。
    **注意:**使用此对象需要在page指定中使用属性isErrorPage="true"开启。
  • config:也就是ServletConfig,主要是用来获取web.xml中的配置数据,完成一些初始化数据的读取。

四个作用域对象

  • pageContext:当前页面。解决了在当前页面内的数据共享问题。获取其他配置对象。
  • request:一次请求。一次请求内的数据共享。通过请求转发将数据流转给下一Servlet。
  • session:一次会话。一个用户的不同请求的数据共享。将数据从一次请求流转给其他请求。
  • application:项目内。不同用户的数据共享。将数据从一个用户流转给其他用户。
    作用:
    数据流转

Jsp的路径:

在Jsp中资源路径可以使用相对路径完成跳转,但是:

问题一:资源的位置不可随意更改
问题二:需要使用…/进行文件夹的跳出。使用比较麻烦

使用绝对路径:(必须会)

/虚拟项目名/项目资源路径

例如:

 <a href="/jsp/jspPro.jsp">jspPro.jsp</a>

注意:
在Jsp中资源的第一个/表示的服务器根目录,
相当与:localhost:8080
使用Jsp中自带的全局路径声明:

<%
	String path = request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 <base href="<%=basePath%>">

作用:
给资源前面添加项目路径:http://localhost:8080/虚拟项目名/

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值