在学习Struts2的include标签中出现了问题
环境:win8.1+Eclipse IDE for Java EE Developers (4.3.2)+Tomcat7.0.52
使用Struts2 jar包如下:
有s-include.jsp页面如下:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>使用s:include标签来包含目标页面</title> </head> <body> <h2>使用s:include标签来包含目标页面</h2> <!-- 使用include标签来包含其他页面 --> <s:include value="included-file.jsp"/> <!-- 使用include标签来包含其他页面,并且传入参数 --> <s:include value="included-file.jsp"> <s:param name="author" value="'issa'"/> </s:include> </body> </html>
included-file.jsp页面如下:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>被包含的页面</title> </head> <body> <h3>被包含的页面</h3> author参数值为:${param.author} </body> </html>
运行s-include.jsp页面,结果
得到源码为:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>使用s:include标签来包含目标页面</title> </head> <body> <h2>使用s:include标签来包含目标页面</h2> <!-- 使用include标签来包含其他页面 --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> <!-- 使用include标签来包含其他页面,并且传入参数 --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> </body> </html>
控制台有信息:
At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
解决方法:
①. 注释<!-- -->
②. 将included-file.jsp页面改为
<h3>被包含的页面</h3> author参数值为:${param['author']}
③. 修改tomcat属性,忽略对EL表达式的关键字检查。修改$CATALINA_BASE/conf/catalina.properties文件,添加org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true选项
选项①、②后仍有如上信息,选项③后消除。但s-include.jsp页面运行结果仍然空白!
控制另有警告:
警告: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Struts2Tag' did not find a matching property.
解决方法:(无效)
1.关闭服务器
2.双击你 eclipse 下方 Servers 卡片里的服务器,比如我的是 Tomcat v7.0 Server at localhost,双击后将弹出一个关于此服务器配置信息的预览窗口
3.在该窗口下方有个 Server Options 卡片,将 Publish module contexts to separate XML files 勾上并保存
4.重新启动服务器
s-include.jsp页面至今空白。从运行后页面源码来看,仅包含了included-file.jsp页面到<title>标签为止,后面为中文字符。
将include-file.jsp页面改为:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Insert title here</title> </head> <body> <h3>被包含的页面</h3> author参数值为:${param['author']} </body> </html>
则,运行源码为:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>使用s:include标签来包含目标页面</title> </head> <body> <h2>使用s:include标签来包含目标页面</h2> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Insert title here</title> </head> <body> <h3> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Insert title here</title> </head> <body> <h3> </body> </html>
由此可见是中文字符问题,遂再讲included-file.jsp改为:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Insert title here</title> </head> <body> ${param['author']} </body> </html>
运行页面终于:
相对源为:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>使用s:include标签来包含目标页面</title> </head> <body> <h2>使用s:include标签来包含目标页面</h2> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Insert title here</title> </head> <body> </body> </html> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Insert title here</title> </head> <body> yeeku </body> </html> </body> </html>
未解疑问,为何中文字符不可行?
修改两jsp页面为UTF-8编码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
故而运行效果如期,
后续:研究UTF-8与GBK编码的区别。