一、jsp概述


JSP是java server page的缩写,其本质是一个简化的servlet,是一种动态网页技术标准。jsp页面是在HTML页面中嵌入java程序段,使用jsp开发的应用程序可以跨平台。

二、jsp基本语法


2.1 jsp表达式

jsp表达式用于向页面输出信息,语法格式如下:

<%= 表达式 %>

如:<%= 5+6 %>
<%与=之间不能有空格,=与后面的表达式之间可以有空格。

2.2 jsp声明标识

声明标识用语在jsp页面中定义全局的变量或者方法,通过声明标识定义的变量和方法可以被整个jsp页面访问。语法格式如下:

<%!声明变量或者方法的代码%>

<%!String str = "test";%>
<%与!之间不能有空格,!与其后面的代码之间可以有空格。

2.3 jsp代码段

代码片段就是嵌在jsp页面中的java代码或脚本代码,会在页面请求的处理期间被执行,java代码可以实现定义变量、流程控制等功能;脚本代码可以通过使用jsp内置对象在jsp页面输出内容、处理请求和响应、访问session等,代码片段的语法格式如下:

<% java代码或者脚本代码 %>

2.4 jsp注释

2.4.1 HTML注释

HTML注释格式:

    <!--  html注释-->

html注释不会显示在网页中,在浏览器中查看源代码的时候可以看到注释信息。

2.4.2 代码片段注释

因为代码片段即为java代码或者脚本代码,代码片段的注释和java语法一样,单行注释写在//之后,多行注释写在/* */ 之间,文档提示注释写在/***/之间。

//单行注释/*多行注释第一行多行注释第二行
*//**文档注释
*/

2.4.3 隐藏注释

html注释在查看网页源代码的时候可以看到,所以严格来说这种注释并不安全,jsp提供的隐藏注释在浏览器和查看源码的时候都看不到,安全性更高。
隐藏注释写在<%–与%>之间:

<%--jsp注隐藏释 --%>

2.4.4 动态注释

在html注释中嵌入jsp代码片段可以构成动态的html注释文本。
示例:

<!-- tody is <%=new Date()%>.动态注释 -->

示例代码

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*,java.util.ArrayList"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hello world</title>
</head>
<body><h1>jsp基本语法</h1><!--  html注释--><!-- tody is <%=new Date()%>.动态注释 --><%--jsp注隐藏释 --%><%!String str = "test"; //jsp声明%><%/**文档注释*///单行注释/*多行注释1多行注释2*/String hello = "hello world";out.println(hello + "<br>");for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {out.println(i + "*" + j + "=" + j * i + "&nbsp;&nbsp;&nbsp;&nbsp;");}out.println("</br>");}out.println(str);%>
</body>
</html>

浏览器访问:

三、jsp的3个编译指令


jsp编译指令是通知jsp引擎的消息,它不直接生成输出,编译指令有默认值。常见的编译指令有3个:

  • page指令:该指令是针对当前页面的指令。
  • include指令:用于指定包含另一个页面。
  • taglib指令:用于定义和访问自定义标签。
    编译指令的语法格式如下:
<%@ 编译指令名 属性名1="属性值" 属性名2="属性值" ...  %>

3.1 page指令

pag指令常用属性

属性 定义
language =“语言” 主要指定JSP 容器 要用什么语言来编译JSP页。JSP 1.2 规范中指出,目前只可以使用Java 语言,不过未来不排除增加其他语言,如C、C++、Perl 等等。默认值为Java语言
extends = “基类名” 主要定义此JSP 网页产生的Servlet 是继承哪个父类
import= “包名” 定义此JSP 网页可以使用哪些Java类库
session=”true或false” 决定此JSP 网页是否可以使用session 对象。默认值为true
buffer=”none或size in kb” 决定输出流(output stream) 是否有缓冲区。默认值为8KB 的缓冲区
autoFlush=”true 或false” 决定输出流的缓冲区是否要自动清除,缓冲区满了会产生异常(Exception)。默认值为true
isThreadSafe=”true 或 false” 告诉JSP 容器,此JSP 网页是否能同时处理多个请求。默认值为true,如果此值设为false, 转义生成的Servlet会实现SingleThreadModel接口。
info =”text” 表示此JSP 网页的相关信息
errorPage=”error_url” 表示如果发生异常错误时,网页会被重新指向指定的URL
isErrorPage=”true或false” 表示此JSP Page 是否为专门处理错误和异常的网页
contentType = “ctinfo” 表示MIME 类型和JSP 网页的编码方式,其作用相当于HttpServletResponse接口的setContentType()方法

3.2 include指令

include指令可以将一个外部文件嵌入到当前jsp文件中,同时解析这个页面中的jsp语句。include命令既可以包含jsp页面也可以包含静态文本。编译指令语法如下:

<%@ include file="要导入的jsp页面或文本文件" %>

如:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>include</title>
</head>
<body><%@ include file="header.jsp"%><%@ include file="text.txt"%><%@ include file="footer.jsp"%>
</body>
</html>

使用include指令注意事项:
1.file名不能为依变量,下面的例子是错误的

<%! String url="header.jsp" %>
<%@ include="<%=url %>"

2.file名后面不能传入参数,下面的例子是错误的

<%@ include file="header.jsp?username=abc" %>

3.file的路径是相对于此jsp的路径。

3.3 taglib指令

taglib指令用于引入一些特定的标签库,语法格式:

<%@ taglib prefix="tagPrefix" uri="tagLibraryURI" %>

如使用struts标签库:

<%@ taglib prefix="s" taglib="/struts-tags" %>

prefix=”tagPrefix “用于定制标记的前缀,jsp, jspx, java, javax, servlet, sun, 和sunw已被sun公司保留。uri=”tagLibraryURI”统一资源标记库,制定一个特定的标记库,可以是相对路径,也可以是绝对路径。

四、jsp的7个动作指令

4.1forward指令

forward指令用于将页面转发到另外的页面,可以是html页面、jsp页面、容器中的servlet.
语法如下:

<jsp:forward page="目标页面地址"></jsp:forward>

如果转发的时候需要传递参数可以使用<jsp:param></jsp:param>指令进行设置。
比如,访问index.jsp页面时自动转发至login.jsp,需要把username和password传递过去:
index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<jsp:forward page="login.jsp"><jsp:param value="yaopan" name="username" /><jsp:param value="123456" name="password" />
</jsp:forward>
<%--mac上按住comment键(windows下按住ctrl键),再点击login.jsp  forword以下的代码不会被执行 --%>
网站主页

在login.jsp中可以使用getParameter方法获取传入的参数值:

<%String name=request.getParameter("username");String pwd=request.getParameter("password");out.println(name);out.println("<br>");out.println(pwd);
%>

执行forword指令时用户请求的地址没有发生变化,页面内容被forward目标替代。

4.2 include指令

include指令用于包含某个页面,但不会导入被include页面的编译指令。可以通过param指令传递参数:
新建一个index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<jsp:include page="head.html"></jsp:include>
<jsp:include page="body.jsp"><jsp:param value="#1d99f6" name="bgcolor"/>
</jsp:include>
</html>

body.jsp

<body bgcolor="<%=request.getParameter("bgcolor")%>">
</body>

4.3useBean、setProperty、getProperty指令

这三个指令与javaBean相关,useBean用于在jsp页面中初始化一个Java实例;setProperty为javaBean实例的属性赋值;getProperty属性用于输出javaBean实例的属性。
如果jsp页面中需要重复使用某段代码,可以把这段代码定义成java方法,然后多个jsp页面调用该方法达到页面复用的效果。
useBean的语法格式如下:

<jsp:useBean id="beanID" class="java包名.类名" scope="page|request|session|application"></jsp:useBean>

如:在ucas.ac.cn.jspstudy包下创建一个Student类,有name、age、stuId三个属性和相应的setter和getter方法。在jsp页面中创建javaBean实例:

<%--创建Student对象,对象名为stu1 --%>
<jsp:useBean id="stu1" class="ucas.ac.cn.jspstudy.Student" scope="page"></jsp:useBean>

setProperty方法用于为javaBean实例的属性赋值:

<%--给stu1的name属性赋值 --%>
<jsp:setProperty property="name" name="stu1" value="张三"/>
<%--给stu1的age属性赋值 --%>
<jsp:setProperty property="age" name="stu1" value="20"/>

getProperty用于输出javaBean实例的属性值:

<%--输出stu1的name值 --%>
<jsp:getProperty property="name" name="stu1"/>
<%--输出stu1的age值 --%>
<jsp:getProperty property="age" name="stu1"/>

4.4plugin指令

plugin主要用于下载服务器端的javaBean或applet到客户端执行,现在很少使用。

4.5param指令

param指令用于设置参数值,该指令本身不能单独使用,单独的param指令没有意义,配合以下三个指令使用:

  • jsp:include
  • jsp:forward
  • jsp:plugin

五、jsp脚本中的9个内置对象

5.1 application对象

jsp、servlet之间不能相互调用,为了解决jsp和servlet之间数据交换的问题,web服务器提供了四个对象,分别是application、session、request、page。放入application对象中的数据对整个Web应用有效,一旦jsp、servlet将数据放入application对象之中,该数据可以被该应用下其它jsp、servlet访问。

5.2 config对象

config对象代表当前jsp配置信息,但jsp页面通常无需配置,该对象在jsp页面中较少使用,在servlet中使用较多。

5.3 exception对象

exception对象是Throwable的实例,代表jsp脚本中产生的错误和异常,是jsp页面异常机制的一部分。把page指令的isErrowPage属性设置为true时可以访问exception内置对象。

5.4 out对象

out对象是javax.servlet.jsp.JspWriter的实例,代表jsp的输出流,永于输出内容形成html页面。
out对象一些方法:

  • out.println():输出完成后会换行,换行效果在页面中不显示只在源码中显示
  • out.print():输出后不换行
  • out.getBufferSize() :输出缓冲区大小
  • out.getRemaining() :输出剩余缓冲区大小
  • out.clear():清空缓冲区,不将数据发送至客户端
  • out.clearBuffer():将数据发送至客户端,再清空缓冲区
  • out.flush():输出缓冲区内容
  • out.close():关闭输出流

5.5page对象

代表该页面本身,通常没有太大用处。

5.6 pageContext对象

代表页面上下文,主要用于jsp之间的共享数据,使用pageContext对象可以访问page、request、session、application范围的变量。

5.7 request对象

request对象是jsp中的重要对象,每个对象封装着一次用户请求,并且所有对请求参数都被封装在request对象中,request对象是获取用户请求参数的重要途径。request对象的一些方法:

  • request.getMethod():获取请求的方法名,如get,post.
  • request.getRequestURI():获取请求资源名.如请求访问:/jspstudy/08/request.jsp
  • request.getProtocol():获取请求使用的协议.如:HTTP/1.1
  • request.getServerName():获取请求使用的服务器,如:localhost.
  • request.getServerPort():获取请求使用的服务器端口,如:8080
  • request.getRemoteAddr():获取客户端的ip地址.
  • request.getRemoteHost():获取客户端主机.
  • request.getParameter():获取传递过来的参数值.
  • request.getParameterValues():请求参数有多个值时,该方法返回多个值组成的数组.
  • request.setAttribute():

测试代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>request方法</title>
</head>
<body><form action="" method="post">username:<input type="text" name="username"><br/><input type="submit">请求方法名:<%=request.getMethod() %><br/>请求的资源:<%=request.getRequestURI() %><br/>请求使用的协议:<%=request.getProtocol() %><br/>请求使用的服务器:<%=request.getServerName() %><br/>请求使用的服务器端口:<%=request.getServerPort() %><br/>客户端的IP地址:<%=request.getRemoteAddr() %><br/>客户端主机:<%=request.getRemoteHost() %><br/>表单提交过来的值:<%=request.getParameter("username") %><br/>
</form>
</body>
</html>

输出:

请求方法名:POST
请求的资源:/jspstudy/08/request.jsp
请求使用的协议:HTTP/1.1
请求使用的服务器:localhost
请求使用的服务器端口:8080
客户端的IP地址:0:0:0:0:0:0:0:1
客户端主机:0:0:0:0:0:0:0:1
表单提交过来的值:test

5.8 response对象

response对象用于服务器对客户端的响应,大部分时候使用out对象向页面输出,但是out对象时JspWriter对象的实例,JapWriter时Writer的字类,Writer是字符流,因此out对象无法输出非字符内容。jsp页面需要输出图片、pdf文档、excel等非字符对象时需要使用response作为响应输出.response还可以用于重定向,向客户端增加cookie.

5.9 session对象

session对象代表一次用户会话,一次用户会话的含义是:从客户端连接服务器开始,到客户端与服务器断开为止,这个过程就是一次会话。
session通常用于跟踪用户的会话信息,如判断用户是否登录,购物车中跟踪用户购买的商品。
session范围的属性可以在多个页面点跳转之间共享,一旦关闭浏览器,session结束,session范围内的属性就会全部丢失。

JSP基本语法、3个编译指令、7个动作指令、9个内置对象相关推荐

  1. JSP→基本语法/静态内容/指令/动作/表达式/小脚本(Scriptlet)/声明/注释、JSP页面声明周期、代码样例、九大隐式内置对象及方法代码样例

    JSP(全称JavaServer Pages)是一种动态网页技术标准. 指令 注释 小脚本 声明 表达式 JSP页面声明周期 九九乘法表样例 九大隐式内置对象 out get与post请求方式区别 r ...

  2. JSP的内置对象详解

    JSP内置对象 文章目录 JSP内置对象 前言 一.out对象 1.原理 2. 向客户端输出数据 二.page对象 1.范围 三.pageContext 对象 1.获取内置对象 2.存储数据 四.re ...

  3. JavaWeb第三讲 JSP内置对象、基本动作指令、常见编译指令及四大作用域

    JSP内置对象.基本动作指令.常见编译指令及四大作用域 (一) JSP工作原理 当一个jsp页面第一次被访问的时候,jsp将执行以下三个步骤,之后的访问速度会因为class文件已经生成而大大提高,当j ...

  4. 第4章 JSP语法、内置对象

    第4章 JSP语法.内置对象 关于Spring Boot+Vue全栈开发实战(三方面)前端 全栈 Spring Boot JSP概述 4.1.1 什么是JSP(Java Server Page) 4. ...

  5. jsp 将页面中的值导入java中_JavaWeb - JSP:概述和语法,内置对象,JavaBean 组件,MVC 设计模式

    JSP 的概述 概念 JSP 是 Java Server Pages 的简称,跟 Servlet 一样可以动态生成 HTML 响应, JSP 文件命名为 xxx.jsp. 与 Servlet 不同,J ...

  6. JAVAWEB开发之Session的追踪创建和销毁、JSP详解(指令,标签,内置对象,动作即转发和包含)、JavaBean及内省技术以及EL表达式获取内容的使用

    Session的追踪技术 已知Session是利用cookie机制的服务器端技术,当客户端第一次访问资源时 如果调用request.getSession() 就会在服务器端创建一个由浏览器独享的ses ...

  7. JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用...

    Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...

  8. jsp输出金字塔_实验二 JSP语法及内置对象.doc

    实验二 JSP语法及内置对象 燕山大学经济管理学院 JSP编程技术 实验指导书 经济管理学院电子商务系 2011年5月 实 验 说 明 <JSP编程技术>JSP(Java Server P ...

  9. jsp是在html中添加什么作用域,JSP九个内置对象 四大作用域 动作指令

    九个内置对象: 1.application:javax.servlet.ServletContext的实例,代表JSP所属的web应用本身,常用的方法有getAttribute(). 2.config ...

最新文章

  1. 炫酷,SpringBoot+Echarts实现用户访问地图可视化(附源码)
  2. WriteFile和GetSystemDirectory
  3. [转]面试官,不要再问我三次握手和四次挥手
  4. python统计词频_Python统计四六级考试的词频
  5. 【LeetCode笔记】70. 爬楼梯(Java、动态规划)
  6. ajax请求上传数组
  7. 安装和部署企业程序库
  8. 手把手教你用Python实现人脸识别,辨别真假!
  9. 计算机课堂小游戏活跃气氛,适合小学生在课堂上玩的游戏,简单有趣活跃课堂气氛...
  10. 探索性测试ET(Exploratory Test)
  11. Bzoj 4173 数学
  12. P2495 [SDOI2011]消耗战(虚树+DP)
  13. ubuntu查看实时网速
  14. 【《游戏引擎架构》提炼总结】(一)游戏是什么,游戏引擎架构导论
  15. 微服务时代之2017年五军之战
  16. 制作3D游戏时如何避免或减轻玩家的晕3D现象?
  17. 密码锁 Locker
  18. Ubuntu图形界面升级方法
  19. STEP 7中的编程语言介绍
  20. 主流蓝牙BLE控制芯片详解(1):TI CC2540

热门文章

  1. 判断是否保持函数依赖
  2. Windows命令:Net使用详解
  3. C#Base64编码
  4. Django中app的model相互引用问题
  5. 验证身份证号是否正确,计算身份证号最后一位
  6. 支持语音记事的便签怎么将声音文件转文字保存
  7. DBSCAN聚类算法原理及图解
  8. canvas scale()画布缩放的使用
  9. Flutter第一部分(UI)第二篇:在Flutter中构建布局
  10. 字符数组 字符插入(c语言)