JSP
一、六大标签
1、声明标签
<%声明变量、方法、类%>
synchronized关键字(给方法或代码段加锁)
声明的变量是全局变量,在当前jsp页面任何地方使用,所有用户共享。服务器不关闭一直存在。
案例:模拟网站计数器。
2、脚本标签
<%java代码段%>
不能声明方法和类。声明的变量是局部变量,在当前jsp页面任何地方使用,一个用户对局部变量的操作不会影响其他用户,一个用户访问该页面时才分配一个内存空间,处理完成清空所占内存。
3、表达式标签
<%=表达式%>
表达式的值由服务器负责计算,并将计算结果用字符串形式发送到客户端显示,相当于out.print()。可以是任何java表达式,只要能求值就行。
与EL比较:
同:字符串,HTML标记;求值运算符。
异:1、求值运算符 “+”;empty。
2、存取运算符 “.”;“[]” 如 s e s s i o n S c o p e . u s e r ; {sessionScope.user}; sessionScope.user;{sessionScope.list[2]}前提:放入4大作用域对象里。
3、对象的属性和方法,表达式标签可以取得。例如:<%=对象.方法()%>
案例:输出九九乘法表。
<%for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
out.print(j+"*"+i+"="+i*j+" ");
}%>
<br>
<%}%>
4、注释标签
(1)HTML注释
服务器对此类注释不作任何解释,而直接将其返回给客户端的浏览器,客户在查看源代码时可以看到这条注释。
(2)jsp注释
又称隐藏注释,只能在原始JSP文件中看到,服务器不会将它发送到客户端,对客户而言,是看不见的。
(1)脚本注释
JSP页面的java脚本中使用的注释。这种注释必须包含在<%与%>之间。脚本注释不仅能在原始JSP文件中看到,而且能在JSP编译成的Servlet中看到,对客户端而言是不可见的。
5、指令标签
<%@指令名称 属性=“属性值”,… …%>
JSP指令在客户端是不可见的,它是被服务器解释并执行的。通过指令可以使服务器按照指令的设置执行动作或设置在整个JSP页面范围。
(1) page
处理servlet乱码:response.setContentType(“text/html;charset=utf-8”);
显示系统(服务器)的当前时间。
<%Date date=new Date();
SimpleDateFormat sd = new SimpleDateFormat("hh:mm");
%>
<%=sd.format(date) %>
年 y
月 M
小时 H(0-23)
小时 h(1-12)
分钟 m
秒 s
(2) include
属性:file
静态包含:jsp、html、txt。将内容直接复制过来,合并成一个新文件。
注意:必须保证合并后的jsp文件符合jsp语法规则,比如,被包含文件中要避免使用
(3) taglib
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
6、动作标签
(1)jsp:include
属性:page
动态包含:包含页面与被包含页面完全独立,互不影响,各自转换成servlet生成字节码文件,将被包含页面的输出结果包含进来。jsp、html、txt。
同一web工程,相对路径
跳转到外部web工程3种:
response.sendRedirect(“http://www.baidu.com”)
response.setHeader(“refresh”,“1;url=http://www.baidu.com”);1秒跳转
<c:import url=“http://www.baidu.com”></c:import>
(2)jsp:forward
从该指令处停止当前页面的继续执行,而转向执行page属性指定的JSP页面。(跳转,之后的程序执行不到)
属性:page
同一web工程,相对路径。
(3)jsp:param
作为include和forward的子标记,不能单独使用,用来传参的。
属性:name value
乱码问题:<%request.setCharacterEncoding("utf-8");%>
设置编码的代码是在jsp:forward或jsp:include标签之前,而不是转发的目标页面通过request取值的地方,因为这时已经乱码了再设置编码也没用了。
案例1:包含页面给被包含页面传两个double型参数,被包含页面接收参数计算和并显示。
<%request.setCharacterEncoding