我在我的网络应用程序中使用Struts 2.
通常,我的应用程序中的struts过滤器会在URL模式中查找* .do。
现在有一个额外的要求;当应用程序键入
时 http://appname:port/login.jsp
,是否显示login.jsp的决定是基于业务规则的。
所以我应该理想地过滤这个URL模式并通过struts动作发送它(让我们称之为LoginDecideAction)。
步骤1是在web.xml中的过滤器URL模式中添加URL模式。现在我怎么说struts这个URL模式'* login.jsp'映射到LoginDecideAction?
我是Struts 2的新手。感谢帮助。
答案 0 :(得分:2)
有几种方法可以解决这个问题;我将首先对詹姆斯的回答进行一些扩展。
(虽然S2.0现在已经很老了;这里是current action tag docs)。
公开login.jsp
个文件(即,不要将其放在WEB-INF
下)并使用其中的<s:action>
标记来运行LoginDecideAction
。操作中的逻辑确定接下来会发生什么,尽管使用executeResult="true"
技术意味着发生的任何事情都会出现在login.jsp
网址中,除非它有JavaScript来设置窗口位置。
IMO这有点笨重(而且我不是action
标签的忠实粉丝)。我宁愿JSP页面立即重定向到一个动作,该动作要么呈现JSP页面,要么在业务逻辑说它应该的情况下呈现不同的JSP页面。
可以通过使用.jsp
属性将jsp
设置为扩展名,让S2实际处理struts.action.extension
请求请参阅default struts.properties
file docs for details。但是您需要为它创建一个操作,并且可能确保S2没有处理其他.jsp
个请求,等等。可能不值得。
答案 1 :(得分:1)
如果您可以显示您的login.jsp,请添加s:action
标记以调用Struts操作,该操作可以处理您的业务逻辑。要显示视图,请使用executeResult="true"
。有关s:action的更多信息,请参阅以下链接: