Struts中的重定向2

时间:2011-10-16 02:44:34

标签: java struts2 struts url-pattern

我在我的网络应用程序中使用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的新手。感谢帮助。

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的更多信息,请参阅以下链接:

http://struts.apache.org/2.0.14/docs/action.html