使网站的欢迎页面成为一个servlet

Suh*_*pta 6 java servlets

我可以将网站的欢迎文件作为servlet吗?如果有,怎么样?我在尝试这样的事情:

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

<!-- FilterForwarded is a servlet -->
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

    <servlet-mapping>
       <servlet-name>FilterForwarded</servlet-name>
       <url-pattern>/FilterForwarded</url-pattern>
   </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

这是web.xml中定义的映射.当我/FilterForwarded在welcome-file中使用时,当我尝试部署时收到此消息:错误配置:欢迎文件必须是相对路径:/ 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)
Run Code Online (Sandbox Code Playgroud)

gro*_*odt 4

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

或者您是否要求仅记录登陆页面的客户端 IP?

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

<servlet-mapping>
    <servlet-name>FilterForwarded</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

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