JavaWeb学习笔记--2.jsp指令元素、动作元素、内置对象
目录:
一.指令
1.1 page指令 :page指令有13种属性
1.2 include指令:include指令有1种属性,为file。(注意<%@ include%>和<jsp:include>的区别)
1.3 taglib指令:taglib指令有2种属性,prefix、uri
二.JSP动作组件
2.1 <jsp:include>:
2.2 <jsp:param>:
2.3 <jsp:forward>:
2.4 <jsp:setProperty>:
2.5 <jsp:getProperty>:
2.6 <jsp:useBean>:
三.JSP内置对象四.表达式语言
指令是从JSP向web容器发送的消息,它用来设置页面的全局属性,
格式<%@ 指令名 属性="属性值"%>
指令名有 page include taglib三种
1.1 page常用指令表
属性 |
定义 |
language=”ScriptLanguage” extends=”className” import=”importList” session=”true|false” buffer=”none|size in kb” autoFlush=”true|false” isThreadSafe=”true|false” errorPage=”url” isErrorPage="true|false” contentType="text/html;charset=gb2312” pageEncoding=”ISO-8859-1” isELLgnored=”true|false” |
指定JSP Container用什么语言编译,目前只支持JAVA语言。默认为java 定义此JSP网页产生的Servlet是继承哪个父类 指定导入的java包 决定此页面是否使用session对象。默认为true 决定输出流(Input stream)是否有缓冲区。默认为8kb 决定输出流缓冲区是否自动进行强制输出。true则缓冲区满时正常输出,false缓冲区满会发生异常 是否支持多线程。默认为true <%@page isThreadSafe="true"% > 如果此页发生异常,网页会重新指向一个url 表示此页面是否为错误处理页面。默认为false 表示MIME类型和JSP的编码方式。默认编码格式为 ISO-8859-1 指定网页的编码方式。 表示是否在此JSP页面中EL表达式。true则忽略,false则支持。默认false |
1.2 include指令
用于在JSP文件中插入一个包含文本或代码的文件,在转换成Servlet时,将指定的文件和当前的文件进行合并。包含的文件可以是一个HTML文件、文本文件、JSP文件。使用include指令可以将一个网页分成几个不同的模块进行编辑。
语法格式:<%@ include file="被包含文件地址"%>
注意include指令只有一个属性值file
例子:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.text.*"%> <html>
<head>
<title>文本文件</title>
</head>
<body>
包含文本文件,内容如下:</br>
<%@ include file="content"%>
</body>
</html>
这里"content"和index.jsp在同一层文件夹,因此url直接为"content"
content内容:this.is.a.text
页面运行结果:
包含文本文件,内容如下:
this.is.a.text
注意:<%@ include%>和<jsp:include>的区别
1.3 taglib指令
用来声明次jsp文件使用了自定义标签。JSP中可以使用根据业务需要定义的标签,这样比较便于页面功能的实现。同时引用所指定的标签库并设置标签库的前缀。
格式如下<%@ taglib uri = "URIToTagLibrary" prefix="tagPrefix"%>
taglib指令包含两个属性,分别为uri和prefix
其中uri属性用来指定标签库的存放位置。prefix属性指定该标签库使用的前缀。
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!--声明页面中要用到的标签库 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>使用标签库</title>
</head>
<body>
<!-- 使用JSTL标签输出字符串 -->
<c:out value="hello world"/>
</body>
</html>
解释:代码第3行使用taglib指令,表示在该jsp文件中将使用JSTL的核心标签库同时指定该标签库的前缀为c。第10行通过使用JSTL核心标签库的<c:out>标签输出"hello world"
补充:JSTL核心标签库的使用
========================================================================
是一些xml语法格式的标记,被用来控制Web容器的行为
<jsp:include>: <jsp:param>: <jsp:forward>: <jsp:setProperty>: <jsp:getProperty>: <jsp:useBean>: |
在页面被请求的时候引入一个文件 <jsp:include page="文件名" flush="true"/> 在动作组件中引入参数信息 <jsp:param name="参数名称" value=值 /> 把请求转到一个新的页面 <jsp:forward page="网页名称"> 设置JavaBean的属性 输出某个JavaBean的属性 寻找或者实例化一个JavaBean |
2.1<jsp:include>动作元素
用来包含静态和动态的文件。如果包含的为静态文件,那么只是单纯的加到JSP页面中,不会进行任何处理。如果包含的文件为动态文件,那么会先处理,然后将结果加到JSP页面中
语法格式:<jsp:include page="包含文件URL地址" flush="true | false"> 其中flush指定缓冲区满时,是否进行清空。
注意:<%@ include%>和<jsp:include>的区别
(a)使用<%@ include%>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.text.*"%>
<html>
<head>
<title>包含一个含JSP代码的文本文件</title>
</head>
<body>
使用include动作元素包含一个含有JSP代码的文本文件<br>
<%@ include file = "content2.txt" %>
</body>
</html>
content2.txt
<%@ page import="java.util.*"%>
<%=new Date()%>
页面结果:
使用include动作元素包含一个含有JSP代码的文本文件 当前时间与日期: Sun Jun 28 13:34:22 CST 2015 |
(b)使用<jsp:include>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.text.*"%>
<html>
<head>
<title>包含一个含JSP代码的文本文件</title>
</head>
<body>
使用include动作元素包含一个含有JSP代码的文本文件<br>
当前时间与日期:
<jsp:include page="content2.txt"></jsp:include>
</body>
</html>
页面结果:
使用include动作元素包含一个含有JSP代码的文本文件 |
可见,使用<jsp:include>把txt文件直接输出了。因为<jsp:include>动作动态地包含文件。
如果被包含的文件是静态的,则直接包含内容,不会进行处理。
如果被包含的文件是动态的,则先执行,然后包含结果并进行显示。
在上例中,content2.txt是静态文件,里面的jsp代码没有执行,而是原样输出。
小结:
对于(a),使用<%@ include%>指令元素是将所有的被包含文件包含进来之后,再进行编译等处理,可以理解为“先包含再处理”
对于(b),使用<jsp:include>动作元素师将所有的代码处理完成后,在将处理完成的代码结果包含进行,可以理解为“先处理再包含”
======================================================
2.2 使用forward动作组件时的问题
<jsp:forward>动作元素用来转移用户的请求,使得用户请求的页面从一个页面跳转到另一个页面。这种跳转为服务端的跳转,因此地址栏不会发生变化
语法格式:<jsp: forward page="跳转文件url地址"> 只有page一个属性
<%@ page language="java" pageEncoding="GB2312"%>
<%@ page contentType = "text/html;charset=GB2312" %>
<html>
<head>
<title>forward</title>
</head>
<body>
<p>
<%double i = Math.random();
if(i>0.5){
%>
<jsp:forward page = "catalog1.html"></jsp:forward>
<%
}else{
%>
<jsp:forward page = "catalog2.html"></jsp:forward>
<%
}
%>
</body>
</html>
如果
<jsp:forward page = "catalog1.html"></jsp:forward>
写成不在一行的
<jsp:forward page = "catalog1.html">
</jsp:forward>
则出错。
原因:当<jsp:include>标签没有参数时,<jsp:include page="include/header.jsp">的配对标签</jsp:include>不能换行。
======================================================
2.3 param动作组件
param动作组件用于传递参数信息,必须配合include或forward动作组件一起使用
语法如下:<jsp:param name="参数名称" value=值 />
index.jsp
param与include结合(与forward结合和include类似)
<%@ page language="java" pageEncoding="GB2312"%>
<%@ page contentType = "text/html;charset=GB2312" %>
<html>
<head>
<title>param</title>
</head>
<body>
<p>加载文件效果
<jsp:include page="add.jsp">
<jsp:param name = "start" value="0"></jsp:param>
<jsp:param name = "end" value="100"></jsp:param>
</jsp:include> </body>
</html>
add.jsp
<%@ page language="java" pageEncoding="GB2312"%>
<%@ page contentType = "text/html;charset=GB2312" %>
<html>
<head>
</head>
<body>
<%
String start=request.getParameter("start");
String end=request.getParameter("end");
int s = Integer.parseInt(start);
int e = Integer.parseInt(end);
int sum =0;
for (int i = s ; i <=e ; i++){
sum+=i;
}
%>
<p>
从<%=start %>到<%=end %>的连续和是<%=sum %>
</body>
</html>
结果效果
加载文件效果 从0到100的连续和是5050
======================================================
2.4 plugin动作组件
用来在JSP中嵌入java插件。语法格式:
<jsp:plugin
type="bean|applet"
name="applet名称"
code="java类名"
codebase="java类所在目录"
align="对齐方式"
height="高度"
width="宽度"
hspace="水平间距"
vspace="垂直间距"
archieve="预先加载的类列表"
jreversion="jre版本"
iepluginurl="URL"
nspluginurl="URL"
></jsp:plugin>
index.jsp
<%@ page language="java" pageEncoding="GB2312"%>
<%@ page contentType = "text/html;charset=GB2312" %>
<html>
<head>
<title>plugin动作组件</title>
</head>
<body>
<jsp:plugin type="applet" code="webapp.Circle" codebase=".">
<jsp:fallback>
Plugin tag OBJECT or EMBED not supported by browser.
</jsp:fallback>
</jsp:plugin>
</body>
</html>
Circle.java
public class Circle extends Applet{
public void paint(Graphics g){
g.setColor(new Color(255,0,255));
g.fillArc(0, 0, 50, 50, 0, 360);
}
}
========================================================================
内置对象为Servlet API的类或接口的实例,JSP规范已经将内置对象完成了初始化,可以直接使用
包含request、response、out、session、application、config、pagecontext、page、exception
解释: 参考 虽然我很菜的博客 http://blog.csdn.net/titilover/article/details/6800782
摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发》
(1)application:javax.servlet.ServletContext的实例,该实例代表JSP所属的WEB应用本身,可用于JSP页面,或者Servlet之间交换信息。常用的方法有getAttribute(String attName), setAttribute(String attName,String attValue)和getInitParameter(String Param)等。
(2)config:javax.servlet.ServletConfig的实例,该实例代表JSP的配置信息,常用的方法有getInitparameter(String paramName)及getInitParametername()等方法。事实上,JSP页面通常无需配置,也就不存在配置信息。因此该对象更多地在Servlet中有效。
(3)exception:java.lang.Throwable的实例,该实例代表其他页面中的错误和异常。只有当页面时错误处理页面,即编译指令的isErrorPage属性是true,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。
(4)out:javax.servlet.jsp.JspWriter的实例,该实例代表Jsp页面输出流,用于输出内容,形成HTML页面。
(5)page:代表页面本身,通常没有太大的用处,也就有是Servlet中的this,其类型就是生成Servlet。
(6)pageContext:javax.servlet.jsp.PageContext的实例,该实例代表JSP页面的上下文,使用该实例可以访问页面中的共享数据。常用的方法getServletContext()和getSevletConfig()等。
(7)request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。常用的方法有:getParameter(String paramName),getParamValues(String paramName),setAttribute(String attributeName,String attributeValue),getAttribute(String attributeName)和setCharacterEncoding(String env)等。
(8)response:javax.servlet.http.HttpServletResponse的实例,代表服务器对于客户端的响应。通常,很少使用该对象直接响应,输出响应对象使用out对象,而response对象常用于重定向。常用的对象有sendRedirect(java.lang.String location)等。
(9)session:javax.servlet.http.HttpServlet的实例,该对象代表一次会话。从客户端浏览器和站点建立连接起,开始会话,直到关闭浏览器结束会话。常用的方法有getAttribute(String attName),setAttribute(String attName,String attValue)等
3.1 request对象
最常用的对象,代表的是来自客户端的请求
主要方法
getAttribute(String name) :返回由name指定的属性值
getAttributeNames() :返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies() :返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding() :返回请求中的字符编码方式
getContentLength() :返回请求的Body的长度实例
getInputStream() :返回请求的输入流,用于获得请求中的数据
getMethod() :获得客户端向服务器端传送数据的方法
getParameter(String name) :获得客户端传送给服务器端的有name指定的参数值
getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParameterValues(String name) :获得有name指定的参数的所有值
getProtocol() :获取客户端向服务器端传送数据所依据的协议名称
getQueryString() :获得查询字符串
getRequestURI() :获取发出请求字符串的客户端地址
getRemoteAddr() :获取客户端的IP地址
getRemoteHost() :获取客户端的名字
getSession([Boolean create]) :返回和请求相关Session
getServerName() :获取服务器的名字
getServletPath() :获取客户端所请求的脚本文件的路径
index.jsp
<%@ page language="java" pageEncoding="GB2312"%>
<%@ page contentType = "text/html;charset=GB2312" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head> <body>
<br>客户使用的协议是:
<%String protocol = request.getProtocol();
out.println(protocol);
%> <form action ="getParam.jsp">
姓名:<input type="text" name = "Username"><br>
选出你喜欢的水果:
<input type ="checkbox" name ="fruit" value = "苹果">苹果
<input type ="checkbox" name ="fruit" value = "西瓜">西瓜
<input type ="checkbox" name ="fruit" value = "桃子">桃子
<input type ="checkbox" name ="fruit" value = "葡萄">葡萄
<br>
<input type ="submit" name="Submit" value="提交">
</form>
</body>
</html>
getParam.jsp
<%@ page language="java" pageEncoding="GB2312"%>
<%@ page contentType = "text/html;charset=GB2312" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'getParam.jsp' starting page</title>
</head>
<body>
你好!
${param.Username}
你好!
<%String Name; %>
<%
Name = request.getParameter("Username");
String stars = new String("你喜欢的水果有:");
String[] paramValues = request.getParameterValues("fruit");
for(int i = 0 ; i <paramValues.length ; i++){
String x = new String(paramValues[i].getBytes("ISO-8859-1"),"GBK");
stars=stars+x+" ";
//stars=stars+paramValues[i].getBytes("ISO-8859-1")+" ";
}
%> <%=Name %>
<br>
<%=stars %>
<br>
<%=paramValues.length %>
</body>
</html>
3.2 application对象
该对象代表web应用本身,整个web应用共享一个application对象,该对象主要用于在多个JSP页面或者Servlet之间共享变量。application通过setAttribute()方法将一个值放入某个属性,该属性的值对整个Web 应用有效,因此Web 应用的每个JSP 页面或Servlet都可以访问该属性,访问属性的方法为getAttribute 。
application对象常用方法
方法名称 | 方法说明 |
getAttribute(String name) setAttribute(String name) getattributeNames() getInitParamter(String name) getServerInfo() getMimeType() getRealPath() |
返回由name指定名字的application对象属性的值,这是一个Object对象 用object来初始化某个属性值,该属性值由name指定 返回所有application对象属性的名字,结果是一个枚举类的实例 返回application初始化参数属性值,属性由name指定 获得当前版本servlet编译器的信息 获取组件MIME类型 获取组件在服务器上的真实路径 |
JavaWeb学习笔记--2.jsp指令元素、动作元素、内置对象的更多相关文章
- JavaWeb学习总结(十七)——JSP中的九个内置对象
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- JavaWeb学习 (十六)————JSP中的九个内置对象
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- JavaWeb学习总结(十七)——JSP中的九个内置对象(转)
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- JavaScript学习笔记 - 进阶篇(6)- JavaScript内置对象
什么是对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方法: ...
- JavaWeb【八、JSP指令与动作元素】
include指令(页面嵌套) <%@ include file="URL"%> include动作 <jsp:include page="URL&qu ...
- JSP JSP工作原理 JSP语法 JSP声明 JSP注释 JSP指令 jsp九大隐式/内置对象
1 什么是JSP 1)为什么说,Servlet是一个动态Web开发技术呢? Servlet是基于服务端的一种动态交互技术, HttpServletRequest表示客户端到服务端的 ...
- JSP学习(三)JSP中的九个内置对象
JSP中的九个内置对象 NO. 内置对象 类型 1 pageContext javax.servlet.jsp.PageContext 2 request javax.servlet.http.Htt ...
- Jsp(3):内置对象和四种域对象的理解
由来:在jsp开发中,会频繁使用到一些对象 .例如HttpSession,ServletContext,ServletContext,HttpServletRequet.所以Sun公司设计Jsp时,在 ...
- JSP学习笔记(1)——Jsp指令、动作元素和内置对象
简单来说,javaweb技术就是让服务器端能够执行Java代码,之后返回数据给客户端(浏览器)让客户端显示数据 jsp页面中可以嵌套java代码(java小脚本)和嵌套Web前端(html,css,j ...
随机推荐
- JAVA回调函数ANDROID中典型的回调地方
在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序. 在JAVA里面我们使用接口的方式来实现函数的回调. 回调的通俗就是:程序 ...
- Abstract Factory模式的几个要点
1.如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式.这时候使用简单的静态工厂完全可以.2.“系列对象”指的是这些对象之间有相互依赖.或作用的关系3.Abs ...
- 深入理解7816(4)---关于T=1
之前说过的T=0协议,基本上相当于是透明的数据,也就是说从应用的角度看,通过T=0传递的TPDU数据信息大都可以直接转换为对应的APD命令响应数据,“字节”是T=0协议最小的数据传输单元. 对于T=1 ...
- 递归转手工栈处理的一般式[C语言]
是任意形式的递归,是化解的一般式. 主题所谓的“递归调用化解为栈处理”,意思是,将递归函数调用化解为“一个由stack_push stack_pop stack_top等函数调用组成的循环式子”.这里 ...
- intel安装mac os
一.变色龙: 1.http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1518901&extra=page%3D1%26orderby ...
- 深入理解linux网络技术内幕读书笔记(一)--简介
Table of Contents 1 基本术语 1.1 本书常用的缩写 2 引用计数 2.1 引用计数函数 3 垃圾回收 3.1 异步 3.2 同步 4 函数指针 4.1 缺点 5 goto语句 5 ...
- poj 2456 Aggressive cows(二分搜索之最大化最小值)
Description Farmer John has built a <= N <= ,) stalls. The stalls are located along a straight ...
- pyqt颜色字符
from PyQt4.QtGui import QPlainTextEdit, QWidget, QVBoxLayout, QApplication, \ QFileDialog, QMessageB ...
- (转)Android中截取当前屏幕图片
该篇文章是说明在Android手机或平板电脑中如何实现截取当前屏幕的功能,并把截取的屏幕保存到SDCard中的某个目录文件夹下面.实现的代码如下: /** * 获取和保存当前屏幕的截图 */ priv ...
- Java 反射 方法调用
在使用Java 反射时,对方法的调用,可能碰到最多的问题是,方法的变量如何使用.其实,调用方法的变量全部在参数数组里,不管有多少个参数,你都要把它放在参数数组里,如果是单个非数组参数,则可不使用参数数 ...