Java 构建多个servlet请求url模式
我正在使用servlet从前端获取请求。 我是否能够创建一个servlet,它可以基于url模式执行多个操作? 下面是我的url映射Java 构建多个servlet请求url模式,java,servlets,Java,Servlets,我正在使用servlet从前端获取请求。 我是否能够创建一个servlet,它可以基于url模式执行多个操作? 下面是我的url映射 <servlet> <servlet-name>Hello</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hell
<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>
你好
你好世界
你好
/HelloServlet
/海洛瑟夫莱通
/Helloservlet2
这意味着,如果我点击下面框中的url,它应该调用自己的功能
- URL:/HelloServlet:它应该执行函数1
- URL:/HelloServletOne:它应该执行功能2
- URL:/HelloServletTwo:它应该执行函数3等
非常感谢代码/链接示例。您不应该为此使用三种不同的Servlet。您应该使用不同的Servlet方法来实现这一点 使用doGet方法获取数据。
使用doPost方法插入数据。
使用doPut方法更新数据。
使用doDelete方法删除数据 有关更多详细信息,请参阅 编辑:
请阅读更多关于此的信息。 它说,如果您使用ServletAPI版本2.5或更高版本
另外,请确保您在
中提供了servlet类的完全限定名称,您可以通过签订一个契约来处理同一个servlet的多个请求,该契约包含一个请求参数,如'ACTION'
。然后在表单中添加此字段作为隐藏字段,其值类似于'ACTION\u 1'
和'ACTION\u 2'
和'ACTION\u 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();
}
}
}
关于您的url模式,您需要知道调用了什么url。因为可以通过不同的http方法(GET、POST等)发出请求,所以可以使用 getServletPath方法可能只适用于您给定的显式url模式。有关URL的其他信息,请查看我制作的
HttpServletRequest.getRequestURI()
返回URL模式,包括/*和查询参数(如果存在),并且HttpServletRequest.getPathInfo()
返回与/*匹配的部分(或null表示完全匹配)
在我的例子中,我需要getPathInfo()
它将返回的位置
基于请求的HelloServlet、HelloServletOne或HelloServletTwo。
谢谢。您似乎可以这样做,但另一种方法可能是使用一个servlet映射,但使用HTTP谓词以类似于REST的方式区分您采取的操作。goGet方法检索、doPut方法更新、doPost插入、doDelete删除。我想我会朝这个方向走,而不是你建议的servlet映射方法。只是为了正确理解你——你想使用一个servlet(HelloWorld)。根据URL,应该调用HelloWorld servlet中的另一个方法?@DaveHowes可以使用rest服务实现。但我不擅长这一点。如果我能够使用servlet实现这一点,我的工作将变得更容易。:)是的@swinkler。使用单个servlet helloworld,应该对请求的url模式进行分类。这不是我想要的答案。我需要调用一些基于url模式的函数。请检查更新的问题。这可以通过单个url模式实现。但对我来说,客户端api已经公开,我无法进行任何更改。使用这些url模式,我需要区分来自客户端的请求。您能够使用
springmvc
framework吗?如果是,您可以使用MultiActionController
轻松地执行您想要的操作@MadhukarHebbarYes它可以通过多种方式实现,但根据我要问的问题,它是否能够使用servlet实现。谢谢Hanks@swinkler是的这就是我所期待的答案。这个链接对我也有帮助:
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
}
}