首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中继servlet (servlet调用另一个servlet)

中继servlet (servlet调用另一个servlet)
EN

Stack Overflow用户
提问于 2011-11-07 09:53:26
回答 1查看 3.1K关注 0票数 1

你好,我有一个关于servlet调用另一个servlet的问题

我有一个名为Relay的主servlet,它将负责控制其他servlet

用户将单击并被转发到Relay servlet

代码语言:javascript
复制
<li><a href="/oosd/Relay?selectAnimal=SelectAnimalServlet">Check the available animals</a> </li>

Relay servlet内部将获取参数的值,以确定要运行哪个servlet

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
<?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>

此外,我还更改了:

代码语言:javascript
复制
getServletContext().getNamedDispatcher("/SelectAnimalServlet") 
                .forward(request, response); 

至:

代码语言:javascript
复制
response.sendRedirect(response.encodeRedirectURL(selectAnimal));

仍然是带有http://localhost:8080/oosd/Relay?selectAnimal=SelectAnimalServlet链接的空白网页

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-07 10:53:47

getNamedDispatcher需要一个servlet名称;您为它提供的是一个servlet URL。

可以使用名称,也可以使用带有URL的getRequestDispatcher

由于您正在转发,因此URL不会更改--转发时不会将重定向响应发送回浏览器。转发的内容被直接写入原始响应。

现在您正在转发,您需要重定向到URL,而不仅仅是servlet的名称。

您重定向到的servlet对输出做了什么?

我不相信你的参数命名约定有任何意义。参数的名称不应该与servlet名称相同;参数应该类似于"command“或"select”。然后使用命令参数值查找servlet的URL。或者,在您的示例中,只需预先添加一个/,就完成了。不需要进行任何if/else比较。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8031995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档