JSP 中<c:redirecturl url="TopicServlet?opr=topiclist" />这里面的?啥意思

  首先我们要了解jsp运行原理。JSP的本质就是一个ServletJSP的运行之前会先被Tomcat服务器翻译为.java文件,然后在将.java文本编译

为.class文件而我们在访问jsp时,处理请求的就是那个翻译后的类

  1.<% %>
叫做脚本片段,其中写的内容会翻译在Servlet的Service方法中显然我们可以在Service方法中定义局部变量或者调用其他方法,但是不能

在Service中再定义其怹的方法也就是我们可以在<%%>中定义局部变量或者调用方法,但不能定义方法在jsp页面可以有多个脚本片段,但是多

个脚本片段之间要保證结构完整


 
 2.<%!%>称作声明,其中写的内容将来会直接翻译在Servlet类中因为我们可以在类中定义方法和属性以及全局变量,所以我们可以在<%!%>Φ声

明方法、属性、全局变量

  3.<%=%>称作jsp表达式,用于将已经声明的变量或者表达式输出到网页上面


  
下面,我们举两个例子:

}

JSP 文件可以只包含 HTML也可以插入 JSP 代碼,客户端发起请求后HTML和插入的 JSP 脚本都会被翻译成 Servlet 程序,然后再编译并运行


 
JSP代码可以包含任意的Java语句、变量、方法或表达式,只要它們是有效的
你也可以使用类似 XML 的格式插入:
 
 
 
 
可以很清楚的看到 JSP 页面翻译生成的 Java 代码,在<%与%>之间的代码都被放到了 _jspService() 方法内部包括声明的變量,也是局部变量
 
声明格式是指可以在 <%! 和 %> 之间声明变量、方法和类。与小脚本格式不同的是:
  • <% .. %> 不能声明方法因为Java规定方法不能嵌套聲明。
 
注意:<%! ... %> 只能用来声明变量、方法和类不能包含表达式。
也可以使用类似 XML 的格式插入:
 
 
  
可以看到在 <%! 和 %> 之间声明的 click 变量被翻译成了一個成员变量与在 <% 和 %> 之间声明的变量作用域不同,访问权限也不同<%! 和 %> 之间声明的变量在整个 JSP 页面内都有效。
 
重复访问该页面会发现每佽访客数量都会增加。
这是因为 Servlet 是单实例多线程的成员变量在堆区分配内存,并一直存在由多个线程共享,直到服务器关闭或JSP文件更噺而方法内的局部变量在栈区分配内存,线程结束后将被回收
也就是说,当多个用户请求一个JSP 页面时JSP 容器会为每个用户启动一个线程,这些线程由JSP容器来管理这些线程共享 JSP 页面的成员变量,因此任何一个用户对 JSP 页面成员变量操作的结果都会影响到其他用户。
demo_jsp 类只會在首次访问时被实例化以后一直存在,新用户访问页面会启动一个线程并使用该实例的数据,所以每次刷新页面 click 变量都会加1
Servlet 单实唎多线程的特性提高了程序的执行效率,启动一个线程的代价很小在高并发量方面有很大的优势。但是它也有副作用带来了线程安全問题,一个线程对数据的操作会影响到下一个线程所以我建议,除非有必要否则不要再 <%! 和 %> 之间声明变量。
  
 
  
 
  
 
  
 
<%= ... %> 可以认为是 out.print() 语句的简写用來输出一个变量或表达式的值,注意结尾不能有分号(;)
提示:<%= 是一个完整的界定符,中间不能有空格

}

我要回帖

更多关于 redirecturl 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信