做jsp的大家都知道,有两种include其他页面的方法,
一种是说明标签<%@ include file="xxx.jsp"%>,
一种是动作标签<jsp:include page="xxx.jsp"/> 。
我在a.jsp页面上定义了一个 String path = request.getContextPath() , 而这个页面用
说明标签引入了一个b.jsp ,而这个上面也需要一个String path = request.getContextPath() , 结果打开a.jsp时报错了,说path这个变量已经定义过了。
查看其他同样也引了b.jsp的页面,他们也定义了path这个字符串变量,却没有这种错误,我刚开始还挺纳闷,后来发现他们和a.jsp所引入的方法是不一样的----都是动作标签。
后来把a.jsp改了之后,问题就不再出现了。回想书上说,说明标签是静态引入,动作标签是动态,当初不太明白,现在一想也许是这样的:静态引入是把b.jsp的源码拼接到a.jsp中,在一块编译,这样两者代码是加到一起的,所以b.jsp定义的path就形成了重复;而动态引入则是分开编译两个jsp,把行成的html再加到一起,所以不会出现重复定义的问题。
试了一下证实自己的想法:在用<%@ include 时 ,把b.jsp定义的path去掉,结果它就可以使用a.jsp定义的变量,没有错误;而用<jsp:include时,去掉b.jsp的path变量,则会使编译不通过,应该就是单独编译b.jsp时,发现有使用了"path"而“path”没有被定义。
一种是说明标签<%@ include file="xxx.jsp"%>,
一种是动作标签<jsp:include page="xxx.jsp"/> 。
我在a.jsp页面上定义了一个 String path = request.getContextPath() , 而这个页面用
说明标签引入了一个b.jsp ,而这个上面也需要一个String path = request.getContextPath() , 结果打开a.jsp时报错了,说path这个变量已经定义过了。
查看其他同样也引了b.jsp的页面,他们也定义了path这个字符串变量,却没有这种错误,我刚开始还挺纳闷,后来发现他们和a.jsp所引入的方法是不一样的----都是动作标签。
后来把a.jsp改了之后,问题就不再出现了。回想书上说,说明标签是静态引入,动作标签是动态,当初不太明白,现在一想也许是这样的:静态引入是把b.jsp的源码拼接到a.jsp中,在一块编译,这样两者代码是加到一起的,所以b.jsp定义的path就形成了重复;而动态引入则是分开编译两个jsp,把行成的html再加到一起,所以不会出现重复定义的问题。
试了一下证实自己的想法:在用<%@ include 时 ,把b.jsp定义的path去掉,结果它就可以使用a.jsp定义的变量,没有错误;而用<jsp:include时,去掉b.jsp的path变量,则会使编译不通过,应该就是单独编译b.jsp时,发现有使用了"path"而“path”没有被定义。