java - 在 Java Servlet 中处理 URL

标签 java http url servlets

我是 servlet 的新手,我处理来自客户端的响应的方式是使用 if uri 匹配特定路径,例如:

public class EntryServlet extends HttpServlet
{
  public void doGet (HttpServletRequest request, HttpServletResponse response) 
    throws IOException
  {
    String uri = request.getRequestURI ();

    if (uri.matches ("/1")) {
      do something....
    } else if (uri.matches ("/2")) {
      do something else.....    
    } else {
      throw error message...
    }
  }
}

这仅在我的网络服务有几个页面时有效。但是假设我有 50 个 xml 文档,我想将 exmaple.com/1 映射到一个 xml ...到 example.com/50 到另一个 xml。现在用 50 个 if else 语句来处理每个资源将是一个糟糕的设计。什么是更好的实现方式?我试图在没有第三方应用程序/插件/框架的情况下纯粹在 java 中执行此操作

更新: 我只使用一个带有后台线程的 servlet。本质上,客户端请求处理文件,后台线程处理处理并将 xml 文档存储在数据库中。我希望每个 xml 文档都成为 Web 服务上的资源。

最佳答案

你给出了“我想映射”的答案,所以让我们使用一个 Map

你有 2 个选项(我现在看到的)

1:您将“/1”作为键并将字符串作为映射到您的 xyz.xml 的值

2:你把“/1”作为键并放置一个实现“Executor”接口(interface)的对象......

在这两种情况下,您都查找键的值,然后使用值对象返回有用的东西。

把它放在你的 Servlet 的初始化中并用你的对象填充它:

Map<String,String> myActions = new HashMap<String,String>();
myActions.put("/1","one.xml");
.....

现在你可以这样做了:

String uri = request.getRequestURI ();

if (myActions.containsKey(uri)) {
   String value = myActions.get(uri);
   do something with value
} else {
   throw error message...
}

您可以使用实现此功能的对象轻松将其更改为选项 2:

public interface Action {
    String execute(HttpServletRequest req, HttpServletResponse res) throws ServletException,
            IOException;
}

关于java - 在 Java Servlet 中处理 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13441382/

相关文章:

c# - 传输大文件 : combining streamed transfer and content-length

amazon-web-services - 如何保护 APIGateway 生成的 URL?

用于 url 验证的 PHP 正则表达式,filter_var 过于宽松

JAVA String replaceAll hashtag内容

javascript - Java .jar 中如何从 JavaScript 传递非字符串参数

Java - 更精确的重新抛出的功能

python - 如何使用 NodeJS 在单个 HTTP POST 中发送文件和 JSON 数据(元数据)

windows - 使用以太网电缆连接两台计算机

javascript - 搜索每个网址时打开链接,然后关闭每个窗口并将网址添加到数组中

java - 什么时候应该有自定义异常?