我是 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/