SP的执行流程, 首先用户发送一个请求给JSP页面,然后由服务器转化为一个java文件,实质就是一个servlet,然后再去进行编译和执行得到 最后 的结果,最后才返回给用户最后 的执行结果。
上面每刷新页面,时值的变化为 3 3 2 3 1 3 0 3
为什么会这样? 因为首先声明是声明在成员变量的位置,而下面的b则在方法的位置,又因为jsp的执行机制与servlet单实例的原因,因为未修改过jsp页面,所以每次执行时都是执行已经生成的.class文件,去执行的是同一个servlet实例,所以才会出现这样的结果。因为servlet为单实例,所以一般这样成员变量的值就只有一个,每个用户都会访问互它,而脚本段中的值则是局部变量,每个用户访问的时候各有一份,互不影响。
Page指令:
<body>
<jsp:forward page = "forward2.jsp">
<jsp:param name="username" value= "zhangsan"></jsp:param>
</jsp:forward>
</body>
Forward2:
<body>
<%
"username");
out.println(username);
%>
</body>
编译后的jsp文件,可以看出,forward执行之后,就直接return,结束了,所以放在forward之后的代码都不会去执行了。
下面是<jsp:include>标签:
<body>
<%@ include file="include2.jsp" %>
<jsp:include page = "include2.jsp">
<jsp:param name = "username" value = "lisi"></jsp:param>
</jsp:include>
</body>其中jsp:include标签,可以向被包含的页面传递参数,是@include所不支持的。
下面是include2.jsp
<body>
<%
"username");
out.println(username);
%>
</body>
,现在让我们先用<%@ include file=”include2.jsp” %>这种形式引入include2.jsp这个文件。你想会出现什么问题了吗?此时出现了错误提示:
HTTP Status 500 ?
org.apache.jasper.JasperException: / include2.jsp(0,0) Page directive: can't have multiple occurrences of contentType
以下还有一堆错误,但我们只要看这里就知道问题的所在了。状态码为http 500服务器内部错误。再看下面的提示。在include2.jsp页面中不能指定多个contentType.
原因就在这里了。是因为在翻译阶段, include2.jsp文件的代码被原封不动地加入到了include2.jsp页面从而合成一个文件。合成后的文件中就会相同的:
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
这句代码。解决的办法是把include2.jsp文件中的这句删掉。刷新后再请求include1.jsp页面.
下面是处理数字异常的代码:
<body>
<form>
<jsp:forward page = "biaoGe2.jsp">
<jsp:param name = "hang" value="a"></jsp:param>
<jsp:param name = "lie" value="a"></jsp:param>
</jsp:forward>
</form>
</body>
<body>
<table border = "1">
<%
int
int
int
try{
"hang"));
"lie"));
}
catch(Exception e)
{
"请输入数字。");
//注意,这个地方要return 否则会继续往下执行。
return;
}
for(int
{
%>
<tr>
<%
for(int
{
%>
<td><%=a++ %></td>
<%
}
%>
</tr>
<%
}
%>
</table>
</body>