JSP基础总结

来源:互联网 发布:中企动力java 编辑:程序博客网 时间:2024/06/07 21:19
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) 使用页面指令pageJSP页面最常用的指令,也是必须要用到的指令,其作用是定义与整个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 默认为trueisELIgnored属性:指定是否禁用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值

0 0