song21song 2012-11-15 14:19
浏览 321
已采纳

struts1 中使用urlrewrite 来重写url,jsp中如何动态传参数到urlrewrite.xml中的from,to

其中配置都成功了,就是动态参数不好处理。
比如jsp中的
问题:如何在jsp中设置标签,使得伪装后的路径为
http://localhost:8080/xxx/search/supply/5
条件:
查询

当点击链接后,想要处理后的url为
http://localhost:8080/xxx/search/supply/5

在urlrewrite.xml中是这样配置的


^/xxx/search/([a-z]+)/([0-9]+)$
/xxx/search.xz?method=$1&keyword=$2

  • 写回答

2条回答 默认 最新

  • blogzhoubo 2012-11-15 20:19
    关注

    如果参数名称和值不定,参数个数也不定的话,你的href中不光要有值,参数名也应该包含在里面:
    搜索

    然后基于上面的href,你可以自己写一个Filter,然后在Filter的doFilter方法里面对url进行重写,然后forward到你重写后的url。算法很简单:

    [code="java"]public void doFilter(ServletRequest request,ServletResponse response,
    FilterChain chain) throws IOException, ServletException{
    String reqURI = request.getRequestURI();
    if(reqURI.startsWith("/xxx/search/")){
    String reqQueryStr = request.getQueryString();
    StringTokenizer st = new StringTokenizer(reqQueryStr ,"/");
    StringBuffer strbuf = new StringBuffer();
    strbuf.append("/search.xz?");
    String paramName = null;
    String paramValue = null;
    while (st.hasMoreTokens()) {
    paramName = st.nextToken();
    paramValue = st.nextToken();
    strbuf.append(paramName + "=" + paramValue + "&");
    }
    if(strbuf.endsWith("?") || strbuf.endsWith("&"){
    strbuf.deleteCharAt(strbuf.length()-1);
    }
    request.getRequestDispatcher(strbuf).forward(request,response);
    }else{
    chain.doFilter();
    }
    }[/code]

    然后把自定义的Filter配置到web.xml文件中即可。
    上面的代码没有编译,你自己再调试一下看看,应该问题不大,呵呵。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥15 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏