JSP页面中<% %>标签的加载顺序问题

首先,今天遇到一件贼拉闹心的事儿,就是这个标签引发的对JSP中代码加载顺序的思考

<jsp:forward page="index.jsp"></jsp:forward>

1、先说问题吧:(当前页面是 forward1.jsp)

页面永远直接跳转到forward3.jsp中去,没有forward1.jsp的输入框,是因为JSP会优先加载页面中的Java代码(也就是<% %>标签中的代码),所以s1中的值一开始就会是null而不是"123",就会直接走else中的代码,转发到forward3.jsp当中,根本不会有显示输入框的机会

<body>
		<form action="forward1.jsp">
			<input type="text" value="123" name="str1"/>
			<button>提交</button>
		</form>
		
		<%
			String s1 = request.getParameter("str1"); 
			if("中文".equals(s1)){
		%>
		<jsp:forward page="forward2.jsp"></jsp:forward>
		
		<%} else { %>
		<jsp:forward page="forward3.jsp"></jsp:forward>
		<%} %>
		
</body>

所以必须在前面加一项判断if(s1!=null),这么一来若输入"中文",那么代码就会自动转发到forward2.jsp当中去了

<body>
		<form action="forward1.jsp">
			<input type="text" value="123" name="str1"/>
			<button>提交</button>
		</form>
		
		<%
			String s1 = request.getParameter("str1"); 
			if(s1!=null){
				if("中文".equals(s1)){
		%>
		<jsp:forward page="forward2.jsp"></jsp:forward>
		
		<%} else { %>
		<jsp:forward page="forward3.jsp"></jsp:forward>
		<%}} %>
		
</body>

 2、结论:

  1. Java是在服务器端运行的代码,而javascript和html都是在浏览器端运行的代码,所以加载执行顺序是java>js=html
  2. 而JSP的加载顺序是从上至下的
  3. <% %>块语句相当于forward1_jsp.java中的java语句,所以会在服务器中优先运行结果并返回客户端,然后才会加载浏览器端的js代码
  4. forward1_jsp.java的源码如下
  5.       out.write("\t<body>\r\n");
          out.write("\t\t<form action=\"forward1.jsp\">\r\n");
          out.write("\t\t\t<input type=\"text\" value=\"123\" name=\"str1\"/>\r\n");
          out.write("\t\t\t<button>提交</button>\r\n");
          out.write("\t\t</form>\r\n");
          out.write("\t\t\r\n");
          out.write("\t\t");
    
    			String s1 = request.getParameter("str1"); 
    if(s1!=null){
    	if("中文".equals(s1)){
    		
          out.write("\r\n");
          out.write("\t\t");
          if (true) {
            _jspx_page_context.forward("forward2.jsp");
            return;
          }
          out.write("\r\n");
          out.write("\t\t\r\n");
          out.write("\t\t");
    } else { 
          out.write("\r\n");
          out.write("\t\t");
          if (true) {
            _jspx_page_context.forward("forward3.jsp");
            return;
          }
          out.write("\r\n");
          out.write("\t\t");
    }} 
          out.write("\r\n");
          out.write("\t\t\r\n");
          out.write("\t</body>\r\n");

     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值