我是Web开发的新手,正在开发一个使用servlet和JSP的Web应用程序,我创建了我的servlet和JSP,但是我很难让servlet将请求转发给JSP。
在我的main
页面中,有<form>
使用get
方法,操作指向我的servlet(SelectSupportUnit.do
):
<form method="get" action="SelectSupportUnit.do">
在我的servlet中,它将我的JDBC Query的结果转发给JSP:
request.setAttribute("suppUnitList", suppUnitList);
RequestDispatcher view = request.getRequestDispatcher("QueryResults.jsp");
view.forward(request, response);
在我的web.xml文件中,它声明了JSP(这是在将请求从servlet转发到JSP时,它在Head First Servlets和JSPs书中所说的):
<servlet>
<servlet-name>SelectSupportUnit</servlet-name>
<jsp-file>/QueryResults.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>SelectSupportUnit</servlet-name>
<url-pattern>/QueryResults.jsp</url-pattern>
</servlet-mapping>
当我运行它时(使用Eclipse IDE和Tomcat v7容器),它给了我HTTP status 404
。并说它无法找到我的servlet(SelectSupportUnit.do
)。
这会使它看起来好像在调用servlet的<form>
元素中,你应该调用JSP,但如果我这样做,它会绕过servlet吗?
我的form
看起来像这样:
我的元素现在看起来像这样:
<form target="_blank" method="get" action="${PageContext.request.contextPath}/SelectSupportUnit">
答案 0 :(得分:0)
您必须在表单中提及servlet的名称
<form method="get" action="SelectSupportUnit">
然后它将转到Servlet的doGet()
方法。您不需要在表单操作中添加SelectSupportUnit.do
。
答案 1 :(得分:0)
您必须将servlet和jsp文件正确映射到分隔的URL!
以下是应该起作用的web.xml的一个简单示例:
<web-app>
<servlet>
<servlet-name>SelectSupportUnit</servlet-name>
<servlet-class>my.package.path.SelectSupportUnit</servlet-class>
</servlet>
<servlet>
<servlet-name>QueryResults</servlet-name>
<jsp-file>QueryResults.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>SelectSupportUnit</servlet-name>
<url-pattern>SelectSupportUnit.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>QueryResults</servlet-name>
<url-pattern>/QueryResults.html</url-pattern>
</servlet-mapping>
</web-app>
答案 2 :(得分:0)
您的操作缺少上下文路径。该操作应该是action="${pageContext.request.contextPath}/SelectSupportUnit.do"
,或者作为<c:url>
JSTL操作(将自动插入上下文路径)的结果创建。
第二个问题是.do名称,这似乎不合适。我建议使用servlet的暗示名称。
404是由于形成不良的动作URL。您永远不会直接处理JSP。始终处理其servlet控制器。