如何使用像参数这样的URL

Fer*_*ado 2 java url servlets

我想要一个可以在没有参数的情况下使用的简单servlet.就像是 :

http://servername:8080/do/view/username/address
Run Code Online (Sandbox Code Playgroud)

并像参数一样使用它:

http://servername:8080/do?action=view&login=username&page=address
Run Code Online (Sandbox Code Playgroud)

两个网址都具有相同的行为.我更喜欢不使用任何框架,只使用servlet和过滤器.

如何从servlet获取url名称?什么是最好的解决方案?


响应:


根据@BalusC的回复,我创建了以下servlet,它可以完成我想要的任务:

@WebServlet("/do/*")
public class ActionTestCasesServlet extends HttpServlet {

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException  
{
  String pathInfo = request.getPathInfo();
  String[] parts = pathInfo.substring(1).split("/");
  RequestDispatcher destination = getServletContext()
            .getRequestDispatcher("/" + parts[0] + ".jsp");
  if (parts.length > 1) {
request.setAttribute("username", parts[1]);
  }
  if (parts.length > 2) {
    request.setAttribute("page", parts[2]);
  }
  destination.forward(request, response);

 }
}
Run Code Online (Sandbox Code Playgroud)

此代码调用"view.jsp"传递属性"username"和"page".

Bal*_*usC 6

只需映射servlet /do/*而不是/do.

@WebServlet("/do/*")
Run Code Online (Sandbox Code Playgroud)

这样您就可以使用获取路径信息HttpServletRequest#getPathInfo().

String pathInfo = request.getPathInfo(); // /view/username/address
Run Code Online (Sandbox Code Playgroud)

您可以使用常用String方法String#split()将其拆分为片段.

String[] parts = pathInfo.substring(1).split("/"); // view, username, address
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 设计模式基于Web的应用程序 - 对于您打算自行创建MVC的情况(注意:我不推荐这个,如果它是为了学习/爱好的目的,它是有趣的,但如果它是为了真正的工作,而是选择一个现有的MVC框架,以便你可以确保涵盖每个陷阱)