我想将此网址映射到一个servlet:
http://localhost:8080/user/dynamic-user-name/edit
这是另一个servlet:
http://localhost:8080/user/dynamic-user-name
其中dynamic-user-name
将根据用户输入而发生变化。
我尝试了以下内容,但似乎/*
会引导所有内容。
<servlet>
<servlet-name>userservlet</servlet-name>
<servlet-class>controller.UserServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>edituser</servlet-name>
<servlet-class>controller.EditUserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>userservlet</servlet-name>
<url-pattern>/users/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>edituser</servlet-name>
<url-pattern>/users/*/edit</url-pattern>
</servlet-mapping>
是否可以以某种方式单独映射它们?我正在使用tomcat服务器。
解决方案/解决方法(未映射到不同的servlet)
我在没有web.xml
的情况下解决了它,而是在servlet中使用了getRequestUrl();
和一些正则表达式,但我仍然在寻找一个更干净的解决方案,因为这会导致很多if语句。
String uri = URLDecoder.decode( request.getRequestURI(), "UTF-8" ).toLowerCase();
if(uri.matches("/users/(.*?)/edit")){
Pattern pattern = Pattern.compile("/users/(.*?)/edit");
Matcher matcher = pattern.matcher(uri);
if (matcher.find())
{
String username = matcher.find(1);
// Do stuff
}
}