pPageException)){ out = _jspx_out; if (out != null&;&; out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }
3. JSP的语法
JSP的语法有如下几种:
JSP传统语法:
Declaration:<%! %>声明成员变量和方法
Scriptlet:<%
程序代码区%>java语句块最常用
Expression:<%= %>只对字符串有效。
Comment注释有3种,要注意html注释, java注释和jsp注释之 间的区别。
Directives与JSP Container 的沟通方式
Action动作指令在运行期间的命令。
内置对象
JSTLJSP Standard Tag Library
JSF
Java Server Faces
3.1 Declaration:<%! %>声明成员变量和方法
要注意的一点是,在Servlet和JSP当中尽量不要成员变量。因为多个线程客户 端公用的是同一个对象的同一个成员变量。可能出现不可预知的
问题。
<%! %>声明成员变量和方法的位置。 例如: <%! int i; public void setName(){… …} %> 方法必须用这样的方式来声明,如果没有叹号,方法在编译的时候会放到_jspService方法当 中去,会报错。因为方法内部是不能定义方法的。也就是说,方法的定义必须放到<%! %> 里面。而如果成员变量没有写在叹号里面,变量编译后会成为_jspService方法的局部变量。 和servlet一样,除了页面访问计数器外,一般不使用成员变量。
3.2 Scriptlet:<%程序代码区%>jsp当中java语句块最
常用 <%程序代码区%>普通的代码区
<%
for (int i=0;i<10,i++)
{
… …
}
%>
3.3 Expression:<%= %>只对字符串有效。
=后面必须是字符串变量或者可以被转换成字符串的表达式
不能以;结束
只有一行
例:
<%=“hello world”%>
<%=i+1%>
<%=request.getParameter(“name”)%>
其实质是<%out.print(“hello world”); %>的简写形式。就是向html文件输出字符串。
注意,request,response,out都是jsp的内置对象。可以直接使用。
例如:
String bgColor = request.getParameter("bgColor");
boolean hasExplicitColor;
if (bgColor != null) {
hasExplicitColor = true;
} else {
hasExplicitColor = false;
bgColor = "WHITE";
}
%>
Color Testing
<%
if (hasExplicitColor) {
out.println("You supplied an explicit background color of " +
bgColor + ".");
} else {
out.println("Using default background color of WHITE. " +
"Supply the bgColor request attribute to try " +
"a standard color, an RRGGBB value, or to see " +
"if your browser supports X11 color names.");
}
%>
注意,String bgColor = request.getParameter("bgColor");是动态获取的参数,方式为访问该页面的时候:
注意以上红色的部分,是通过浏览器向页面传递一个参数,也可以叫做注入攻击。
3.4 Comment注释,要注意html注释, java注释和jsp注释
关于注释 中的注释内容会发送到客户端,只有当你在浏览器里用查看源码的方法才 可以看到,若注释含有JSP语句,这些语句将被编译运行,返回给客户的结果也只是JSP语 句执行后的结果。 如:,在客户浏览器里查看源码会发现也就 是说,在html注释当中的jsp代码还是会被编译。所以,虽然不能阻止jsp 代码的编译和执行,但是使用了可以阻止jsp代码的内容在html页面当中 的显示。 以下都是服务器端的注释,也就是说不会送到客户端。 1. <%-- … … --%>服务器端jsp的多行注释 2. <%//… …%>服务器端Java语言单行注释 3. <%/*
… …
*/%>服务器端Java语言多行注释
以上其实1和3是完全一样的。
在有些地方,把jsp的注释分成两类, 1. 显示注释: JSP 语法 例子 1 在客户端的HTML源代码中产生和上面一样的数据: 例子 2