本文介绍了JSP经典学习笔记。分享给大家供大家参考。具体如下:
JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例--JSP页面有系统编译成Servlet,Servlet再负责响应用户请求。
1.JSP注释
<%--注释内容--%> ,与HTML注释<!--注释内容-->不同的是,编译后的HTML页面无法查看到JSP注释内容。
2.JSP声明
JSP声明用于声明变量和方法。JSP声明将会转换成Servlet中的成员变量或成员方法,因此,JSP声明依然符合Java语法。
格式: <%! 声明部分 %>
<%! //声明一个整型变量 public int count; //声明一个方法 public String info(){ return "hello world"; } out.println(info()); %>
由于JSP声明语法定义的变量和方法对应于Servlet的成员变量和方法,所以JSP声明部分定义的变量和方法可以使用private,public等访问控制符修饰,也可以使用static修饰,将其变成类属性和类方法。但不能使用abstract修饰声明部分的方法,因为抽象方法将导致JSP对应的Servlet变成抽象类,从而导致无法实例化。
3.输出JSP表达式
语法格式:<%=表达式%>
<%! public int count; public String info(){ return "hello world"; } %> <!--使用表达式输出变量值--> <%=count++%> <!--使用表达式输出方法返回值--> <%=info()%>
注意:输出表达式语法后不能有分号。
4.JSP脚本
通过JSP脚本代码来控制页面静态内容(HTML等元素)
<% for(int i=0;i<10;i++){ %> <tr><td><%=i%></td></tr> <%}%>
5.JSP的3个编译指令
JSP编译指令是通知JSP引擎的消息,它不直接生成输出。编译指令都有默认值。
page:该指令是针对当前页面的指令。
include:用于指定包含另一个页面。
taglib:用于定义和访问自定义标签。
语法格式:<%@ 编译指令名 属性名="属性值"...%>
5.1.page指令
page指令属性有:language,extends,import,session,buffer,autoFlush,info,errorPage,isErrorPage,contentType
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<% page import="java.sql.*"%>
5.2.include指令
使用include指令,可以将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句(如果有的话)。这是个静态的include语句,它会把目标页面的其他编译指令也包含进来,但动态include则不会。
include既可以包含静态的文本,也可以包含动态的JSP页面。静态的include编译指令会将被包含的页面加入本页面,融合成一个页面。
include指令语法:<%@include file="relativeURLSpec"%>
如果被嵌入的文件经常需要改变,建议使用<jsp:include>操作指令,因为它是动态的include语句。
静态包含意义:包含页面在编译时将完全包含了被包含页面的代码。
6.JSP的 7个动作指令
动作指令与编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令知识运行时的脚本动作。编译指令在将JSP编译成Servlet时起作用;而动作指令通常可替换成JSP脚本,是JSP脚本的标准化写法。
jsp:forward:执行页面转向,将请求的处理转发到下一个页面。
jsp:param:用于传递参数,必须与其他支持参数的标签一起使用。
jsp:include:用于动态引入一个JSP页面。
jsp:plugin:用于下载JavaBean或Applet到客户端执行。
jsp:useBean:创建一个JavaBean的实例。
jsp:setProperty:设置JavaBean实例的属性值。
jsp:getProperty:输出JavaBean实例的属性值。
6.1.forward指令
forward指令用于将页面响应转发给另外的页面。既可以转发给静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器的Servlet。
JSP的forward指令语法格式:
<jsp:forward page="{relativeURL|<%=expression%>}"> {<jsp:param.../>} </jsp:forward>
请求参数的值可以通过HttpServletRequest类的getParameter()方法获取。
<jsp:forward page="forward-result.jsp"> <jsp:param name="age" value="29"/> </jsp:forward>
相应的在forward-result.jsp页面可以通过request内置对象来获取age参数值。
<%=request.getParameter("age")%>
执行forward指令时,转发不是重定向,所以请求的地址没有发生改变,当然请求的参数也不会丢失。但页面内容却完全变为被forward目标页的内容。
6.2.include指令
include指令是一个动态include指令,也用于导入某个页面,它不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。
include动作指令的语法格式:
复制代码 代码如下:<jsp:include page="{relativeURL|<%=expression%>}" flush="true"/>
或
<jsp:include page="{relativeURL|<%=expression%>}" flush="true"> <jsp:param name="parameterName" value="patameterValue"/> </jsp:include>
flush属性用于指定输出缓存是否转移到被导入文件中。如果指定为true,则包含在被导入文件中;如果指定为false,则包含在原文件中。例:<jsp:include page="scriptlet.jsp"/>
静态导入和动态导入区别:
a.静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet; 而动态导入则在Servlet中使用include方法来引入被导入页面的内容。
b.静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。
除此之外,执行Include动态指令时,还可以增加额外的请求参数。
实际上,forward动作指令和include动作指令很相似,它们采用方法来引入目标页面,通过查看JSP页面所生成Servlet代码可以得出:forward指令使用_jspx_page_context的forward()方法来引入目标页面,而include指令则使用通过JspRuntimeLibrary的include()方法来引入目标页面。区别在于,执行forward时,被forward的页面将完全代替原有页面;而执行include时,被include的页面只是引入原有页面。简而言之:forward拿目标页面代替原有页面,而include则拿目标页面插入原有页面。
6.3.useBean,setProperty,getProperty指令
这3个指令都是与JavaBean相关的指令,其中useBean指令用于在JSP页面中初始化一个Java实例;setProperty指令用于为JavaBean实例的属性设置值;getProperty指令用于输出JavaBean实例属性。
useBean语法格式:<jsp:useBean id="name" class="classname" scope="page|request|session|application" />
其中,id属性是JavaBean的实例名,class属性确定JavaBean的实现类。scope属性用于指定JavaBean实例的生存范围。
setProperty指令语法格式:<jsp:setProperty name="BeanName" property="propertyName" value="value"/>
getProperty指令语法格式:<jsp:getProperty name="BeanName" property="propertyName"/>
例:
<!-- 创建com.company.Person的实例,该实例的实例名位p1 --> <jsp:useBean id="p1" class="com.company.Person" scope="page"/> <!-- 设置p1的name属性值 --> <jsp:setProperty name="p1" property="name" value="zhangsan"/> <jsp:setProperty name="p1" property="age" value="25"/> <!-- 输出p1的name属性值--> <jsp:getProperty name="p1" property name="name"/>
7.JSP脚本中的9个内置对象
application,config,exception,out,page,pageContext,request,response,session
application:javax.servlet.ServletContext的实例,该实例代表JSP所属的Web应用本身,可用于JSP页面,或者Servlet之间交换信息。常用方法:getAttribute,setAttribute,getInitParameter.
config:javax.servlet.ServletConfig的实例,该实例代表该JSP的配置信息。常用的方法有getInitParamter,getInitParameternames,事实上,JSP页面通常无需配置,也就不存在配置信息。因此,该对象更多地在Servlet中有效。
exception:Java.lang.Throwable的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。
out:javax.servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流,用于输出内容,形成HTML页面。
page:代表页面本身,通常没有太大用处. 也就是Servlet中的this.
pageContext:javax.servlet.jsp.PageContext的实例,该对象代表该JSP页面上下文,使用该对象可以访问页面中的共享数据。常用方法有getServletContext()和getServletConfig()等。
request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求。客户端的请求参数都被封装在该对象里。是个常用对象,获取客户端请求参数必须使用该对象。常用方法有getParameter,getParameterValues,setAttribute,getAttribute,setCharacterEncoding.
response:javax.servlet.http.HttpServletResponse的实例,代表服务器端对客户端的响应。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。而response对象常用于重定向,常用方法:getOutputStream(),sendRedirect.
session:javax.servlet.http.HttpSession的实例,该对象代表一次会话。常用方法:getAttribute,setAttribute.
8.JSTL JSP标准标签库
JSP的标签函数库主要分为五大类:
JSTL
前置名称
URI
范例
核心标签库
c
http://java.sun.com/jsp/jstl/core
<c:out>
I18N格式标签库
fmt
http://java.sun.com/jsp/jstl/fmt
<fmt:formatDate>
SQL标签库
sql
http://java.sun.com/jsp/jstl/sql
<sql:query>
XML标签库
Xml
http://java.sun.com/jsp/jstl/xml
<x:forEach>
函数标签库
fn
http://java.sun.com/jsp/jstl/functions
<fn:split>
核心标签库
功能分类
标签名称
表达式操作
out、set、remove、catch
流程控制
if、choose、when、otherwise
迭代操作
forEach、forTokens
URL操作
import、param、url、redirect
使用:
将标签库中所有的.jar包(内部是所有的标签处理器)放到/WEB_INF/lib下,
将所有的.tld(内部是所有的标签库描述)放到/WEB-INF/tlds下
<%@ page contentType="text/html;charset=gbk" language="java"%> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%> <c:out value="${param.name}" default="welecome jgl to my website!"/>
9.EL表达式
${sessionScope.user.sex}
所有EL都是以${为起始、以}为结尾的。
EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:
${sessionScope.user.sex}等于${sessionScope.user["sex"]}
. 和 [ ] 也可以同时混合使用,如下:
${sessionScope.shoppingCart[0].price}
希望本文所述对大家的JSP程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]