我正在使用servlet从前端获取请求。 我能够制作单个servlet,可以根据url模式进行多次操作吗? 这将是我的网址映射
<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>
这意味着如果我按下面的框架点击它应该调用它自己的功能。
如何通过扩展servlet来实现这一目标 我们非常感谢代码/链接示例。
答案 0 :(得分:5)
关于您的网址格式,您需要知道调用了哪个网址。因为可以根据不同的http方法(GET,POST等)发出请求,所以您可以使用FrontController Pattern
的部分内容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检查的其他信息this link
答案 1 :(得分:0)
为此,您不应该使用三种不同的Servlet。您应该使用不同的Servlet方法来实现这一目标。
使用 doGet 方法获取数据 使用 doPost 方法插入数据 使用 doPut 方法更新数据 使用 doDelete 方法删除数据。
请参阅servlet api documentation了解详情。
修改强>
阅读有关此here的更多信息。
它表示如果您使用的是servlet api版本 2.5或更高版本,则您提供的网址映射必须有效。
另外,请确保您在<servlet-name>
中提供了 servlet类的完全限定名称。
答案 2 :(得分:0)
您可以通过签订合同来处理'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();
}
}
}
答案 3 :(得分:0)
我做了。
HttpServletRequest.getRequestURI()
返回包含/ *和查询参数的URL模式(如果存在),HttpServletRequest.getPathInfo()
返回与/ *匹配的部分(或完全匹配时为null)。
在我的情况下,我需要getPathInfo()
返回的地方
HelloServlet,HelloServletOne或HelloServletTwo基于请求。
感谢。