【问题标题】:Converting a Stripes application to use Friendly URLs将 Stripes 应用程序转换为使用友好 URL
【发布时间】:2009-04-07 12:48:24
【问题描述】:

我正在阅读 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 TheServerSide 上的 Fred。

不管怎样,我做了以下改动:

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 访问它,服务器似乎进入了一个循环,一个接一个地抛出异常。

任何建议表示赞赏 - 谢谢。

【问题讨论】:

    标签: java stripes


    【解决方案1】:

    我一直在尝试一些其他的东西,并得到了它的工作......

    我删除了 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}")
    

    【讨论】:

      【解决方案2】:

      仅用 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>
      

      【讨论】:

        猜你喜欢
        • 2013-09-11
        • 2016-04-29
        • 2012-07-27
        • 1970-01-01
        • 2012-09-25
        • 1970-01-01
        • 2012-08-16
        • 2013-02-10
        • 2015-02-23
        相关资源
        最近更新 更多