我有一个Struts web应用程序(核心V2.5.30(运行在Tomcat9/Ubuntu服务器上。syslog文件正在获取许多类似于以下内容的错误消息实例。应用程序中没有可直接访问的JSP,消息中提到的URL中的每个建议都会通过web.xml
阻止JSP。
〔2022-04-11 13:17:39〕〔info〕〔WARN〕2022-04-111 13:17:39〔https-openssl-nio-8443-exec-5〕FreemarkTemplateEngine-呈现标记/template/xhtml/head.ftl超出操作范围,不建议直接访问JSP!请阅读https://struts.apache.org/security/#never-直接公开jsp文件
是什么原因导致这些消息出现?
index.jsp
内部有东西正在调用JSP页面。它可以是一个包含的或转发的页面。使用相同的请求,但被调用的页面包含struts标记。
如果在web应用程序描述符文件中将索引页定义为<welcome-file>
,则索引页由web容器本身处理。所以它没有处理struts2过滤器,因此没有可用的操作Scope。
如果你想让struts2处理它,你应该创建一个操作映射,作为结果返回这个页面。
如果您在JSP页面中使用Struts标记,无论是否列出欢迎文件,它都应该是一个操作的
dispatcher
结果。如果导航到web内容层次结构的文件夹,并且其中有一个欢迎文件,并且没有映射到该URL的操作,则欢迎文件列表文件可以由web容器处理。在这种情况下,您不能在欢迎文件中使用struts标记,因为您试图在没有关联过滤器的情况下运行它,或者struts2过滤器已经处理了另一个请求。请参阅Hello World应用程序或使用Struts2的Hello World的示例,这些示例将向您展示如何创建使用
index
操作的操作配置,或使用Convention Hello World示例使用无操作结果。