【问题标题】:Getting multiple parts from URL inside of controller从控制器内部的 URL 获取多个部分
【发布时间】:2015-11-10 09:24:12
【问题描述】:

我的 servlet 映射到 <url-pattern> /controller/*/* </url-pattern> 我的 url 是这样的 controller/12341/ABC123 总是这样,但值可以更改。

我正在尝试获取第一个 * 和第二个 * 的值,它表示 serial & mac

我写了以下代码,但它只返回最后一部分 ACB123

String mac= request.getPathInfo().replace("/", "");

我怎样才能得到这两个值?

【问题讨论】:

  • 使用split方法获取最后2个索引?
  • 这个问题已经被许多 web 框架解决了无数次......你真的想“重新发明轮子”并推出自己的基于 servlet 的解决方案吗?
  • @LanceJava 谢谢,目前我正在以自定义方式开发它。表示不使用框架

标签: java servlets web.xml url-pattern


【解决方案1】:

如果我正确阅读了 servlet 规范,您就不能有多个通配符。试试

<url-pattern>/controller/*</url-pattern>

然后:

String[] parts = request.getPathInfo().split("/");
String serial = parts[1]; // before last index
String mac = parts[2]; // last index

当然,您需要对此进行一些错误处理。

关于相关说明:纯 servlet API 使用起来很痛苦。如果您只有这个 servlet 或受到某种限制,这可能没问题。但是,如果你有更多的 servlet,甚至需要 HTTP 请求参数处理、解析等,使用像 Spring WebMVC 这样的框架可能更合适。

【讨论】:

  • 当我System.out.println("serial: " + serial + ", mac: " + mac); 然后我的服务器抛出异常:java.lang.NumberFormatException: For input string: "12341ABC123"。你能帮忙解决问题吗
  • 这个异常不太可能来自System.out.println。我需要查看完整的代码。
  • 我已经使用了你的代码,然后我在执行时写了System.out.println(...),它给出了前面提到的异常
猜你喜欢
  • 2012-11-26
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多