我想通过JSP页面调用一个Servlet。调用的方法是什么?
mwecs4sa1#
首先将JSP页面放在/WEB-INF文件夹中的任何地方,这样就不可能在没有首先调用Servlet的情况下意外地单独打开JSP页面。例如/WEB-INF/result.jsp。然后创建一个Servlet,它在doGet()方法中执行如下操作。
/WEB-INF
/WEB-INF/result.jsp
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模式相匹配,例如/servletURL:http://example.com/contextname/servletURL。如果您的实际问题是“如何将表单提交给servlet?”,那么您只需在HTML表单action中指定servlet URL。
@WebServlet
web.xml
<url-pattern>
/servletURL
action
<form action="servletURL" method="post">
型然后将调用其doPost()方法。
doPost()
gwbalxhn2#
你可以像在Servlet中一样使用RequestDispatcher:
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。
forward
IllegalStateException
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"/>
型
mfpqipee4#
为什么要这样做呢?您不应该在视图中执行控制器代码,当然也不应该试图将另一个servlet中的代码拉入视图。首先对应用程序进行所有的处理和重构,然后将结果传递给视图。尽可能地使视图愚蠢,这样你就不会遇到这些问题。如果这种设计对你来说很难,试试Freemarker或者类似Velocity的东西(尽管我不推荐)来强迫你这样做。更准确地说,您试图解决的问题只是一个更大问题的症状-您的servlet架构/设计。
tzdcorbm5#
你可以将你的jsp页面提交给servlet,为此使用<form>标签。重定向用途:
<form>
response.sendRedirect("servleturl")
字符串
vmjh9lq96#
您可以将HTML表单发布到URL,URLMap到servlet,或者将数据插入到传递给jsp页面的HttpServletRequest对象中。
6条答案
按热度按时间mwecs4sa1#
首先将JSP页面放在
/WEB-INF
文件夹中的任何地方,这样就不可能在没有首先调用Servlet的情况下意外地单独打开JSP页面。例如/WEB-INF/result.jsp
。然后创建一个Servlet,它在
doGet()
方法中执行如下操作。字符串
然后把这一行放到
/WEB-INF/result.jsp
中。型
现在通过URL调用Servlet,该URL与
@WebServlet
注解或web.xml
中的<url-pattern>
配置中定义的URL模式相匹配,例如/servletURL
:http://example.com/contextname/servletURL。如果您的实际问题是“如何将表单提交给servlet?”,那么您只需在HTML表单
action
中指定servlet URL。型
然后将调用其
doPost()
方法。参见:
gwbalxhn2#
你可以像在
Servlet
中一样使用RequestDispatcher
:字符串
请始终注意,在使用
forward
之前不要提交任何响应,因为这将导致IllegalStateException
。x8goxv8g3#
没有调用Servlet的方法,应该在web.xml中进行Map,然后触发此Map。
示例:web.xml:
字符串
这个Map意味着每次调用http://yoursite/yourwebapp/hello都会触发这个servlet。
型
mfpqipee4#
为什么要这样做呢?您不应该在视图中执行控制器代码,当然也不应该试图将另一个servlet中的代码拉入视图。
首先对应用程序进行所有的处理和重构,然后将结果传递给视图。尽可能地使视图愚蠢,这样你就不会遇到这些问题。
如果这种设计对你来说很难,试试Freemarker或者类似Velocity的东西(尽管我不推荐)来强迫你这样做。
更准确地说,您试图解决的问题只是一个更大问题的症状-您的servlet架构/设计。
tzdcorbm5#
你可以将你的jsp页面提交给servlet,为此使用
<form>
标签。重定向用途:
字符串
vmjh9lq96#
您可以将HTML表单发布到URL,URLMap到servlet,或者将数据插入到传递给jsp页面的HttpServletRequest对象中。