JSP基础总结
2016-07-01 17:13
639 查看
JSP基本构成 xxx.jsp 一个jsp页面可以包括指令标识,HTML,JavaScript,嵌入的Java代码,注释和JSP动作标识等内容。但是并不是JSP页面必需的 例: <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="java.util.Date" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>This is Title</title> </head> <body> <a href="https://www.baidu.com" target="_blank">百度</a> <% /*** * JAVA代码 */ Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = simpleDateFormat.format(date); %> <h2>当前时间:<%=str%></h2> </body> </html> 浏览器向web应用服务请求一个JSP页面时,Web应用服务将其转成一个Servlet文件(就是.java文件) 然后把java文件编译成一个字节码文件(.class) 最后Web应用服务器加载转换后的Servlet实例,处理客户端请求,并返回HTML格式给客户端浏览器 使用JSP指令标识 JSP中包含page include taglib 三个指令标识。语法结构相同。 <%@ 指令名 属性1="属性值1" 属性2="属性值2" ... %> 指令名:指定指令名,取值为page,include,taglib指令 属性:指定属性名称,不同的指令包含不同的属性。如果一个指令中需要多个属性,则属性之间用逗号或空格分隔 属性值:指定属性值 (1) 使用页面指令page JSP页面最常用的指令,也是必须要用到的指令,其作用是定义与整个JSP页面相关的属性。 <%@ page 属性1="属性值1" 属性2="属性值2" ... %> page 声明指令为page指令 language属性:指定当前页面中使用的语言 例:<%@ page language="java" %> contentType属性:设置JSP页面的MIME类型和字符编码。 例:<%@ page contentType="text/html;charset=UTF-8" language="java" %> pageEncoding属性:设置JSP页面的编码格式 例:<%@ page pageEncoding="UTF-8"%> import属性:导入JSP页面中的类包,导入后在JSP页面中可以通过嵌入java代码的方法使用这些类包 例:<%@ page import="java.text.SimpleDateFormat" %> buffer属性:设置out对象使用的缓冲区大小,默认是8KB ,建议使用8的倍数。 例:<%@ page buffer="16KB"%> autoFlush属性:指定当缓冲区已满时自动将缓冲区中的内容输出到客户端。默认为true 如果设置为false,当缓冲区已满时将抛出JSP Buffer overflow异常 例:<%@ page autoFlush="true"%> isErrorPage属性:将当前JSP页面这只为错误处理页面,就是异常处理,只有在错误处理页面中将isErrorPage属性设置为true时,才可以调用exception对象输出错误信息 例:<%@ page isErrorPage="true"%> errorPage属性:指定当前页面出现异常时调用的错误处理页面,在错误处理页面必须将isErrorPage设置为true 例:<%@ page errorPage="error.jsp" %> error.jsp 必须 <%@ page isErrorPage="true"%> 然后在error.jsp 中通过 <%=exception.getMessage() %> 输出错误信息 session属性:指定当前JSP页面是否支持session 默认为true isELIgnored属性:指定是否禁用EL表达式。如果为true 则忽略EL表达式 isThreadSafe属性:指定JSP页面是否是线程安全的。如果为true,则JSP页面可以同一时间被多个线程访问 属性:指定page指令中的属性名 属性值:制定属性值 (2) 使用文件包含指令 include 可以将一个JSP页面包含到另一个JSP页面。静态包含 在被包含和包含的文件中不能有重名变量,否则编译错误 <%@ include file="path" %> file:用于指定要包含文件的路径,可以是绝对或相对路径 (3) 使用引用标签库指令 taglib 用于声明一个标签的引用,在JSP页面中声明了哪个标签库的引用,即可在JSP页面中调用哪个标签。 <%@ taglib prefix="tagPrefix" uri="tagURL" %> taglib属性:声明指令为taglib指令 prefix属性:指定标签库的前缀 uri属性:指定标签库文件的位置 使用JSP脚本 (1) 在JSP中应用代码片段 代码片段指的是在JSP页面中嵌入的java或脚本代码。 <% JAVA代码或者脚本代码 %> 例: <% /*** * JAVA代码 */ Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = simpleDateFormat.format(date); %> (2) 使用JSP表达式 JSP表达式用于在页面输出信息,可以插入到网页的文本中也可以插入到HTML标记中动态设置属性值 <%= 表达式 %> 例: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% String str = "HelloWorld"; %> <h2><%= str %></h2> </body> </html> (3) 使用声明标识 在JSP页面中也可以和编写JAVA代码一样定义成员变量及成员方法,这就是声明标识。 使用声明表示的变量或方法是全局的。要求遵循JAVA代码规范 <%! 声明变量或方法的代码 %> 例: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%! private int count = 0; public int getCount() { count++; return count; } %> <h2><%= getCount() %></h2> </body> </html> 注释 (1) 基本HTML注释 <!-- 内容 --> <!-- 内容<%= 表达式 %> --> 例: <!-- 当前时间: <%= new java.util.Date().toLocaleString() %> --> 输出: <!-- 当前时间: yyyy-MM-dd HH:mm:ss --> (2) 隐藏注释 JSP容器会在转换编译JSP的过程中过滤掉注释的内容,所以在形成的hteml代码中不会出现注释,安全性比较高 <%-- 内容 --%> (3) 代码片段中的注释 和java一样 常用JSP动作标识 JSP的动作标识是基于xml语法实现的,所以JSP页面中只需要遵循XML语法调用就行了 < 标识名 属性1="值1" ... > 或者 < 标识名 属性1="值1" ... > < 子标识名 属性1="值1" ... > ... </ 表示名 > (1) 使用包含动作标识 <jsp:include> <!-- 和andoird 的include 一样 --> 可以是动态也可以是静态 Web容器会首先编译被包含的页面。然后将编译处理后的返回结果包含在页面中,之后编译包含页面,最后一起返回 ** 如果被包含的是静态页面,则不会经历编译处理这一环节 语法格式: <jsp:include page="url" flush="false|true"> 或者 <jsp:include page="url" flush="false|true"> 子动作标识<jsp:param> </jsp:include> page:指定被包含文件的相对路径 flush:可选,默认false 是否刷新缓冲区 (2) 使用请求转发的动作标识 <jsp:forward> <jsp:forward> 将当前请求转到其他web资源(HTML,JSP等)。 在执行请求转发后当前页面将不再执行,而是执行该标识指定的目标页面。 <jsp:forward page="url"> 或者 <jsp:forward page="url"> 子动作标识<jsp:param> </jsp:forward> page属性指定请求转发的目标页面,该属性值可以是一个指定文件路径的字符串或表示文件路径的JSP表达式 ** 使用<jsp:forward>请求转发被转向到的目标资源必须与当前JSP页面处于同一上下文应用环境中,否则会出现页面找不到的错误 (3) 使用子动作标识 <jsp:param> <jsp:param> 可以作为其他标识的子表是,为其他标识传递参数 <jsp:param name="参数名" value="参数值" /> name:指定参数名称 valu:设置对应的参数值 例: <jsp:forward page="xxx"> <jsp:param name="userId" value="1" /> </jsp:forward> 请求转发到xxx页面的同时传递userId。 *(4) 使用动作标识 <jsp:useBean> 使用<jsp:useBean> 动作标识 可以在JSP页面中创建要给Bean实例,并且通过属性设置可以将该实例保存在JSP中的指定范围内, 如果指定范围存在该实例的话将使用这个实例而不会重新创建。通过<jsp:useBean>标识创建的Bean实例可以在Scriptlet中应用 语法格式: <jsp:useBean id="变量名" scope="page|request|session|application" { class="package.className" | type="数据类型" | class="package.className" type="数据类型" | beanName="package.className" type="数据类型" }/> <jsp:setProperty name="变量名" property="*" /> id: 变量名,必须符合java命名规范 type: 定义变量的属性 <jsp:useBean id="use" type="com.Bean.UserInfo" scope="session" /> 如果session范围内已经存在us的实例,则将该实例转换为type属性指定的UserInfo(必须是合法的类型转换),并赋值给id属性指定的变量,如果指定的实例不存在,则抛出 "bean use not found within scope" scope: 定义Bean实例的范围,默认为page,可选request session application 执行<jsp:useBean>标识首先会在scope指定的范围查找实例,如果存在直接引用。不存在重新创建,并将其保存在scope属性指定的范围内。 page:指定创建的实例只能在当前的JSP文件中使用。包括在通过include指令静态包含的页面中有效 request:指定创建的实例可以在请求范围内存取,可以通过request的getAttribute("id属性值")方法获取创建的实例 session:指定创建的实例有效范围为session。session是当用户访问web应用时服务器为用户创建的一个对象,服务器通过session的id去区分用户。对某一个用户而言在该范围中的对象可被多个页面共享 可以使用session对象的getAttribut("id属性值")方法获取创建的实例 class: 指定一个完整的类名,与beanName属性不能同时存在。若未设置type,就必须设置class 通过class指定的类不能是抽象的,必须有公共而且无参的构造方法 <jsp:useBean id="use" class="com.Bean.UserInfo" scope="session"> 首先会在session范围中查找是否存在use的UserInfo实例,如果没有则会new一个,并以use为实例名保存在session范围内。 class="package.className" | type="数据类型" <jsp:useBean id="use" class="com.Bean.UserInfo" type="com.Bean.UserBase" scope="session"> 假设UserBase是UserInfo的父类,该标识被执行时程序首先创建要给以type属性值为类型和以id属性值为名称的变量use,并赋值为null 然后在session范围中查找use的Bean实例,如果存在,则将其转换成type属性指定的UserBase类型(必须是合法的类型转换)并赋值给use,最后将use变量存储在session范围内 beanName="package.className" type="数据类型" beanName和type可以指定同一个类 <jsp:useBean id="use" type="com.Bean.UserInfo" beanName="com.Bean.UserInfo" /> 假设UserBase是UserInfo的父类,该标识被执行时程序首先创建要给以type属性值为类型和以id属性值为名称的变量use,并赋值为null 然后在session范围中查找use的Bean实例,如果存在,则将其转换成type属性指定的UserBase类型(必须是合法的类型转换)并赋值给use, 否则通过 instantiate()方法从UserInfo类中实例化一个类并将其转换为UserBase类型后赋值给use 最后将use变量存储在session范围内 beanName: 指定一个完整的类名,与class属性不能同时存在。设置该属性时必须设置type属性。其属性值可以是一个表示完整类名的表达式 (5) 使用动作标识 <jsp:getProperty> 从指定的Bean中读取指定的属性值并输出到页面 <jsp:getProperty name="Bean的实例名" property="propertyNmae" /> name:指定一个Bean实例 property:指定要获取的属性值,假设要获取UserNme的值,那么Bean就必须提供getUserName()方法,否则抛出类似于 "Cannot find any information on property 'userName' in a bean of type '类名'" 如果指定的属性是对象,则输入该对象的toString(); (6) 使用动作标识 <jsp:setProperty> 赋值给指定的Bean属性 <jsp:setProperty name="Bean实例名" { property="*" | property="propertyNmae" | property="propertyNmae" param="parameterName" | property="propertyNmae" value="值" } /> name:指定一个存在JSP中某个范围内的Bean实例 property="*" :request请求中所有参数值将被一一赋值给Bean中与参数有相同名称的属性 property="propertyNmae" :指定要赋值的属性值,假设要赋值给UserNme,那么Bean就必须提供getUserName()方法,否则抛出类似于 "Cannot find any information on property 'userName' in a bean of type '类名'" 如果指定的属性是对象,则输入该对象的toString(); property="propertyNmae" value="值" :value属性的值可以是字符串,JSP表达式或EL表达式。该值将被赋给property属性指定的Bean值
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- JSP/PHP基于Ajax的分页功能实现
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序