我正在使用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);
我错过了什么?
由于
答案 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从任何文件中)。