Java Web JSP语法:

1. JSP语法分为三种不同的类型:

①编译器指令(DIRECTIVE) 例如: <%@page import="java.io.*"%>

②脚本语法(Scripting)

③动作语法(Action):

例如: <jsp:forward>, <jsp:getProperty>, <jsp:include>

2. 脚本语法:

脚本语法包括:

-- "HTML注释" : <!--comments-->

--"隐藏注释": <%--comments--%>

--"声明"

-- "表达式": 后面不能加分号

-- "脚本段": 后面必须加上分号.

3. HTML注释:

JSP语法格式如下:

<!--comment[<%= expression%>]-->或

<!--注释[]<%= 表达式%>-->

这种注释发送到客户端, 但不直接显示, 在源代码中可以看到.

4. 编译器指令:

编译器指令包含"包含指令", "页指令"和"taglib指令"

它们包含在"<%@ %>"卷标里.

两个主要的指令是page与include.

page指令的属性: language, pageEncoding, import

5. JSP声明语法格式如下:

<%! declaration; [declaration;] …%> 或

<%! 声明; [声明;] …%>, 当服务器将JSP转换为Servlet时, 会将JSP中的声明转换为成员变量,而将脚本段转换为方法中的局部变量, Servlet是单实例的, 这样成员变量的值就只能有一个,每个用户都会访问到它, 而脚本段的值则是局部变量, 每个用户访问的是偶各有一份, 互不影响.

例:

<%! int a = 3%>与

<% int a = 3%>的区别.

声明会生成成员JSP对应类的成员变量.

6. JSP脚本段, 语法格式如下:

<%code fragment %> 或

<%代码%>

转义字符: 双引号 \", 单引号 \', 反斜杠\\, 回车\r, 换行\n, 制表符\t, 退格 \b

7. 包含指令:

include指令: 向当前页中插入一个静态文件的内容.

JSP语法格式如下:

<%@ include file="relativeURL"%>或

<%@include file="相对位置"%>

8. Page指令:

"Page"指令用于定义JSP文件中的全局属性.

"<%@page %>"指令作用于整个JSP页面, 同样包括静态的包含文件, 但是"<%@page%>"指令不能作用于动态的包含文件, 比如"<jsp:include>".

可以在一个页面中用上多个"<%!@ page%>"指令, 但是其中的属性只能用一次, 不过也有例外, 那就是import属性. 因为import属性和Java中的import语句类似(import语句引入的是Java语言中的类), 所以此属性就能用多次.

无论把"<%@page%>"指令放在JSP的文件的哪个地方, 它的作用范围都是整个JSP页面. 不过, 为了JSP程序的可读性, 以及好的变成习惯, 最好还是把它放在JSP文件的顶部.

属性:

1). language = "java"

声明脚本语言的种类, 目前只能用"java"

2). import="{package.class | package.*}, …"

需要导入的Java包的列表, 这些包作用与程序段, 表达式, 以及声明, 下面的包在JSP编译时已经导入了, 所以就不需要再指明了:

java.lang.*javax.servlet.*

javax.servlet.jsp.*

javax.servlet.http.*

3) errorPage = "relativeURL"

设置处理异常事件的JSP文件.

4) isErrorPage = "true | false"

设置此页是否为出错页, 如果被设置为true, 你就能使用exception对象.

9. taglib指令

语法:

<%@ taglib uri="URIToTagLIbrary" prefix="tagPrefix"%>

用于引入定制标签库.

属性:

1) uri="URIToTagLibrary"

Uniform Resource Identifier(URI)根据标签的前缀对自定义的标签经行唯一的命名. URI可以是以下内容:

Uniform Resource Locator(URL)

Uniform Resource Name(URN)

一个相对或绝对的路径

可以是标签库的描述文件.

2) prefix = "tagPrefix"

表示标签在JSP中的名称.

在自定义标签之前的前缀, 比如, 在<public:loop>中的public, 如果这里不写public, 那么这就是不合法的, 请不要用jsp, jspx, java, javax, servlet, sun, 和sunw做为你的前缀, 这些已被Sun公司声明保留.

10. <jsp:forward>

1)<jsp:forward page={"relativeURL" | "<%expression%>"}/>

2)<jsp:forward page={"relativeURL"|"<%=expression%>"}>

<jsp:param name="parameterName" value="{parameterValue | <%=expression%>}"/ >

[<jsp:param…/>]

</jsp:forward>

("[<jsp:param…/>]"指可以有多个"<jsp.param/>"标记)

属性:

1) page="{relativeURL | <%= expression%>}"

这里是一个表达式或是一个字符串用于说明你将要定要的文件或URL, 这个文件可以是JSP, 或程序段.

2) <jsp:param name="parameterName" value="{parameterValue | <%=expression%>}"/ >

向一个动态文件发送一个或多个参数, 这个文件必须是动态文件. 如果想传递过个参数, 可是在一个JSP文件中使用多个"<jsp:param>"; "name"指定参数名,"value"指定参数值.

<jsp:forward>指令用于转向页面,在该指令后面的所有代码都没有机会执行了, 因为页面的流程已经转向了另外一个页面了.

Tomcat生成的代码如下:

if (true) {

_jspx_page_context.forward("ForwardTo.jsp" + (("ForwardTo.jsp").indexOf('?')>0? '&': '?') + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("username", request.getCharacterEncoding())+ "=" + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("donaldjohn", request.getCharacterEncoding()));

return;

}

11. <jsp:include>

包含一个静态或动态文件:

JSP语法格式如下:

1)<jsp:include page="{relativeURL | <%=expression%>}" flush="true"/>

2) <jsp:include page="{relativeURL | <%=expression%>}" flush="true">

<jsp:param name="parameterName" value="{parameterValue | <%=expression%>}"/>

</jsp:include>

Java We JSP内置对象比较和分析

1. JSP内置对象:

JSP有以下九种内置对象, 包括:

request, javax.servlet.ServletRequest请求对象

response, javax.servlet.ServletResponse响应对象

pageContext, javax.servlet.jsp.PageContext页面上下文对象

session, javax.servlet.http.HttpSession会话对象

application, javax.servlet.ServletContext应用程序对象

out, javax.servlet.jsp.JspWriter输出对象

config, javax.servlet.ServletConfig配置对象

page, java.lang.Object页面对象

exception, java.lang.Throwable异常对象

request和response:

2. "request"对象代表的是来自客户端的请求, 例如我们在FORM表单中填写的信息等. 是最常用的对象. 关于它的方法使用较多的是getParameter, getParameterNames和getParameterValues, 通过调用这几个方法来获取请求对象中所包含的参数的值

getParameter()方法是getParameterValues()方法的特例, 表示请求参数值只有一个, 如果请求参数值由多个, 请使用getParameterValues方法, 在多选框的情况下, 需要使用getParameterValues方法来获取用户所选择的多个复选框的值.

<input type="checkbox" name = "interest">football

<input type="checkbox" name = "interest">basketball

<input type="checkbox" name = "interest">volleyball

3. "response" 对象代表的是对客户端的响应, 也就是说可以通过"response"对象来组织发送到客户端的数据, 但是由于组织方式比较底层, 所以不建议普通读者使用, 需要向客户端发送文字时直接使用"out" 对象即可. response可以使用在文件下载中.

4. "pageContext"对象可以成为"页面上下文"对象, 代表的是当前页面运行的一些属性, 常用的方法包括findAttribute, getAttribute, getAttributesScope和getAttributeNamesInScope, 一般情况下"pageContext"对象用到的也不是很多, 只有在项目所面临的情况比较复杂的情况下, 才会利用页面属性来属猪处理. 一般Servlet容器会使用该对象.

5. session对象:

代表服务器和客户端所建立的会话, 当需要在不同的JSP页面中保留客户信息的情况下使用, 比如在线购物, 客户轨迹跟踪等.

为什么要引入session:

Http是无状态(stateless)的协议

Web Server对每一个客户端请求都没有历史记忆

Session用来保存客户端状态信息.

6. application对象:

"application"对象负责提供应用程序在服务器中运行时的一些全局信息, 常用的方法有getMimeType和getRealPath等.

7. out对象代表了向客户端发送数据的对象, 与"response"对象不同, 通过"out"对象发送的内容将是浏览器需要显示的内容, 是文本一级, 可以通过"out"对象直接对客户端写一个由程序动态生成的HTML文件, 常用的方法包括: print, println, clear, clearBuffer, flush, getBufferSize, getRemaining, 这是因为"out" 对象内部包含了一个缓冲区, 所以需要一些对缓冲区进行操作的方法.

8. config, page, exception:

"config"对象提供了一些配置信息, 常用的方法有getInitParameter()和getInitParameterNames(),以获得Servlet初始化时的参数.

"page" 对象代表了正在运行的由JSP文件产生的类对象, 不建议一般读者使用.

"exception"对象则代表了JSP文件运行时所产生的异常现象, 此对象不能再一般JSP文件中直接使用, 而只能在使用了 "<%@ pageisErrorPage="true"%>"的JSP文件中使用.

9. request请求对象:

getAttribute()

原型: public java.lang.Object getAttribute(java.lang.String name)

说明: 以对象的形式返回特定名称的属性值, 这个方法允许Servlet引擎给出一个客户请求的特定信息.

如果说给名称的属性不存在,将返回空值.

参数: name一个表示属性名的字符串.

返回值: 一个包含属性值的对象, 当属性不存在时为空.

10. request的setAttribute与getAttribute方法一般都是成对出现的, 首先通过setAttribute方法设置属性与属性值, 然后通过getAttribute方法根据属性获取到与该属性对应的对象值(获取后一般都需要进行向下类型转换, 将属性转换为真正的对象). setAttribute与getAttribute方法都是在服务器端内部执行的, 客户端不知道服务器是否执行了这两个方法.

11. request的getParameter()方法的作用是获取到客户端, 通过表达或url请求参数所发送过来的参数值, 是客户端与服务器之间的交互, 服务器端要想获取到客户独拏发送过来的数据, 就需要使用getParameter()方法来获取, 没有与getParameter()方法对应的setParameter()方法.

12. request对象内数据的存货范围就是request对象的存货范围内, 当客户端向服务器端发送一个请求, 服务器想客户端返回一个响应后, 该请求对象就被小会了; 之后想服务器端发送新的请求时, 服务器会创建新的request对象, 该request对象与之前的request对象没有热河关系, 因此无法获得在之前的request对象中所存放的任何数据.

13. session对象内数据的存活范围也就是session对象的存活范围(只要浏览器不关闭, session对象就会一直存在, 事实上, 这种说法不正确). 因此在同一个浏览器窗口中,不论想客户端发送多少请求, session对象只有一个.

14. application(应用对象):存活范围最大的对象, 只要服务器没有关闭,application对象中的数据就会一直存在. 在整个服务器的运行当中, application对象只有一个.

15. request, session和application这3个对行的范围是逐个增加的, request只在一个请求的范围内; session是在浏览器窗口的范围内, application则是在整个服务器的运行过程中.

application.getRealPath()很重要.

本博客内容所有权限保留,若需合作请与博主联系.博主邮箱:donaldjohn@qq.com
原文地址:https://www.cnblogs.com/donaldjohn/p/2106514.html