如何在 web.xml 中配置欢迎文件列表
Posted
技术标签:
【中文标题】如何在 web.xml 中配置欢迎文件列表【英文标题】:How to configure welcome file list in web.xml 【发布时间】:2013-01-16 21:01:00 【问题描述】:我的 web.xml 文档中有这个。我正在尝试创建一个欢迎列表,因此我不再需要键入主页的路径。但是每次点击我的tomcat页面中的应用程序时,它都会显示请求的资源不可用。
<listener>
<listener-class>web.Init</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>index</servlet-name>
<servlet-class>web.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
我的jsp页面servlet
package web;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
public class IndexServlet extends HttpServlet
private Logger logger = Logger.getLogger(this.getClass());
private RequestDispatcher jsp;
public void init(ServletConfig config) throws ServletException
ServletContext context = config.getServletContext();
jsp = context.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
logger.debug("doGet()");
jsp.forward(req, resp);
为什么它仍然不起作用?我仍然需要在我的 url 中输入 /index...如何正确执行此操作?
【问题讨论】:
你在你的 URL 中输入了什么,你有 index.html 页面吗?? 例如我在tomcat管理器中点击了我的webapp。它将首先显示 url localhost:8080/myProj。所以我仍然需要在那个 url 之后输入索引来打开我的欢迎页面。这有什么问题? 您的欢迎文件是 [context root]/index.jsp 将不会为欢迎页面调用 servlet。 @BalusC 已经给出了完整的答案,请关注它 【参考方案1】:您需要将 JSP 文件放入 /index.jsp
而不是 /WEB-INF/jsp/index.jsp
。顺便说一下,这样整个 servlet 就显得多余了。
WebContent
|-- META-INF
|-- WEB-INF
| `-- web.xml
`-- index.jsp
如果您绝对肯定需要以这种奇怪的方式调用 servlet,那么您应该将其映射到 /index.jsp
而不是 /index
的 URL 模式。您只需将其更改为从 request
而不是从 config
获取请求调度程序,并摆脱整个 init()
方法。
如果你真的打算有一个“主页 servlet”(因此不是一个欢迎文件——它有一个完全不同的目的;即当一个 folder 被请求,因此不是根文件夹),那么您应该将 servlet 映射到空字符串 URL 模式。
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
另见Difference between / and /* in servlet mapping url pattern。
【讨论】:
您在/WEB-INF/jsp/index.jsp
文件夹中有它。您在根文件夹中没有 /index.jsp
。答案是放在根文件夹,与/WEB-INF
文件夹同级。
我试图改变它,但仍然是同样的问题。资源不可用
清理、重建、重新部署、重启。
谢谢你的回复,这张图是对的:)【参考方案2】:
我猜你想要的是将索引 servlet 用作欢迎页面,所以更改为:
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
以便使用索引 servlet。请注意,您需要一个 servlet spec 2.4 容器才能执行此操作。
还要注意,@BalusC 得到我的投票,因为您的索引 servlet 本身是多余的。
【讨论】:
我有 servlet 3.1,但这仍然不适合我。但是像 @WebServlet("") 这样将 webServlet 注释设为空是有效的。这是什么原因?【参考方案3】:我在*** link 中看到了一个很好的解决方案,它可以通过使用空字符串 URL 模式“”来帮助 defulat servlet 处理问题的读者:
@WebServlet("")
或
<servlet-mapping>
<servlet-name>yourHomeServlet</servlet-name>
<url-pattern></url-pattern> <!-- Yes, empty string! -->
</servlet-mapping>
【讨论】:
【参考方案4】:这是我将 Servlet 设置为欢迎页面的方式。
我为谁担心。
web.xml
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Demo</servlet-name>
<servlet-class>servlet.Demo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demo</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
Servlet 类
@WebServlet(name = "/demo")
public class Demo extends HttpServlet
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
【讨论】:
如果您需要在加载时调用 servlet,这是正确的答案。特别是如果您的 jsp 位于无法直接访问的 WEB-INF 文件夹下。【参考方案5】:我只是在 web.xml 文件中声明如下,它为我工作:
<welcome-file-list>
<welcome-file>/WEB-INF/jsps/index.jsp</welcome-file>
</welcome-file-list>
除了静态资源(css、js、图像)之外,公共目录中不存在任何 html/jsp 页面。 现在我可以使用以下 URL 访问我的索引页面: http://localhost:8080/app/ 它调用 /WEB-INF/jsps/index.jsp 页面。在生产中实时托管时,最终 URL 看起来像 https://eisdigital.com/
【讨论】:
【参考方案6】:这取决于您尝试从哪个文件访问这些文件。
如果它位于您的工作项目文件所在的同一文件夹中,那么您可以只使用文件名。不需要路径。
如果它位于您的工作项目文件的同一父文件夹下的另一个文件夹中,那么您可以使用如下 /javascript/sample.js 中的位置
在您的示例中,如果您尝试从您的 html 文件访问您的 js 文件,您可以使用以下位置
../javascript/sample.js
前缀../会转到文件的父文件夹(文件夹向上的旅程)
【讨论】:
以上是关于如何在 web.xml 中配置欢迎文件列表的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Jersey 容器中配置欢迎文件 (HTML/JSP)