如何通过JSP页面调用servlet

ukqbszuj  于 5个月前  发布在  其他
关注(0)|答案(6)|浏览(100)

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

mwecs4sa

mwecs4sa1#

首先将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>


现在通过URL调用Servlet,该URL与@WebServlet注解或web.xml中的<url-pattern>配置中定义的URL模式相匹配,例如/servletURLhttp://example.com/contextname/servletURL
如果您的实际问题是“如何将表单提交给servlet?”,那么您只需在HTML表单action中指定servlet URL。

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


然后将调用其doPost()方法。

参见:

gwbalxhn

gwbalxhn2#

你可以像在Servlet中一样使用RequestDispatcher

<%@ 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

x8goxv8g

x8goxv8g3#

没有调用Servlet的方法,应该在web.xml中进行Map,然后触发此Map。
示例: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>

字符串
这个Map意味着每次调用http://yoursite/yourwebapp/hello都会触发这个servlet。

<jsp:forward page="/hello"/>

mfpqipee

mfpqipee4#

为什么要这样做呢?您不应该在视图中执行控制器代码,当然也不应该试图将另一个servlet中的代码拉入视图。
首先对应用程序进行所有的处理和重构,然后将结果传递给视图。尽可能地使视图愚蠢,这样你就不会遇到这些问题。
如果这种设计对你来说很难,试试Freemarker或者类似Velocity的东西(尽管我不推荐)来强迫你这样做。
更准确地说,您试图解决的问题只是一个更大问题的症状-您的servlet架构/设计。

tzdcorbm

tzdcorbm5#

你可以将你的jsp页面提交给servlet,为此使用<form>标签。
重定向用途:

response.sendRedirect("servleturl")

字符串

vmjh9lq9

vmjh9lq96#

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

相关问题