如何通过JSP页面调用servlet

问题描述 投票:0回答:6

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

jsp servlets
6个回答
41
投票

首先将JSP页面放在

/WEB-INF
文件夹中的任意位置,这样就不会在不先调用Servlet的情况下意外单独打开JSP页面。例如。
/WEB-INF/result.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>

现在通过与

@WebServlet
注释中或
<url-pattern>
中的
web.xml
配置中定义的 URL 模式匹配的 URL 调用 Servlet,例如
/servletURL
http://example.com/contextname/servletURL


如果您的实际问题是“如何向 servlet 提交表单?”那么您只需在 HTML 表单中指定 servlet URL

action

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

doPost()
方法将被调用。

另请参阅:


6
投票

您可以像平常在

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


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"/> 

2
投票

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

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

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

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


1
投票

您可以将您的jsp页面提交给servlet。为此,请使用

<form>
标签。

并重定向使用:

response.sendRedirect("servleturl")

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.