JSP基本的语法、3个编译指令、7个动作指令、9个内置对象
一、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 + " ");
}
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主要用于下载server端的javaBean或applet到client运行。如今非常少使用。
4.5param指令
param指令用于设置參数值,该指令本身不能单独使用,单独的param指令没有意义,配合以下三个指令使用:
- jsp:include
- jsp:forward
- jsp:plugin
五、jsp脚本中的9个内置对象
5.1 application对象
jsp、servlet之间不能相互调用。为了解决jsp和servlet之间数据交换的问题,webserver提供了四个对象,各自是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():清空缓冲区,不将数据发送至client
- out.clearBuffer():将数据发送至client,再清空缓冲区
- 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():获取请求使用的server,如:localhost.
- request.getServerPort():获取请求使用的serverport。如:8080
- request.getRemoteAddr():获取client的ip地址.
- request.getRemoteHost():获取client主机.
- 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/>
请求使用的server:<%=request.getServerName() %><br/>
请求使用的serverport:<%=request.getServerPort() %><br/>
client的IP地址:<%=request.getRemoteAddr() %><br/>
client主机:<%=request.getRemoteHost() %><br/>
表单提交过来的值:<%=request.getParameter("username") %><br/>
</form>
</body>
</html>
输出:
请求方法名:POST
请求的资源:/jspstudy/08/request.jsp
请求使用的协议:HTTP/1.1
请求使用的server:localhost
请求使用的serverport:8080
client的IP地址:0:0:0:0:0:0:0:1
client主机:0:0:0:0:0:0:0:1
表单提交过来的值:test
5.8 response对象
response对象用于server对client的响应,大部分时候使用out对象向页面输出。可是out对象时JspWriter对象的实例,JapWriter时Writer的字类。Writer是字符流,因此out对象无法输出非字符内容。jsp页面须要输出图片、pdf文档、excel等非字符对象时须要使用response作为响应输出.response还能够用于重定向。向client添加cookie.
5.9 session对象
session对象代表一次用户会话。一次用户会话的含义是:从client连接server開始。到client与server断开为止,这个过程就是一次会话。
session通经常使用于跟踪用户的会话信息,如推断用户是否登录。购物车中跟踪用户购买的商品。
session范围的属性能够在多个页面点跳转之间共享。一旦关闭浏览器,session结束。session范围内的属性就会所有丢失。
JSP基本的语法、3个编译指令、7个动作指令、9个内置对象的更多相关文章
- jsp详解(3个指令、6个动作、9个内置对象、11个隐式对象)
jsp概述SP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP实际上就是Servlet. jsp=html+jav ...
- JavaWeb(三)JSP之3个指令、6个动作、9个内置对象和4大作用域
前言 前面大概介绍了什么是JSP,今天我给大家介绍一下JSP的三个指令.6个动作以及它的9大内置对象.接下来我们就直接进入正题 一.JSP的3个指令 JSP指令(directive)是为JSP引擎而设 ...
- JSP JSP工作原理 JSP语法 JSP声明 JSP注释 JSP指令 jsp九大隐式/内置对象
1 什么是JSP 1)为什么说,Servlet是一个动态Web开发技术呢? Servlet是基于服务端的一种动态交互技术, HttpServletRequest表示客户端到服务端的 ...
- 二、JSP的3个编译指令,7个动作指令,9个内置对象
JSP 3个编译指令 1) page指令(基本不需要用到,使用默认即可) 主要属性: 1.Language:指定脚本所采用的语言类型,现在只支持java 2.Extends:定义当前jsp产生的se ...
- JSP三个指令及9个内置对象
注:本文编写方便自己以后用到时查阅 三大指令:include. page.taglib include指令: 作用: 在当前页面用于包含其他页面 语法: <%@include file=&qu ...
- JavaWeb学习笔记--2.jsp指令元素、动作元素、内置对象
目录: 一.指令 1.1 page指令 :page指令有13种属性 1.2 include指令:include指令有1种属性,为file.(注意<%@ include%>和<jsp: ...
- JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象
Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...
- JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用
Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...
- JSP学习笔记(1)——Jsp指令、动作元素和内置对象
简单来说,javaweb技术就是让服务器端能够执行Java代码,之后返回数据给客户端(浏览器)让客户端显示数据 jsp页面中可以嵌套java代码(java小脚本)和嵌套Web前端(html,css,j ...
随机推荐
- Ajax 的概念及过程?Ajax 的交互模型?同步和异步的区别?如何解决跨域问题?
Ajax 是什么: 1) 通过异步模式,提升了用户体验 2) 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用 3) Ajax 在客户端运行,承担了一部分本来由服务器承担的工 ...
- wikioi 1294 全排列 dfs
1294 全排列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个n, 请输出n的所有全排列 输入描述 Inpu ...
- PAT甲级1111. Online Map
PAT甲级1111. Online Map 题意: 输入我们当前的位置和目的地,一个在线地图可以推荐几条路径.现在你的工作是向你的用户推荐两条路径:一条是最短的,另一条是最快的.确保任何请求存在路径. ...
- ASP.NET 构建高性能网站 第6篇
内存问题概述 和CPU一样,内存也是一个直接影响服务端性能的重要的硬件资源. 一般来说,如果服务端内存不足,从导致以下两个问题产生: 1. 导致服务端把一些原本要写到内存中的数据,写到硬盘 ...
- Maven使用(转)
说明:文章转自http://www.cnblogs.com/JeffreySun/archive/2013/03/14/2960573.html 创建project 先去官方网站下载一个最新版本htt ...
- solaris 10系统配置工具
bash-3.2# prtdiag 报告一般系统信息 System Configuration: VMware, Inc. VMware Virtual Platform BIOS Configura ...
- SQLite 客户端管理工具
SQLite 客户端管理工具 SQLite Expert Personal 3.5.79.2499 下载地址:http://www.onlinedown.net/soft/117987.htm SQL ...
- Redux-saga学习笔记
概述 Redux-saga在Redux应用中扮演’中间件’的角色,主要用来执行数据流中的异步操作.主要通过ES6中的generator函数和yield关键字来以同步的方式实现异步操作. 基本用法: 使 ...
- DI容器Ninject在管理接口和实现、基类和派生类并实现依赖注入方面的实例
当一个类依赖于另一个具体类的时候,这样很容易形成两者间的"强耦合"关系.我们通常根据具体类抽象出一个接口,然后让类来依赖这个接口,这样就形成了"松耦合"关系,有 ...
- restful api安全验证问题
没有绝对的安全,这个话题很深, 下文都是自己的一些理解,水平有限,如有勘误,希望大家予以指正. 由于 RESTful Api 是基于 Http 协议的 Api,是无状态传输,所以 只要和用户身份有关的 ...