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条)

报告相同问题?

悬赏问题

  • ¥30 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 数电几道习题,写出作答过程,ai一律不采用
  • ¥15 利用pthon计算薄膜结构的光导纳
  • ¥15 海康hlss视频流怎么播放
  • ¥15 Paddleocr:out of memory error on GPU
  • ¥30 51单片机C语言数码管驱动单片机为AT89C52