提问人:Rupesh 提问时间:4/13/2011 最后编辑:BalusCRupesh 更新时间:8/10/2020 访问量:174953
如何通过 JSP 页面调用 servlet
How to call servlet through a JSP page
答:
首先将 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()
另请参阅:
- Servlets 信息页面 - 包含一个 hello world
- 在 Java Servlet 中生成 HTML 响应
- 如何从 HTML 表单调用 servlet 类
- 使用 MVC 和 DAO 模式在 JSP 页面中以 HTML 格式显示 JDBC ResultSet
- 如何通过单击JSP页面中的超链接或按钮将当前项目传递给Java方法?
- 基于 Web 的应用程序设计模式
评论
没有调用 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"/>
评论
IllegalStateException: response already committed
您可以将 jsp 页面提交到 servlet。为此,请使用 <form>
标签。
并重定向使用:
response.sendRedirect("servleturl")
评论
IllegalStateException: response already committed
response.sendRedirect("")
您可以将 HTML 表单发布到 URL(映射到 servlet),也可以将数据插入到传递给 jsp 页面的 HttpServletRequest 对象中。
你为什么要这样做?您不应该在视图中执行控制器代码,当然也不应该尝试将另一个 servlet 中的代码拉入视图。
首先对应用程序进行所有处理和重构,然后将结果传递给视图。使视图尽可能愚蠢,您甚至不会遇到这些问题。
如果这种设计对你来说很难,试试 Freemarker 甚至像 Velocity 这样的东西(尽管我不推荐它)来强迫你这样做。你永远不必做这种事情。
更准确地说,你试图解决的问题只是一个更大问题的症状 - 你的 servlet 的架构/设计。
您可以像往常一样使用它: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
评论