您的位置:首页 > Web前端 > JavaScript

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 jsp 基础