SP的执行流程, 首先用户发送一个请求给JSP页面,然后由服务器转化为一个java文件,实质就是一个servlet,然后再去进行编译和执行得到 最后 的结果,最后才返回给用户最后 的执行结果。


黑马程序员SpringMVC登录 黑马程序员javaweb答案_黑马程序员SpringMVC登录


上面每刷新页面,时值的变化为 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>