我在我的web.xml文档中有这个。我想要一个欢迎列表,所以我不需要键入主页的路径了。但每次点击我的tomcat页面中的应用程序,它显示所请求的资源不可用。 listener listener-classweb.Init
<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>
我的servlet为jsp页面
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 …如何正确执行?
您需要将JSP文件放在/index.jsp中,而不是放在/WEB-INF/jsp/index.jsp中。这样一来,整个servlet都是超级顺畅的。WebContent |-- META-INF |-- WEB-INF | `-- web.xml `-- index.jsp
如果你绝对有兴趣,你需要调用这个奇怪的方式,那么你应该把它映射到一个URL模式的/index.jsp而不是/ index。您只需要更改它以从请求而不是从配置获取请求分派器,并摆脱整个init()方法。
如果你真的打算有一个“主页小程序”(因此不是一个欢迎文件 – 这有一个完全不同的目的,即当一个文件夹被请求时,这个文件夹被提供的默认文件,这不是特别的根文件夹),那么你应该在空字符串URL模式上映射servlet。
<servlet-mapping> <servlet-name>index</servlet-name> <url-pattern></url-pattern> </servlet-mapping>
参见Difference between / and /* in servlet mapping url pattern。