我想要一个可以在没有参数的情况下使用的简单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".
只需映射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)
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |