构建多个 servlet 请求 url 模式
Framing multiple servlet request url pattern
我正在使用 servlet 从前端获取请求。
我可以制作一个可以根据 url 模式进行多项操作的 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>
这意味着如果我点击下面框架中的 url,它应该会调用它自己的功能。
- URL:/HelloServlet: 它应该执行功能 1
- URL:/HelloServletOne: 它应该执行功能 2
- URL:/HelloServletTwo: 它应该执行功能 3 等等
如何通过扩展 servlet 来实现这一点?
Code/link 非常感谢示例。
您不应为此目的使用三个不同的 Servlet。您应该使用 Servlet 的不同方法来实现此目的。
使用doGet方法获取数据。
使用 doPost 方法插入数据。
使用doPut方法更新数据。
使用 doDelete 方法删除数据。
详情请参考servlet api documentation。
编辑:
阅读更多相关信息 here。
它说如果您使用 servlet api 版本 2.5 或更高.
,您提供的 url 映射必须有效
另外,请确保您在 <servlet-name>
.
中提供了 servlet class 的完全限定名称
您可以通过制定具有请求参数的合同来处理同一个 servlet 的多个请求,例如 'ACTION'
。然后在您的表单中将其添加为隐藏字段,其值如 '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();
}
}
}
关于您的 url-模式,您需要知道 URL 的名称。由于不同的 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
我制作成。
HttpServletRequest.getRequestURI()
returns URL 模式包括 /* 和查询参数(如果存在),以及 HttpServletRequest.getPathInfo()
returns 由 /* 匹配的部分(或完全匹配为空)。
在我的例子中,我需要 getPathInfo()
returns
HelloServlet、HelloServletOne 或 HelloServletTwo 基于请求。
谢谢
我正在使用 servlet 从前端获取请求。 我可以制作一个可以根据 url 模式进行多项操作的 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>
这意味着如果我点击下面框架中的 url,它应该会调用它自己的功能。
- URL:/HelloServlet: 它应该执行功能 1
- URL:/HelloServletOne: 它应该执行功能 2
- URL:/HelloServletTwo: 它应该执行功能 3 等等
如何通过扩展 servlet 来实现这一点?
Code/link 非常感谢示例。
您不应为此目的使用三个不同的 Servlet。您应该使用 Servlet 的不同方法来实现此目的。
使用doGet方法获取数据。
使用 doPost 方法插入数据。
使用doPut方法更新数据。
使用 doDelete 方法删除数据。
详情请参考servlet api documentation。
编辑:
阅读更多相关信息 here。
它说如果您使用 servlet api 版本 2.5 或更高.
,您提供的 url 映射必须有效
另外,请确保您在 <servlet-name>
.
您可以通过制定具有请求参数的合同来处理同一个 servlet 的多个请求,例如 'ACTION'
。然后在您的表单中将其添加为隐藏字段,其值如 '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();
}
}
}
关于您的 url-模式,您需要知道 URL 的名称。由于不同的 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
我制作成。
HttpServletRequest.getRequestURI()
returns URL 模式包括 /* 和查询参数(如果存在),以及 HttpServletRequest.getPathInfo()
returns 由 /* 匹配的部分(或完全匹配为空)。
在我的例子中,我需要 getPathInfo()
returns
HelloServlet、HelloServletOne 或 HelloServletTwo 基于请求。
谢谢