你好,我有一个关于servlet调用另一个servlet的问题
我有一个名为Relay的主servlet,它将负责控制其他servlet
用户将单击并被转发到Relay servlet
<li><a href="/oosd/Relay?selectAnimal=SelectAnimalServlet">Check the available animals</a> </li>Relay servlet内部将获取参数的值,以确定要运行哪个servlet
String selectAnimal = request.getParameter("selectAnimal");
if (selectAnimal.equals("SelectAnimalServlet")){
getServletContext().getNamedDispatcher("/SelectAnimalServlet")
.forward(request, response);
//for testing
System.out.println("Request forwarded to " + selectAnimal + " servlet");
}SelectAnimalServlet代码:
try
{
HttpSession session = request.getSession(true);
session.getAttribute("currentSessionUser");
List<AnimalSelectBean> beans = DAO.getAnimalList();
request.setAttribute("beans", beans);
request.getRequestDispatcher("CheckAnimal.jsp").forward(request, response);
}现在,当我运行时,由于某些原因,它不工作,如果我直接更改到SelectAnimalServlet的链接,代码工作,有任何想法如何解决这个问题?
编辑:
这是我的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>content.LoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>UpdateAnimalServlet</servlet-name>
<servlet-class>content.UpdateAnimalServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>SelectAnimalServlet</servlet-name>
<servlet-class>content.SelectAnimalServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>Relay</servlet-name>
<servlet-class>content.Relay</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SelectAnimalServlet</servlet-name>
<url-pattern>/SelectAnimalServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UpdateAnimalServlet</servlet-name>
<url-pattern>/UpdateAnimalServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Relay</servlet-name>
<url-pattern>/Relay</url-pattern>
</servlet-mapping>
</web-app>此外,我还更改了:
getServletContext().getNamedDispatcher("/SelectAnimalServlet")
.forward(request, response); 至:
response.sendRedirect(response.encodeRedirectURL(selectAnimal));仍然是带有http://localhost:8080/oosd/Relay?selectAnimal=SelectAnimalServlet链接的空白网页
发布于 2011-11-07 10:53:47
getNamedDispatcher需要一个servlet名称;您为它提供的是一个servlet URL。
可以使用名称,也可以使用带有URL的getRequestDispatcher。
由于您正在转发,因此URL不会更改--转发时不会将重定向响应发送回浏览器。转发的内容被直接写入原始响应。
现在您正在转发,您需要重定向到URL,而不仅仅是servlet的名称。
您重定向到的servlet对输出做了什么?
我不相信你的参数命名约定有任何意义。参数的名称不应该与servlet名称相同;参数应该类似于"command“或"select”。然后使用命令参数值查找servlet的URL。或者,在您的示例中,只需预先添加一个/,就完成了。不需要进行任何if/else比较。
https://stackoverflow.com/questions/8031995
复制相似问题