我想要一个可以在没有参数的情况下使用的简单servlet。类似的东西:
http://servername:8080/do/view/username/address
并像参数一样使用它:
http://servername:8080/do?action=view&login=username&page=address
两个网址都会有相同的行为。我更喜欢不使用任何框架,只使用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);
}
}
此代码调用“view.jsp”传递属性“username”和“page”。
答案 0 :(得分:6)
只需在/do/*
而不是/do
上映射servlet。
@WebServlet("/do/*")
这样您就可以使用HttpServletRequest#getPathInfo()
获取路径信息。
String pathInfo = request.getPathInfo(); // /view/username/address
您可以使用String#split()
等常用String
方法将其拆分为片段。
String[] parts = pathInfo.substring(1).split("/"); // view, username, address
答案 1 :(得分:2)
你说你不想使用“任何框架,只有servlet和过滤器”,但是你考虑过tuckey.org UrlRewriteFilter吗?这是一个单独的过滤器,您可以在web.xml中注册,然后声明诸如
之类的规则 <rule>
<from>/do/(.+)/(.+)/(.+)</from>
<to>/do?action=$1&login=$2&page=$3</to>
</rule>
在XML文件中。然后你只需编写你的servlet就可以使查询参数正常,并让过滤器处理“漂亮”的URL。
答案 2 :(得分:1)
Spring MVC做得非常好。但是,如果您不想使用第三方框架,则只需处理request.getRequestURI(),拆分此字符串并执行您想要的操作。例如,您可以使用模式/实体/操作。
答案 3 :(得分:0)
我认为之前的线程回复是完美的解决方案。我玩了web.xml文件,看看我能做些什么,这是我的结果。我能够更改web.xml以获得类似于您想要的“http://localhost:8080/do/myServlet.do
”的URL。这是web.xml文件内容,它与servlet-name和url-pattern有关。
<servlet>
<servlet-name>do</servlet-name>
<servlet-class>ControlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>do</servlet-name>
<url-pattern>/myServlet.do</url-pattern>
</servlet-mapping>
</web-app>