6

我可以将网站的欢迎文件设为 servlet 吗?如果是,如何?我正在尝试类似的东西:

 <welcome-file-list>
    <welcome-file>FilterForwarded</welcome-file>
</welcome-file-list>

<!-- FilterForwarded is a servlet -->

部署时我没有看到任何错误,但是当我尝试打开网站abc.com时,我从浏览器收到一条消息,提示它无法连接到该网站。为什么会这样?

我希望当任何人访问该网站时,我应该能够存储客户端的公共 IP。为此,我编写了一个过滤器,在获取 IP 后,将其传递给 servlet(从那里我可以更新日志)。存储 IP 后,客户端会自动重定向到 index.jsp。有没有办法做到这一点?

编辑 :

    <servlet-mapping>
       <servlet-name>FilterForwarded</servlet-name>
       <url-pattern>/FilterForwarded</url-pattern>
   </servlet-mapping>

这是 web.xml 中定义的映射。当我/FilterForwarded在欢迎文件中使用时,我在尝试部署时收到此消息:错误配置:欢迎文件必须是相对路径:/FilterForwarded

从日志:

com.google.apphosting.utils.config.AppEngineConfigException: Welcome files must be relative paths: /FilterForwarded
at com.google.apphosting.utils.config.WebXml.validate(WebXml.java:125)
at com.google.appengine.tools.admin.Application.<init>(Application.java:150)
at com.google.appengine.tools.admin.Application.readApplication(Application.java:225)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:145)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:69)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:65)
4

1 回答 1

4

如果您将过滤器映射到 /*,您应该能够拦截所有请求,然后从那里记录 IP。

还是您要求只为登录页面记录客户端 IP?

如果是这样,您可以更改 Servlet 容器的默认 servlet,但请记住,这将更改与web.xml 中的映射不匹配的所有请求的默认 servlet。

<servlet-mapping>
    <servlet-name>FilterForwarded</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

一个更复杂但可能更好的解决方案是在您的 Java Web 容器前面放置一个 Web 服务器,并使用重写规则来代理您的后端 Servlet。这种方式意味着您可以控制为您的登录页面访问的 Servlet,而无需覆盖所有不匹配请求的默认 Servlet。不过,这对于您的问题可能有点过分了。

于 2012-09-07T11:22:49.850 回答