我想通过JSP页面调用Servlet。要打电话的方法是什么?
答案 0 :(得分:32)
你可以使用<jsp:include>
。
<jsp:include page="/servletURL" />
然而,这通常是反过来的。您调用servlet,然后转发到JSP以显示结果。创建一个Servlet,它在doGet()
方法中执行类似的操作。
request.setAttribute("result", "This is the result of the servlet call");
request.getRequestDispatcher("/WEB-INF/result.jsp").forward(request, response);
并在/WEB-INF/result.jsp
<p>The result is ${result}</p>
现在通过与<url-pattern>
中的web.xml
匹配的网址调用Servlet,例如http://example.com/contextname/servletURL
如果实际问题是“如何将表单提交给servlet?”然后你只需要在HTML表单action
中指定servlet URL。
<form action="servletURL" method="post">
然后将调用其doPost()
方法。
答案 1 :(得分:4)
您可以使用RequestDispatcher
,因为您通常会在Servlet
中使用它:
<%@ page contentType="text/html"%>
<%@ page import = "javax.servlet.RequestDispatcher" %>
<%
RequestDispatcher rd = request.getRequestDispatcher("/yourServletUrl");
request.setAttribute("msg","HI Welcome");
rd.forward(request, response);
%>
请务必注意,在使用forward
之前不要提交任何回复,因为它会导致IllegalStateException
。
答案 2 :(得分:3)
没有调用Servlet的方法。您应该在web.xml中进行映射,然后触发此映射。
示例:web.xml:
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
此映射表示每次调用http://yoursite/yourwebapp/hello都会触发此servlet 例如这个jsp:
<jsp:forward page="/hello"/>
答案 3 :(得分:2)
你为什么要这样做?您不应该在视图中执行控制器代码,并且当然也不应该尝试将另一个servlet中的代码拉入视图中。
首先对应用程序进行所有处理和重构,然后将结果传递给视图。让视图尽可能愚蠢,你甚至不会遇到这些问题。
如果这种设计对你来说很难,那么试试Freemarker甚至像Velocity这样的东西(虽然我不推荐它)来强迫你这样做。你永远不必做这种事情。
更准确地说,您尝试解决的问题只是一个更大问题的症状 - 您的servlet的架构/设计。
答案 4 :(得分:1)
答案 5 :(得分:0)
您可以将HTML表单发布到URL,映射到servlet或将数据插入到传递给jsp页面的HttpServletRequest对象中。