JavaWeb学习----JSP脚本元素、指令元素、动作元素
【声明】
欢迎转载,但请保留文章原始出处→_→
生命壹号:http://www.cnblogs.com/smyhvae/
文章来源:http://www.cnblogs.com/smyhvae/p/4048033.html
【正文】
我们在上一篇文章中学习到了Tomcat的使用和工程文件部署,并明白了jsp文件是怎样发布到服务器上并最终显示出来:JavaWeb学习(一)----JSP简介及入门(含Tomcat的使用)
如果在本文中有不明白的地方,请先回顾上一篇文章。
现在来学习一下JSP的基本语法知识。
一、JSP脚本元素
- 1、声明(declaration)
- 2、表达式(express)
- 3、脚本(Scriplets)
“声明”用的少,一般是用“表达式”和“脚本”。
1、声明(declaration):用于在JSP 中声明合法的变量和方法
语法:
<%! 代码内容 %>
举例:
<%!
//JSP声明片段: 注意,不建议在JSP页面上定义变量或方法,只是不建议定义
int i = 10;
String name = "smyhvae";
public void printName(){
System.out.println(name);
} %>
2、表达式(expression):计算该表达式,将其结果转换成字符串插入到输出中
语法:
<%= 表达式 %>
举例:
Current time: <%= new java.util.Date() %>
运行后,网页显示效果如下:

3、脚本(Scriplets):位于<%和%>之间的代码,它是合法的Java代码
语法:
<% 程序代码,一行或多行 %>
举例:
<%
for (int i=0;i<10,i++) {
… …
}
•%>
二、JSP指令元素
- 1、page 指令
- 2、include 指令
- 3、taglib 指令
1、page 指令:page 指令指明与JSP容器的沟通方式
page 指令里的常用属性如下:
<%@ page
language=“Java”
import=“importList” 导入java类库(唯一可以重复使用的属性,其他属性最多只能使用一次)
contentType=“contentTyepInfo” 内容的类型
session=“true|false”
isThreadSafe=“true|false” 是否线程安全,默认为true
info=“infoText”
errorPage=“errorPageUrl” 指定错误页面:如果发生异常,则会跳到这个错误页面
isErrorPage=“true|false” 指定当前这个页面是否为错误页面。如果其他的页面发生错误,就会调到这里来。
%>
注意:只有import属性可以重复使用,如果重复使用,则必须出现在命令的第一行。
新建的jsp文件中,第一句话就用到了page命令:

2、include指令:
include指令是在JSP页面被转换成Servlet之前将指定的文件包含进来。这种特性允许你创建可重用的导航栏、联系人信息部分、页面计数等。(重复利用的理解:比如说,可能有多页面都需要用到某个标题页面,就可以把这个公共的标题页面使用include指令包含进来,然后在其他的页面中直接导入标题页面就行了)
格式:
<%@include file="fileURL"%>
过程:在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。
举例:
新建一个title.jsp文件:(红框部分是我添加的代码)

继续新建一个content.jsp文件:(红框部分是我添加的代码)

上方的核心代码是第10行:导入了title.jsp这个标题文件。运行后,效果如下:

注意:include只能是静态包含,只能包含静态的资源,编译后形成一个文件。其实,title.jsp和content.jsp合起来只形成一个.java文件,最后编译为一个.class文件。如下图所示:

3、taglib 指令:
用于导入标签库,至于标签库的概念,后面将会讲到,暂时略过。
三、JSP动作元素
主要包含以下部分:
- <jsp: include>
- <jsp: param>/<jsp: params>
- <jsp: forward>
- <jsp: useBean>
- <jsp: setProperty>和<jsp:getProperty>
1、<jsp: include>:在用户请求时包含文件(动态包含)
过程:包含和被包含的文件各自编译,当用户请求页面时,才动态地包含其它文件
举例:
新建include.jsp文件,作为被包含的内容:(红框部分是我添加的代码)

新建index.jsp文件,作为主界面:(红框部分是我添加的代码)

上方第12行中, flush="true"表示页面可以实时刷新。
运行后,效果如下:

Include指令和Include动作的比较:
- 指令执行速度相对较快,灵活性较差(只编译一个文件,但是一旦有一个文件发生变化,两个文件都要重新编译)
- 动作执行速度相对较慢,灵活性较高
在使用时,如果是静态页面,则使用Include指令;如果是动态页面,则使用Include动作。
2、<jsp: param>/<jsp: params> 传递参数
该动作元素不能单独使用,可以配合include标签使用。现在来看一下页面是如何给被包含的页面传递参数的。
举例:
在上面的index.jsp代码中进一步添加:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body> <h1>包含页面</h1>
<jsp:include page="include.jsp" flush="true">
<jsp:param value="smyhvae" name="name"/>
</jsp:include>
</body>
</html>
第13行是进一步添加的,意思是往其他的页面传递参数name。其中键为name,值为smyhvae。
紧接着在上面的include.jsp代码中进一步添加:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- 注释 --%>
<%
out.println("我是被包含的内容"); //request表示请求对象
String name = request.getParameter("name"); //获取index页面中name里面的值
out.println("<br/>"+name); //<br/>表示在页面中换行
%>
</body>
</html>
15、16行是进一步添加的。表示获取index.jsp页面中传递过来的参数name。
运行后,效果如下:

3、<jsp: forward> 转发用户请求
作用:服务器端的跳转(转发带请求的数据,URL地址不变)
举例:工程文件结构如下:

其中,index.jsp负责发送数据,receive.jsp负责转发数据,forward.jsp负责接收数据。
index.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>主页面</title>
</head>
<body> <h1>发送请求到页面receive.jsp,让receive.jsp负责转发给forward.jsp</h1>
<form action="receive.jsp">
<input type="text" name="email"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
14行的submit表示提交表单。 12行的action表示动作,意思是说,要将这个表单提交给receive.jsp页面。
receive.jsp代码如下:(核心代码是第10行,表示转发给forward.jsp页面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>我负责接收index.jsp的数据,并转发给forward.index</title>
</head>
<body>
<jsp:forward page="forward.jsp"></jsp:forward>
</body>
</html>
forward.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>我是forward.jsp,将数据转发给我</title>
</head>
<body>
<h2>我是forward.jsp,最终将数据转发给我</h2>
<%
String email = request.getParameter("email");
out.println(email);
%>
</body>
</html>
运行后,效果如下:

我们在上方的输入框中输入文本,点击“提交”按钮,跳到如下界面:(注意看url)

4、<jsp: useBean> 创建一个Bean实例并指定它的名字和作用范围
JavaBean:简单说,它就是一个Java类,这个类可以重复地使用。
它必须遵循以下规定:
- 是一个公有类。
- 具有一个公有的不带参数构造方法。
- 每个属性必须定义一组getXXX()和setXXX()方法, 以便读取和存储其属性值。
符合上述规定的JavaBean,将拥有:事件处理、自省机制、永续储存等特性。
5、<jsp: setProperty ···/>和<jsp: getProperty ···/>
- <jsp: setProperty>:设置Bean的属性值
- <jsp: getProperty>:获取Bean的属性值,用于显示在页面中
举例:新建Test03工程。工程结构如下:(这里将讲到如何在jsp文件中获取java文件中类的属性值)

新建Java文件:创建一个Person类,放入两个参数
package com.vae.bean;
public class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
新建index.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>方式一:useBean动作元素(不推荐)</h2>
<%--创建对象 调用默认的构造方法,要求类必须有默认的构造方法--%>
<jsp:useBean id="person" class="com.vae.bean.Person">
</jsp:useBean>
<%--设置 对象的属性值--%>
<jsp:setProperty property="name" name="person" value="生命壹号" />
<jsp:setProperty property="age" name="person" value="22" />
<%--获取对象的属性值 --%>
<jsp:getProperty property="name" name="person" />
<jsp:getProperty property="age" name="person" /> <h2>方式二:采用片段的方式,即插入Java代码(推荐使用)</h2>
<%
com.vae.bean.Person p = new com.vae.bean.Person();
p.setName("生命贰号");
p.setAge(22);
p.getName();
p.getAge();
%>
</body>
</html>
上面的方式一就是我们所需要举的例子。
12行:id指的是实例化的对象,class就是Java类。这一行相当于 Person person = new Person();
15行:name是对象,property是属性,value是属性的值。
方式一相当于在jsp文件中创建一个类,只不过是以标签的形式,然后进一步通过getProperty获得类中的属性值(18、19行)。此方法不是很常用,我们可以采用方式二:片段的方式,即插入Java代码来实现(21至28行)。
运行效果如下:

关于JSP的进一步学习,将在以后讲到。
JavaWeb学习----JSP脚本元素、指令元素、动作元素的更多相关文章
- Jsp语法、指令及动作元素
一.JSP的语法 1.JSP的模板元素:(先写HTML) 就是JSP中的那些HTML标记 作用:页面布局和美化 2.JSP的Java脚本表达式: 作用:输出数据到页面上 语法:<%=表达式%&g ...
- JSP学习笔记(二):动作元素
与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的. 利用JSP动作可以动态地插入文件.重用JavaBean组件.把用户重定向到另外的页面.为Java插件 ...
- JavaWeb学习----JSP简介及入门(含Eclipse for Java EE及Tomcat的配置)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象
JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...
- JSP学习笔记(1)——Jsp指令、动作元素和内置对象
简单来说,javaweb技术就是让服务器端能够执行Java代码,之后返回数据给客户端(浏览器)让客户端显示数据 jsp页面中可以嵌套java代码(java小脚本)和嵌套Web前端(html,css,j ...
- Java遇见HTML——JSP篇之JSP指令与动作元素
一.include指令(如:<%@include file="..."%> ) 示例: Date.jsp <%@page import="java.te ...
- JSP指令与动作元素
include指令 语法:<%@ include file="URL" %> 其中,URL表示一个要包含的页面. include动作(是一个动作标签) 语法:<j ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- jsp中的指令与动作
JSP中的三种命令指令分别是page.include.taglib JSP中的动作元素包括:include.forward.useBean.getProperty.setProperty.plugin ...
随机推荐
- S2 易买网总结
易买网项目总结 --指导老师:原玉明 不知不觉,又到了S2结业的时间了,S1的项目KTV项目还历历在目.一路走来,感觉时间过的好快,我们离就业也越来越近... 展示: 1.主页面(首页) 01.商品分 ...
- ASP.NET Web API涉及到的上下文
1.表示请求的上下文:HttpRequestContext; 2.表示HttpController:HttpControllerContext; 3.表示Action方法:HttpActionCont ...
- [性能] Bean拷贝工具类性能比较
Bean拷贝工具类性能比较 引言 几年前做过一个项目,接入新的api接口.为了和api实现解耦,决定将api返回的实体类在本地也建一个.这样做有两个好处 可以在api变更字段的时候保持应用稳定性 可以 ...
- C# 循环语句 for循环
循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变.for(初始条件;循环条件;状态改变){ 循环体} 给出初始条件,先判断是否满足循环条件,如果不满足条件则跳过for语句,如 ...
- 使用Apache ab进行压力测试(参数说明)
我们一般会使用Apache自带的ab来对项目进行压力测试,看项目的执行情况如何. 我们可以使用 ab -v 来查看ab的详细参数使用方法. [root@node234 bin]# ./ab -v ab ...
- Web安全开发注意事项
1.sql注入:这个很常规了,不要拼字符串以及过滤关键字都可以防住,需要注意的是,Cookie提交的参 数也是可以导致注入漏洞的.2.旁注:就是说在保证自己的程序没问题的同时,也要保证同台服务器的其他 ...
- Force.com微信开发系列(五)自定义菜单进阶及语音识别
在上文里我们介绍了如何通过Force.com平台里为微信账号添加自定义菜单,本文里我们将进一步介绍如何查询菜单以及删除菜单的相关知识,最后会介绍微信平台如何进行语音识别的相关技术. 查询菜单 与创建菜 ...
- 我的Fitbit Force手环使用体验
2013年底,从淘宝上代购了Fitbit Force二代,下手前也对比了当时的几个类似产品,好像记得Nike新款暂时在国内还买不到,就买下了这个,1020元,时至今日好像只需六.七百了.当时看中它的主 ...
- 安卓开发_浅谈OptionsMenus(选项菜单)
Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开 ...
- 关于Kb/s,KB/s的一些知识
我们常见的有KB/s和Kb/s两种 1,Kb/s也就是Kbps.这里面小写的b是bit(比特)的缩写,是位的意思.一个位就是二进制的0或者1.一般代表传输单位,p就是/号,s是秒.bps就是b/s=比 ...