Java 如何将不同的Servlet链接在一起?
首先,我没有使用Spring MVC::)只是想先把它弄出来。 现在我看到的是调用不同servlet的不同JSP页面。所有的作品都很好,但我需要把它们联系在一起。如果所有jsp页面都发出Java 如何将不同的Servlet链接在一起?,java,servlets,servlet-dispatching,Java,Servlets,Servlet Dispatching,首先,我没有使用Spring MVC::)只是想先把它弄出来。 现在我看到的是调用不同servlet的不同JSP页面。所有的作品都很好,但我需要把它们联系在一起。如果所有jsp页面都发出GET请求,那么就很容易了,因为我只需通过web地址传递类型,在servlet端,我只需枚举所有参数,确定它是哪个类型,并委托给正确的servlet。但并非所有jsp页面都发出GET请求,有些页面通过表单发出POST请求。让我们看看例子 A.jsp $.getJSON('GenericServlet?type
GET
请求,那么就很容易了,因为我只需通过web地址传递类型
,在servlet端,我只需枚举所有参数,确定它是哪个类型
,并委托给正确的servlet。但并非所有jsp页面都发出GET
请求,有些页面通过表单发出POST
请求。让我们看看例子
A.jsp
$.getJSON('GenericServlet?type=A', ...
GenericServlet.java
String type = request.getParameter("type");
if(type.equals("A")){
//Somehow delegate to Servlet A (Not sure how to do that yet :))
}
但是在B.jsp
中,我会有这样的东西
B.jsp
<form action="GenericServlet" method="post">
<table border=0 cellspacing=10 cellpadding=0>
<tr>
<td>User Name:</td>
<td><input type="text" name="username" size=22/></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" size=22/></td>
</tr>
</table>
<input type="submit" value="Create User" />
</form>
B.jsp
用户名:
密码:
我很难在
GenericServlet.java
中确定是否需要在您的GenericServlet中转到servletB
,只需执行以下操作:
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
因此doPost()将委托给doGet()
并且具有与前面相同的doGet()代码。您还可以尝试执行jsp中的servlet“委托”逻辑。使用JSP表达式语言(EL)和JSTL标记可以更轻松地实现这一点 例如:
<c:if test="${param.type == 'A'}>
call servlet 1
</c:if>
<c:if test="${param.type == 'B'}>
call servlet 2
</c:if>
调用servlet 2
Servlet 1或Servlet 2可以根据需要实现doGet()或doPost()。或者,您可以使用重字节的建议,将doPost()委托给doGet()
通过这种方式,您可能可以取消GenericServlet。通常的MVC方法是重写该方法,并让业务逻辑也依赖于请求方法,这是通过获得的。另见 另一种方法确实是让
doGet()
和doPost()
执行相同的逻辑,但我不会将一个委托给另一个,而是将它们都委托给相同的独立方法。例如(半伪):
与HTTP
HttpServlet#service()
方法相反,这不考虑HTTPHEAD
、TRACE
、PUT
、OPTIONS
和DELETE
请求方法。您可能希望忽略它们,让servletcontainer以“默认”方式处理它们(即返回)。您是否对这种MVC方法进行过任何指导,BalusC?像弹簧MVC还是减震器?@哈利:不,实际上不是。这将是一个很大的写作。你可能会发现这篇文章很有用:读完这篇文章后,我觉得我对材料有了一些了解,但并不知道如何实施,因为它并没有真正告诉你如何去做。但是,很好的参考知识,谢谢你。问题是你不知道它是否是一种类型,因为B.jsp通过POST请求与GenericServlet
通信
protected void doGet(request, response) {
process(request, response);
}
protected void doPost(request, response) {
process(request, response);
}
private void process(request, response) {
// Do your thing here.
}