当前位置: 首页 > article >正文

web笔记:JSP基础

一、什么是JSP?

建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共同存在。

  • HTML代码用来实现网页中静态内容的显示。
  • Java代码用来实现网页中动态内容的显示。

二、JSP的运行原理

由JSP引擎(JSP容器)将jsp转换为Servlet

当客户端向jsp页面发送请求时,此时jsp页面会经过转译变成JAVA源代码,在经过编译后转化为Servlet类,运行web服务器,最后发送响应给客户端

三、JSP的基本语法

1、JSP模板元素:

JSP页面中的静态HTML内容称之为JSP模版元素。JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。

2、Scriptlet元素:

在JSP页面中,使用<% Java代码    %>格式嵌入Java代码,这些Java代码必须严格遵守Java语法规范。

3-1、JSP声明:

使用<%!Java代码 %>格式,被声明的Java代码将被翻译到Servlet的_jspService()方法之外,即在JSP声明中定义的都是成员方法、成员变量、静态方法、静态变量、静态代码块等。

3-2、JSP声明(jsp表达式):

使用<%=expression%>格式,在Scriptlet中声明变量是在服务方法之内的局部变量。

4、JSP注释:

使用<%-- 注释信息 --%>格式,Tomcat在将JSP页面翻译成Servlet程序时,会忽略JSP页面中被注释的内容,不会将注释信息发送到客户端,而HTML注释<!-- 注释信息-->会被发往客户端。 在浏览器中查看网页源代码时,jsp注释看不见,html注释可以看见。

5、指令

(1)page指令:

在JSP页面中,经常需要对页面的某些特性进行描述,例如,页面的编码方式,JSP页面采用的语言等,可以通过page指令来实现,语法格式如下: <%@ page 属性名= "属性值"%>

(2)include指令:

有时候需要在JSP页面静态包含一个文件,例如HTML文件,文本文件等,可以通过include指令来实现,语法格式如下: <%@ include file="relativeURL"%> file属性用于指定被引入文件的相对路径。

  • 被引入的文件必须遵循JSP语法,其中的内容可以包含静态HTML、JSP脚本元素和JSP指令等普通JSP页面所具有的一切内容。
  • 除了指令元素之外,被引入的文件中的其它元素都被转换成相应的Java源代码,然后插入进当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致。
  • file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录。  

四、JSP的隐式对象(9个)

1、out对象:

在JSP页面中,向客户端发送文本内容时,可以使用out对象来实现。out对象是javax.servlet.jsp.JspWriter类的实例对象,它的作用与ServletResponse.getWriter()方法返回的PrintWriter对象非常相似,不同的是,out对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter。

从运行结果可以看出,尽管out.println语句位于response.getWriter().println语句之前,但它的输出内容却在后面。由此可以说明,out对象通过print语句写入数据后,直到整个JSP页面结束,out对象中输入缓冲区的数据(即:first)才真正写入到Serlvet引擎提供的缓冲区中,而response.getWriter().println语句则是直接把内容(即:second)写入Servlet引擎提供的缓冲区中,Servlet引擎按照缓冲区中的数据存放顺序输出内容。

out对象可以直接将数据写入Servlet引擎提供的缓冲区中,可以通过page指令中操作缓冲区的buffer属性来实现。

从运行结果可以看出,out对象输出的内容在response.getWriter().println语句输出的内容之前,由此可见,out对象中的数据直接写入了Servlet引擎提供的缓冲区中。此外,当写入到out对象中的内容充满了out对象的缓冲区时,out对象中输入缓冲区的数据也会真正写入到Serlvet引擎

2、request对象:

request对象常用方法 ①String getParameter(String name):根据页面表单组件名称获取请求页面提交数据 ②String[ ] getParameterValues (String name)    获取页面请求中一个表单组件对应多个值时的用户的请求数据 ③Enumeration getParameterNames( ):获取请求所有参数 ④getSession([boolean]):获取、创建会话 ⑤setAttribute(属性,属性值) :设置请求属性 ⑥getAttribute(属性) :获取请求属性

3、response对象:

response对象常用方法: void setContentType (String name):设置作为响应生成的内容的类型和字符编码 void sendRedirect (String name):发送一个响应给浏览器,指示其应请求另一个URL(重定向)

4、session对象:

session对象:Web 服务器为单个用户发送的多个请求创建会话,存储有关用户会话的所有信息。 是javax.servlet.http.HttpSession接口的实例。 session 对象最常用的方法有: setAttribute(String name,Object value)、getAttribute(String name)、getId()、invalidate()、removeAttribute(String name)

5、application对象:

作用在JSP页面所属的应用程序(类似上下文ServletContext),javax.servlet.ServletContext接口实例 application对象最常用的方法有: setAttribute(String name,Object value) 以键/值的方式,将一个对象的值存放到application中getAttribute(String name) 根据名称去获取application中存放对象的值

6、pageContext对象:

使用户可以访问页面作用域中定义的所有隐式对象,它的作用范围是在同一页面,是javax.servlet.jsp.PageContext 类的实例。

7、page对象:

page对象代表JSP页面正在运行所产生的类对象本身,只在JSP页面内使用。page对象本质上包含当前Servlet接口引用的变量,类似Java类中this 指针,是java.lang.Object的实例。

8、config对象:

存储在编译 JSP 页面的过程中创建的Servlet 的信息,是javax.servlet.ServletConfig 接口的实例, 提供了检索 Servlet 初始化参数的方法。

9、exception对象:

在JSP页面中,经常需要处理一些异常信息,可以通过exception对象来实现。exception对象是java.lang.Exception类的实例对象,它用于封装JSP中抛出的异常信息。exception对象只有在错误处理页面才可以使用,即page指令中指定了属性<%@ page isErrorPage=”true”%>的页面。

五、JSP的动作

1.什么是JSP的动作?

利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户请求重定向到另外的页面、为Java插件生成HTML代码。

2.JSP常用的动作有:

(1)<jsp:param>

(2) <jsp:include>

用来把指定文件(文本、HTML、JSP)插入正在生成的页面中,还可以向被加载的JSP文件传递参数。

语法格式如下:

<jsp:include  page="relativeURL"  flush="true"/>

<jsp:include page="fileName"  flush="true">    

<jsp:param  name="paramName"  value="paramValue"/> </jsp:include>

(3)<jsp:forward>

转发请求到另一个页面,在请求的过程中会连同请求的参数一起转发到目标页面。只有一个page属性,语法格式如下: <jsp:forward page="relativeURL"  />  或者 <jsp:forward page="fileName"">     <jsp:param  name="paramName"  value="paramValue"/> </jsp:forward>

(4)<jsp:useBean>

(5)<jsp:setProperty>

(6)<jsp:getProperty>

六、JSP中使用JavaBean

1.什么是JavaBean

是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类。 在JSP页面,用JavaBean来实现业务功能的扩展,使JSP页面干净简洁,易于维护。(减少页面对java代码嵌入)

一个标准的JavaBean组件需要遵循一定的编码规范: (1)它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的【缺省】构造方法。 (2)它提供公共的setter方法和getter方法让外部程序设置和获取JavaBean的属性。

2.使用JavaBean涉及的标签

(1)<jsp:useBean>:

用于在某个指定的域范围(pageContext、request、session、application)中查找一个指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实例化一个新的JavaBean对象并将它按指定的名称存储在指定的域范围中。

<jsp:useBean id=“  “  class=“    “ scope=“    “ type=“  “/>

id:Bean的变量名;

class:Bean的类路径,必须是严格的包名.类名;

type:指定父类或接口的类型;

scope:Bean的有效范围。

(2)<jsp:setProperty>

为Bean的属性赋值。

  • 指定属性名,为其赋值: <jsp:setProperty  name=“对象名” property=“属性名” value=“属性值”/> 其中:name后的对象名为:<jsp:useBean id=”对象名”>
  • 请求参数名与指定属性名相同: <jsp:setProperty  name=“id” property=“属性名”/> property指定Bean的属性名,而且Bean属性和request参数的名字应相同。
  • 利用param属性,把指定属性名设置为一个请求参数的值: <jsp:setProperty  name=“id” property=“属性名”  param=“请求参数名”/>
  • 所有请求参数名与bean属性名相同

<jsp:setProperty name=“id” property=“*”/>

(3)<jsp:getProperty>

获取Bean的属性值。

<jsp:getProperty  name=“对象名” property=“属性名”/>

其中:name后的对象名为:<jsp:useBean id=”对象名”>

七、EL标签

1.什么是EL标签

在jsp页面中,经常利用jsp表达式<%=变量或表达式%>来输出声明的变量以及页面传递的参数,当变量很多的时候,这样的表达显得很累赘,EL标签简化了表达式,很好的解决了这个问题。 EL标签的语法形式如下: ${参数名}

EL标签是在jsp2.0(Servlet2.3)以后才有的新特性,之前版本不支持; 如果在某个页面中禁止EL标签,可通过page指令设置: <%@page isELIgnored=”true” %>

2.EL标签的功能

(1)可以访问jsp中不同域的对象;

(2)可以访问JavaBean中的属性;

(3)可以访问集合元素;

(4)支持简单的运算符操作。

3.EL标签的隐式对象(11个)

(1)pageContext:与JSP中的pageContext对象相同,可以获取其它对象。

(2)与范围有关的隐含对象(4个):

pageScope、requestScope、sessionScope、applicationScope

它们基本上和JSP的pageContext、request、session和application一样,JSP中的4个对象除获取属性外,还可以有其它用途

(3)与输入有关的隐含对象(2个):

param:按名称存储请求参数单一值的Map类 paramValues:请求参数的所有值构成的String数组 例如: ${param.name} 相当于:request.getParameter(“name”) ${paramValues.hobby} 相当于:request.getParameterValues(“hobby”)

(4)与请求头有关的隐含对象(2个):

header:请求头参数值的Map类。例如:${header.host} header Values:请求头参数的所有值构成的 String 数组 (5)获取web应用程序初始参数的隐含对象: initParameter 例如:${initParam.userid} 相当于 String userid = (String)application.getInitParameter(“userid”); 用来获得名为userid的web上下文参数

(6)获取Cookie对象的隐含对象:

例如:要取得cookie中有一个名color的值,可以使用${cookie.color}来获得

八、JSTL标签

1.什么是JSTL标签

是由Apache的Jakarta小组开发的一个开源的JSP标准标签库,是一组与HTML标签相似但又比HTML标签强大的功能标签,编程人员可以通过它编写出动态的JSP页面。

在jsp页面中使用JSTL标签,需要使用taglib指令,例如引入核心库(core),格式如下:

<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>

2.JSTL标签的优点

①简化JSP和WEB程序的开发,本需要由大量的Java代码完成的功能,可以用少量的JSTL代码替代;

②JSTL可读性强,易于理解;

③利用JSTL标签编写的Web程序易于维护。

3.JSTL的使用方式

1)官网下载,将jstl.jar和standard.jar添加到项目中,如果需要Tomcat中所有项目都能使用JSTL,将两个jar包拷贝到Tomcat安装目录中的lib文件夹中;

(2)在pom.xml文件中添加依赖。

4.JSTL的标签库

(1)core标签库(核心标签库):

包括通用标签(输出标签)、流程控制标签和循环控制标签等;

core标签:用于显示数据的内容,功能与jsp表达式<%=表达式%>类似。

<c:out value=“…  “ escapeXml=“true|false” default=“缺省值”/>

<c:out value=“…  “ escapeXml=“true|false” >

   缺省值

</c:out>

c:set标签:用于在某个作用域范围中设置某个值,或者设置某个对象(JavaBean、Map)的属性。

<c:set var=“变量名” value=“…”  [scope=“page|request|session|application”]/>

c:remove标签:删除某个变量

<c:remove var=“变量名” [scope=“范围”]/>

c:if标签:用于if条件语句测试

<c:if test=“条件表达式” [var=“变量名”][scope=“范围”]/>

<c:choose>标签用于条件选择,它常和<c:when>以及<c:otherwise>一起使用,类似switch功能。
<c:forEach>标签可以对某一段标签体内容遍历多次或者遍历一个对象集合(Collection、Map、数组)。

<c:forEach [var=“变量名”]begin=“起始索引” end=“结束索引” [step=“步长”]>

     标签体

</c:forTokens>标签遍历一组由指定分隔符隔开的字符串,类似于Java中的split()方法。

<c:forTokens items=“迭代对象” delims=“分隔符”

  [var=“变量名”][varStatus=“迭代状态”][begin=“起始索引”]

   [end=“结束索引”] [step=“步长”]>

  标签体

</c:forTokens>

<c:catch>:用于异常捕获
<c:url>标签将URL格式化为一个字符串,然后存储在一个变量中
<c:import>标签提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL。

(2)fmt标签库:包括格式化、国际化标签等;

(3)fn标签库:函数标签库;

(4)XML标签库:关于xml操作的标签;

(5)SQL标签库:操作数据库的标签库。


http://www.kler.cn/a/291962.html

相关文章:

  • Redis性能优化——针对实习面试
  • 性能高于Transformer模型1.7-2倍,彩云科技发布基于DCFormer架构通用大模型云锦天章
  • FFmpeg源码:avio_read_partial函数分析
  • async 和 await的使用
  • 传奇996_24——变量lua
  • 【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)
  • 添加配置react组件路由具体步骤参考
  • 利用SSH加密实现的HTTP隧道分析与检测
  • 编译 ffmpeg 以支持AVS格式视频解码与解码
  • Chapter 06 axios使用指南
  • 【gtokentool】什么是数字货币?怎么使用?
  • 设计模式 代理模式(Proxy Pattern)
  • fast-voice-assistant
  • C++ 在变量前面加上(void)的作用
  • Jsoncpp的安装与使用
  • 【免越狱】iOS任意版本号APP下载
  • Apache Spark简介
  • 振动分析-26-频域分析之深入理解功率谱和功率谱密度的计算过程
  • 全国大学生数学建模竞赛全国奖项评阅工作规范(2023年修订稿)
  • 干货分享|分享一款免费开源的动态壁纸软件 Lively Wallpaper
  • LeetCode491 非递减子序列
  • Docker部署项目时的服务端口设置——给容器添加新端口映射
  • Android Studio gradle下载太慢了!怎么办?(已解决)
  • Leetcode每日刷题之155.最小栈
  • FPGA——VGA协议
  • 【Redis】深入解析 Redis 事务:特性、操作及其与 MySQL 事务的区别