用我的servlet进行URL映射?

时间:2010-04-06 14:08:44

标签: gwt

我正在使用GWT和GAE。当用户输入以下任何网址时,我希望像往常一样为他们提供应用程序:

http://www.mysite.com/
http://www.mysite.com/dog
http://www.mysite.com/cat

第一种情况默认有效。我不确定如何让/ dog和/ cat案例发挥作用。我想我必须使用url映射修改一些内容才能在web.xml中使用它。基本上我正试图让我的应用程序与任何输入的URL一起提供:

http://www.mysite.com/*

我正在尝试使用一个全新的项目,所以我的web.xml看起来像这样:

<!-- Servlets -->
<servlet>
  <servlet-name>greetServlet</servlet-name>
  <servlet-class>com.me.test.server.GreetingServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>greetServlet</servlet-name>
  <url-pattern>/test/greet</url-pattern>
</servlet-mapping>

现在我添加了以下内容:

<servlet>
  <servlet-name>servletGate</servlet-name>
  <servlet-class>com.me.test.server.ServletGate</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>servletGate</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

当我输入一个网址时:

http://localhost:8888/
http://localhost:8888/dog

我在doGet()行上抛出了一个空指针异常:

getServletConfig().getServletContext().getRequestDispatcher("test.html").forward(request,response);

我错过了什么?

由于

1 个答案:

答案 0 :(得分:1)

你能发布你当前的web.xml吗?您应该能够添加一个servlet映射,如:

  <servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>com.example.MyServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

然后你会写一个简单的Servlet,如:

public class MyServlet extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException {

      getServletConfig().getServletContext().getRequestDispatcher(
        "/MyApplication.html").forward(request,response);

  }

}

或者您也可以直接在servlet中或JSP中动态生成内容,或者使用您喜欢的任何技术 - 这通常非常有用!

回应您的评论:

因为您希望将每个路径映射到servlet,所以您将获得无限循环。具有InputStream的解决方案可能如下所示:

public class SomeServlet extends HttpServlet {

    @Override
    protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
            throws ServletException,
            IOException {

        final InputStream is = getClass().getClassLoader().
                 getResourceAsStream("/com/example/MyApplication.html");
        final byte[] buffer = new byte[255];
        int len = 0;
        while ((len = is.read(buffer)) != -1) {
            response.getOutputStream().write(buffer, 0, len);
        }
        response.flushBuffer();

    }
}

将MyApplication.html文件放在com.example包中的源文件夹中。

如果您不想将html文件放在源文件夹中,您还可以使用任何其他方法创建InputStream(例如,使用FileInputStream从任何文件中)。