发表于: 2017-10-06 18:44:02
1 737
一、今日完成
1.今天上午因为感冒服用感冒药的缘故,一直觉得大脑比较昏沉,且一直对JSP的语法不熟悉,所以系统学习和梳理之前使用到的JSP相关知识。
2.JSP 所包含的各类元素,包括JSP 注释、声明、表达式、程序段、
JSP 指令(Directive Elements)、JSP 动作(Action Elements)以及JSP 异常处理等。
1)JSP 注释,格式:<%--注释内容--%>或者<%/* 注释内容 */%>。JSP 注释在JSP 页面被转换成Servlet 时会被忽略,在客户端也不会显示。如果希望注释显示在客户端浏览器中,可以使用HTML 注释的语法:<!—comment[<%= expression%>]-->。
JSP 注释内容中不能出现“--%>”,否则会出现编译错误。如果必须使用“--%>”作为注释内容,请使用“--%\>”代替。
2)声明,用于声明JSP 程序中使用的变量、方法等,其声明方式与Java 相同(因为声明最终将被发送到服务器端作为Java 语句解释),其语法格式为:<%! declaration;[ declaration;]…… %>。
每个声明仅在当前的 JSP 页面中有效,如果希望声明在每个页面中均有效,可以将这些公用的变量和方法声明在一个单独的页面中,在其他页面中仅使用<%@include%>或者<jsp:include>元素将该公共页面包含进每个页面;
3)表达式,表示的是一个在脚本语言中被定义的表达式,在运行后被自动转化为字符串,然后显示出来。其基本语法为:<%=expression%>;
4)程序段,符合Java 语言规范的程序片断,在实际运行时会被转换成Servlet,其基本语法为:<% code fragment %>;
5)JSP指令,一共有三个:include 指令、page 指令和taglib 指令。
include 指令用于包含一个文件,例如包含一个HTML 文件,基本语法:<%@ includefile=” 相对URL 地址”%>;
file 属性所指的URL 地址可以是一个表达式,但必须是相对地址。include 是在JSP 页面被转换成Servlet 时引入本地文件而不是在用户请求提交时。
page 指令能够控制从JSP 页面生成的Servlet 的属性和结构,基本语法:<%@ page属性=”属性值” %>。常用的属性如下:
import=”包名.类名”
contentType=”MIME 类型”
isThreadSafe=”true|false”
session=”true|false”
buffer=”kb 数|none”
autoflush=”true|false”
extends=”包名.类名”
info=”消息字符串”
errorPage=”url 地址”
isErrorPage=”true|false”
language=”java”
taglib指令,用于自定义的标记,基本语法:<%@taglib url=”相对URL 地址” prefix=”tagPrefix” %>。url 属性用来指明自定义标记库的存放位置。tagPrefix 是为了区分不同标记库中的相同标记名,如同Java 中包名和类名的关系。
必须在使用自定义标记之前使用<%@taglib%>指令,而且可以在一个页面中多次使用,但是前缀名称在一个页面中只能使用一次。
6)JSP动作,JSP1.1 中一共制定了7 项标准的“动作元素”: <jsp:include>、<jsp:forward>、 <jsp:plugin>、 <jsp:param>、 <jsp:useBean>、 <jsp:getProperty>和 <jsp:setProperty>。
<jsp:include> 动作,基本语法:<jsp:include page=” 相对URL 地址” flush=”true”/>。page 属性必须是相对URL 地址,flush 的值必须设为true。和include指令不同,<jsp:include>动作是在请求被提交时即引入所包含的文件。
如果这个包含文件是动态的,还可以用<jsp:param>还传递参数名和参数值。
<jsp:useBean> 动作,基本语法:<jsp:useBean 属性=”属性值”/>或<jsp:useBean属性=”属性值”>.../jsp:useBean>。指向对JavaBean 的引用,可用的属性有: id=”name”、scope=”page|request|session|application”、 class=”包名.类名”、 type=”包名.类名”、 beanName=”包名.类名”。
<jsp:setProperty>动作,基本语法格式:<jsp:setProperty 属性=”属性值”/>。设定JavaBean 的属性,可以直接设定,也可以通过request 对象所包含的参数指定。可用的属性: name=”beanName”、property=”propertyName|*"、”param=”parameterName”、 value=”val”。
<jsp:getProperty>动作,基本语法格式:<jsp:getProperty name=”PropertyName” 属性=”属性值”/>。获取bean 的属性,然后转换成字符串并输出。
<jsp:param>动作,基本语法格式:<jsp:param name=”属性名称” value=”属性值”>。<jsp:param>用来提供参数信息,经常和<jsp:include>、<jsp:forward>以及<jsp:plugin>一起使用。name 属性就是参数的名称,value 属性就是参数值。
<jsp:forward> 动作,基本语法格式:<jsp:forward page=”相对url 地址”/>。
<jsp:forward>从一个JSP 文件转向page 属性所指定的另一个文件,并传递一个包含用户请求的request 对象,<jsp:forward>动作以下的代码,将不能被执行。page 属性可以是计算类型,但必须是相对URL地址。
<jsp:plugin>动作,基本语法格式:<jsp:plugin 属性=”属性值”>…</jsp:plugin>。在客户端浏览器中执行一个Bean 或者显示一个Applet。根据客户端浏览器的不同类型会产生OBJECT 或EMBED 标记,Java Applet 的运行需要利用这些标记。可用的属性:
type="bean | applet"
code="classFileName"
codebase="classFileDirectoryName"
name="instanceName"
archive="URIToArchive, ..."
align="bottom | top | middle | left | right"
height="displayPixels"
width="displayPixels"
hspace="leftRightPixels"
vspace="topBottomPixels"
jreversion="JREVersionNumber | 1.1"
nspluginurl="URLToPlugin"
iepluginurl="URLToPlugin"
<jsp:fallback>
<jsp:params>
7)JSP异常,JSP 在执行时会出现两类异常,也就是javax.servlet.jsp 包中的两类异常:JspError和JspException。一旦JspError 异常发生,动态页面的输出将被终止然后被定位到错误页。
3.JSP内置对象
JSP 的内置对象是指在JSP 页面系统中已经默认内置的Java 对象,这些对象不必显式声明即可使用。
在JSP 中,定义了四种作用范围,即:Application、Session、Page 和Request,它们代表了对象各自的“生命周期”。
Application Scope 指定的applicaiton 对象作用范围起始于服务器开始运行,application对象被创建之时;终止于服务器关闭之时。
Session Scope 是指其作用范围在客户端同服务器相连接的时间,直到其连接中断为止。
Request Scope 指定的request 对象作用范围是在一个JSP 页面向另一个JSP 页面提出请求到请求完成之间,在完成请求后此范围即结束。
Page Scope 只能够获取本页的数据。
4.在使用JSP 的内置对象处理数据时,需要获取用户填入的数据,并将数据发送至服务器端进行处理。最常用的就是<form>标记和<input>标记。
<form>标记用于定义表单,它将告诉HTML 浏览器如何显示表单以及如何提交表单。基本用法如下所示:<form method=”GET|POST” action=”URL”>…</form>。
在任务2中学习REST风格接口使用,有使用GET 和POST方法,二者提交数据的方式不同,区别如下:
i.POST 本身就是为了将数据传送到服务器端,而GET 主要是为了从服务器端取得数据。GET 之所以也能用于提交数据,只是用来告诉服务器,客户端到底需要什么样的数据。POST 方式把信息作为http 请求的内容进行提交,而GET 信息则直接包含在HTTP URL中进行传输。
ii.POST 方式传输数据时,不需要在URL 中显示出来,而GET 方法传递的数据要在URL 中显示。“GET”方法将表单数据以“Query String”的形式附在URL 中,数据通常来自被提交的表单,不同的数据之间用“&”符号分隔。在“GET”方法中,“?”是用来分隔URL和“Query String”的标志符。通过“GET”方法提交的数据在URL 地址中是可视的,因此也就会带来安全上的隐患。
iii. POST 传输的数据量大,几乎没有限制,而GET 方法由于受到URL 长度的限制,只能传递大约255 字节。
iv.对于“GET”方式,服务器端用Request.QueryString 获取变量的值,对于“POST”方式,服务器端用Request.Form 获取提交的数据。
<input>标记通常用来存储和捕获表单数据。基本的表单由两种类型的<input>标记,第一种是诸如文本框和单选框的基本类型,另一种是提交(submit)按钮,该按钮根据表单中的action 属性实现向目标URL 地址传输数据。基本语法如下所示:<input type=”text” name=”inputname” value=”inputvalue”>。
创建提交按钮:<input type=”submit” value=”提交”>。
5.MVC模型由JSP 充当View 的角色,负责在预定义的页面模板中显示动态内容,由Servlet 充当Controller 的角色,负责对大量的客户端请求进行处理及调用各类JavaBean,由JavaBean 充当Model 角色,负责提供可复用组件以及对数据库的访问等。JSP 本质上就是Servlet。所有的JSP 页面必须实首先被编译成Servlet,然后在Servlet 容器中运行,只是Servlet 无法像JSP 程序那样直接嵌入到HTML 中。之前讲解小课堂,有师兄提问:为什么JSP常用来作为VIEW层组件而不是Servlet?原因我总结了两个:
i.Servlet 无法像JSP 程序那样直接嵌入到HTML 中;
ii.Servlet适合服务器端的处理,比JSP 更加专业强大,也比JSP 更加难懂。对于前端页面设计人员而言,Servlet 并非所长;JSP 不涉及到业务逻辑,只负责动态内容的显示,大大减少了JSP 页面中Java 程序和HTML 代码混淆的情况,对日后的维护工作是具有重要意义的。
二、明日计划
完成任务5中步骤一的代码,下午请假半天。
三、遇到问题
暂无。
四、收获
以上。
禅道进度:任务进度与昨天一致,计划在10月8日提交完成任务5.
评论