如何通过 JSP 页面调用 servlet

How to call servlet through a JSP page

提问人:Rupesh 提问时间:4/13/2011 最后编辑:BalusCRupesh 更新时间:8/10/2020 访问量:174953

问:

我想通过JSP页面调用Servlet。调用的方法是什么?

JSP Servlet

评论

1赞 El Guapo 4/13/2011
当你说要“通过jsp调用servlet”时,你到底想做什么?是否要将请求转发到另一个 Servlet?是否要重定向到 Servlet?是否要调用某个 Servlet 中包含的方法?
0赞 Rupesh 4/13/2011
我jst想重定向到servlet
0赞 El Guapo 4/13/2011
下面有很多好的答案。您需要在 Web.xml 中为您的 Servlet 创建一个映射(下面有一个示例),然后您需要调用 response.redirect(响应对象将存在于您的 JSP 中)到 Servlet 的映射。
0赞 M Siddique 4/2/2018
@ElGuapo亲爱的,我有一个userIndex.jsp我想在其中获取两个servlet,一个是获取和发送用户信息,另一个是发送书籍信息。当我登录时,它向我显示用户信息,但没有显示书籍类,那么我怎么能同时调用两者呢?

答:

41赞 BalusC 4/13/2011 #1

首先将 JSP 页面放在文件夹中的任意位置,这样如果不先调用 Servlet,就不会意外地单独打开 JSP 页面。例如。/WEB-INF/WEB-INF/result.jsp

然后创建一个 Servlet,它执行类似于 following in 方法的操作。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 模式匹配的 URL 调用 Servlet,例如 : http://example.com/contextname/servletURL@WebServlet<url-pattern>web.xml/servletURL


如果您的实际问题是“如何将表单提交到Servlet?”,那么您只需要在HTML表单中指定Servlet URL即可。action

<form action="servletURL" method="post">

然后将调用它的方法。doPost()

另请参阅:

评论

0赞 thonnor 3/23/2018
好答案。第一次写完 7 年后,告诉我我需要知道的一切,我需要改变的一切以及我现在要做的一切:)
0赞 M Siddique 4/2/2018
亲爱的,我有一个userIndex.jsp,我想在其中获取两个Servlet,一个是获取和发送用户信息,另一个是发送书籍信息。当我登录时,它向我显示用户信息,但没有显示书籍 servlet,所以我怎么能同时调用两者?当我手动提供 Servlet 的链接时,会获取书籍。
3赞 lukastymo 4/13/2011 #2

没有调用 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"/> 

评论

0赞 El Guapo 4/13/2011
这将是您创建映射的方式。但是,您必须调用 response.sendRedirect(redirectURL);到包含您创建的映射的完整 URL...在调用 sendRedirect 之前,您必须确保响应已刷新,否则将出现错误...但是,我认为您应该在这里采用@smas的全部方法......因为前锋不需要冲洗。
3赞 BalusC 4/13/2011
从 JSP 向 servlet 发送转发只会冒着服务器日志因异常而混乱的风险。JSP 是充当请求/响应控制器的错误位置。IllegalStateException: response already committed
1赞 Harry Joy 4/13/2011 #3

您可以将 jsp 页面提交到 servlet。为此,请使用 <form> 标签。

并重定向使用:

response.sendRedirect("servleturl")

评论

1赞 BalusC 4/13/2011
发送从 JSP 到 servlet 的重定向只会冒着服务器日志因异常而混乱的风险。JSP 是充当请求/响应控制器的错误位置。IllegalStateException: response already committed
0赞 Harry Joy 4/13/2011
@BalusC:是的,jsp 是错误的地方。OP 应使用 servlet 进行处理,然后重定向到 JSP。但是 OP 要求这样做,这就是我回答使用 .response.sendRedirect("")
0赞 Papuass 4/13/2011 #4

您可以将 HTML 表单发布到 URL(映射到 servlet),也可以将数据插入到传递给 jsp 页面的 HttpServletRequest 对象中。

2赞 egervari 4/13/2011 #5

你为什么要这样做?您不应该在视图中执行控制器代码,当然也不应该尝试将另一个 servlet 中的代码拉入视图。

首先对应用程序进行所有处理和重构,然后将结果传递给视图。使视图尽可能愚蠢,您甚至不会遇到这些问题。

如果这种设计对你来说很难,试试 Freemarker 甚至像 Velocity 这样的东西(尽管我不推荐它)来强迫你这样做。你永远不必做这种事情。

更准确地说,你试图解决的问题只是一个更大问题的症状 - 你的 servlet 的架构/设计。

6赞 Sam YC 1/29/2014 #6

您可以像往常一样使用它:RequestDispatcherServlet

<%@ page contentType="text/html"%>
<%@ page import = "javax.servlet.RequestDispatcher" %>
<%
     RequestDispatcher rd = request.getRequestDispatcher("/yourServletUrl");
     request.setAttribute("msg","HI Welcome");
     rd.forward(request, response);
%>

请始终注意,在使用 之前不要提交任何响应,因为这将导致 .forwardIllegalStateException

评论

0赞 3/13/2017
我不确定是什么, request.setAttribute(“msg”,“HI Welcome”);应该正在做,但这不会发送“HI Welcome”的请求“msg”。它实际上被忽略了。