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

报告相同问题?

悬赏问题

  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上