我正在研究Fred Daoud的Stripes一书,并试图将Hello World应用程序转换为使用友好的URL,因为我不喜欢像http://localhost:8080/getting_started/Hello.action这样的基于后缀的映射。
以前是......
的index.jsp:
<jsp:forward page="/Hello.action"/>
的web.xml:
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
我的HelloActionBean上没有UrlBinding。我让这本书的例子有效。
我想知道这些书的例子是否适合Stripes的早期版本,因为我已经下载了1.5.1,而我的web.xml定义了StripesFilter和StripesDispatcher,而我看过其他地方使用过的DynamicMappingFilter,例如在this article由Fred在TheServerSide上。
无论如何,我做了以下更改:
的index.jsp:
<jsp:forward page="/hello"/>
的web.xml:
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
HelloActionBean.java:
**@UrlBinding("/hello")**
public class HelloActionBean implements ActionBean
{
但是,当我尝试通过http://localhost:8080/getting_started加载应用时,我看到了这一点:
net.sourceforge.stripes.exception.ActionBeanNotFoundException: Could not locate an ActionBean that is bound to the URL [/]. Commons reasons for this include mis-matched URLs and forgetting to implement ActionBean in your class. Registered ActionBeans are: {/hello=class stripesbook.action.HelloActionBean, /controller/DefaultView.action=class net.sourceforge.stripes.controller.DefaultViewActionBean, /hello/=class stripesbook.action.HelloActionBean, /controller/DefaultView.action/=class net.sourceforge.stripes.controller.DefaultViewActionBean}
at net.sourceforge.stripes.controller.AnnotatedClassActionResolver.getActionBean(AnnotatedClassActionResolver.java:341)
如果我通过http://localhost:8080/getting_started/hello访问它,服务器似乎会进入循环,抛出一个接一个的异常。
任何建议表示赞赏 - 谢谢。
答案 0 :(得分:6)
我一直在尝试其他一些事情并让它发挥作用......
我删除了web.xml中现有的DispatcherServlet servlet和servlet-mapping定义,并替换为DynamicMappingFilter。
作为奖励,改变链接事件的传递方式,以便例如
http://localhost:8080/getting_started/hello?randomDate=
变为
http://localhost:8080/getting_started/hello/randomDate
将ActionBean上的UrlBinding更改为:
@UrlBinding("/hello/{$event}")
答案 1 :(得分:1)
使用DynamicMappingFilter替换Dispatcher servlet不起作用(我得到一条关于DynamicMappingFilter的错误消息只能与StripesFilter一起使用)。所以我现在在web.xml中配置了两个过滤器和一个过滤器映射:
<filter>
<display-name>Stripes Filter</display-name>
<filter-name>StripesFilter</filter-name>
<filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class>
<init-param>
<param-name>ActionResolver.Packages</param-name>
<param-value>com.package.myactions.package</param-value>
</init-param>
</filter>
<filter>
<description>Dynamically maps URLs to ActionBeans.</description>
<display-name>Stripes Dynamic Mapping Filter</display-name>
<filter-name>DynamicMappingFilter</filter-name>
<filter-class>
net.sourceforge.stripes.controller.DynamicMappingFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>DynamicMappingFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>