如何在 JSP 页面加载时调用一个 Servlet?

7

我有一个如下的servlet。我想在 jsp 页面加载时调用servlet。我该怎么做?

servlet: SomeServlet.java

<servlet>
  <servlet-name>Hello</servlet-name>
  <servlet-class>SomeServlet</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>Hello</servlet-name>
 <url-pattern>/HelloWorld</url-pattern>
 </servlet-mapping>

我该怎样写对应的JSP页面来在页面加载时调用Servlet呢?同时,我还需要从Servlet获取结果并在同一个JSP中显示结果。我能将结果发送回 JSP 吗?

谢谢!


“on page load” 究竟是什么意思?你是想重定向到 servlet,将内容包含在你的页面中,还是只是触发它? - home
4个回答

10
你应该用另一种方式处理。通过URL调用servlet并让它呈现JSP。这也是常规的MVC方法(servlet是控制器,JSP是视图)。
首先将JSP文件放在/WEB-INF文件夹中,这样最终用户就无法通过直接在浏览器地址栏中输入其URL而不调用servlet来“意外”打开它。然后相应地更改servlet的doGet(),使其将请求转发到JSP。
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // ...

    request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(request, response);
}

打开它的方法是:

http://localhost:8080/contextname/HelloServlet

请注意,您当然可以更改servlet映射中的URL模式,例如将其更改为/hello之类的内容,以便使用更具代表性的URL:

http://localhost:8080/contextname/hello

另请参阅:


如果我有一个位于com.work.something.controller包中的Servlet,那么我应该直接调用什么URL呢? - hcarrasko
@Kramnik0:URL 不依赖于 Servlet 注册的包名或完全限定名,而是依赖于 Servlet 映射的 URL 模式。 - BalusC
我现在知道我需要先在web.xml文件中进行映射。谢谢你的回答。 - hcarrasko

2
<jsp:include page="/HelloWorld"/>

谢谢Nizet。我该如何从servlet调用jsp以显示在servlet中检索到的结果?谢谢。 - user1016403
那是一个不同的问题。你的问题是:“如何从JSP调用servlet?”现在你正在问“如何从servlet调用JSP?”你到底想要什么?客户端浏览器调用的URL是什么,请求应该如何处理? - JB Nizet

0
在 JSP 页面中,您可以将请求转发到 Servlet。
response.sendRedirect(request.getContextPath()+"/SomeServlet");

0

调用servlet而不是在请求属性中获取结果并将请求转发到JSP页面

或者在加载时通过ajax调用servlet并使用javascript渲染响应


这不会重定向到Servlet。 - Bhavik Ambani
@Bhavik . 我需要从servlet获取结果并在同一个jsp中显示。我能把结果发送回jsp吗? - jmj
当然,你可以使用AJAX将结果发送回JSP。 - Bhavik Ambani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接