一、关于<c:import>标签的字符编码问题:
<c:import>标签是可以把其他静态(HTML,txt文件等)或是动态(JSP,PHP文件等)文件的内容包含到本身的JSP网页中,除了能够包含和自己在同一个web application下的文件外,还可以包含不在同一 Web application或者再其他网站的文件.这一切都是由url属性指定.
当通过这个标签导入外部文件的内容时,若文件中含有中文字符,记得要指定被包含文件的编码格式,否则会出现乱码,有几种情况:
--------------------------------------------------------------------------------------------------
1.当将txt文件包含进JSP文件的时候,如果其中含有中文字符,charEncoding属性值一定要是utf-8,若是gb2312,也会出现乱码
这是指定为gb2312的结果:
2.当将HTML文件包含进JSP文件中时候,如果其中含有中文字符,charEncoding指定的字符集要与HTML中<meta>标签中指定的字符集要一致,否则也会出现乱码:
---------------------------------------------------------------------------------------------------
3.当将另一个JSP文件包含进JSP文件中的时候,当另一个JSP文件中的<%@page%>指令元素中指定的pageEncoding字符集与目标JSP文件中的<c:import>标签charEncoding字符集不一样时候,这个时候是不会出现中文乱码的:
这个很奇怪,求高手赐教.
另外,被导入的静态或是动态文件 JSP文件 或HTML文件,一般都要求是完整格式的代码,这样包含JSP文件才能产生正确的输出,例如一个JSP文件包含另一个JSP文件:
包含JSP文件代码:
二、有关<c:import>标签的var属性存储问题:
通过<c:import>标签的var和scope属性可以将url属性所对应的页面内容以String的类型存储至varName中,但此时这个页面并不会输出到主包含文件的页面中.
存储之后的数据,在需要的时候可以将它通过EL表达式将其取出.
这里我发现一个问题,在这里取出被包含页面中的内容的时候一定要注意只能直接使用EL表达式取出,而不能使用<c:out>标签取出,因为被包含页面的内容都是以String类型存储于var变量中的,所以在输出的时候通过<c:out>会以String类型输出至主包含页面之中.具体表现如下:
<c:out value="${sessionScope['s']}"/>
输出到页面中的,
下图是百度主页.
${sessionScope['s']}
三、<c:import>标签+var属性+<c:param>标签 三者组合使用
在使用var属性对被包含页面内容进行存储的时候,同时可以加入<c:param>标签,这样可以将用户参数传递给被包含页面进行处理,然后将处理结果页面内容以String类型形式存储至var所对应的属性值中.
同样,可以单纯的通过EL表达式将var所存储属性中的页面内容原模原样的输出到主包含页面之中:
例如: