![](/img/trans.png)
[英]The servlet container, the servlet url pattern and request wrappers
[英]Framing multiple servlet request url pattern
我正在使用servlet从前端获取请求。 我能否制作一个可以基于url模式执行多个操作的servlet? 这是我的网址映射
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
<url-pattern>/HelloServletOne</url-pattern>
<url-pattern>/HelloServletTwo</url-pattern>
</servlet-mapping>
这意味着,如果我按如下所示访问URL,则应调用其自身的功能。
我如何通过扩展servlet实现这一点?
代码/链接示例非常受赞赏。
关于您的url模式,您需要知道调用了什么URL。 由于可以通过不同的http方法(GET,POST等)发出请求,因此可以使用FrontController模式的一部分
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
private static final String SERLVET = "HelloServlet";
private static final String SERLVET_ONE = "HelloServletOne";
private static final String SERLVET_TWO = "HelloServletTwo";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
processRequest(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
processRequest(req, resp);
}
private void processRequest(HttpServletRequest req, HttpServletResponse resp) {
String path = req.getServletPath();
switch (path) {
case SERLVET:
// ... call your function1
break;
case SERLVET_ONE:
// ... call your function2
break;
case SERLVET_TWO:
// ... call your function3
break;
default:
break;
}
// do something else
}
}
getServletPath方法可能仅适用于像您给定的显式url模式。 有关URL的其他信息,请检查此链接
为此,您不应使用三个不同的Servlet。 您应该使用Servlet的不同方法来实现此目的。
使用doGet方法获取数据。
使用doPost方法插入数据。
使用doPut方法更新数据。
使用doDelete方法删除数据。
请参阅servlet api文档以获取更多详细信息。
编辑:
在此处阅读有关此内容的更多信息。 它说,如果您使用的是servlet api 2.5或更高版本,则必须提供提供的url映射。
另外,请确保在<servlet-name>
提供了servlet类的全限定名称 。
您可以通过签订具有诸如'ACTION'
类的请求参数的合同来处理同一个servlet的多个请求。 然后在表单中将其添加为隐藏字段,并使用'ACTION_1'
和'ACTION_2'
和'ACTION_3'
。 因此,在doPost()
您可以检查此参数值,并可以在同一servlet中调用相应的处理方法。
class YourServlet extends HttpServlet{
public void doPost(HttpReq req, HttpResp resp){
String action = reg.getParameter('ACTION');
if('ACTION_1'.equals(action)){
doAction_1();
}
if('ACTION_2'.equals(action)){
doAction_2()
}
if('ACTION_3'.equals(action)){
doAction_3()
}
else {
defaultAction();
}
}
}
我做成了。
HttpServletRequest.getRequestURI()
返回带有查询参数(包括/ * HttpServletRequest.getRequestURI()
的URL模式HttpServletRequest.getRequestURI()
如果存在),而HttpServletRequest.getPathInfo()
返回与/ *匹配的部分(对于完全匹配,返回null)。
在我的情况下,我需要getPathInfo()
,它将根据请求返回HelloServlet,HelloServletOne或HelloServletTwo。 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.