我有以下项目结构:
我正在尝试从 index.jsp 导航到 concerts.jsp :
的index.jsp
<li class="active"><a href="/ConcertsController">Concerts</a></li>
这是我的ConcertsController:
@WebServlet("/ConcertsController")
public class ConcertsController extends HttpServlet {
private static final long serialVersionUID = 1L;
public ConcertsController() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
request.getRequestDispatcher("/WEB-INF/pages/concerts.jsp").forward(request, response);
}
...
}
当我运行应用程序,然后单击 index.jsp 中的链接时, localhost:8080 / ConcertsController URL打开,我得到了
请求的资源不可用
错误。
编辑1:我正在使用Tomcat v7.0,servlets v3.0和Java 8。
编辑2(可能重复):嗯,当然我需要能够在不使用jstl库的情况下完成此操作。
编辑3:当 localhost:8080 / ConcertsController 打开时,我找不到&#34;资源&#34;错误。但是当我手动编辑 localhost:8080 / AppName / ConcertsController 的网址时,它可以正常工作。
答案 0 :(得分:1)
URL localhost:8080/ConcertsController
表示应用程序名称为ConcertsController
,端口号为8080
,应用程序在本地运行。但是你没有ConcertsController
申请。
所以你得到错误
请求的资源不可用
有两种解决方案
将<a href="/ConcertsController">
更改为<a href="<%${pageContext.request.contextPath}%>/ConcertsController">
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
然后
更改<a href="/ConcertsController"> to <a href="${contextPath}/ConcertsController">
答案 1 :(得分:1)
使用
<a href="${pageContext.request.contextPath}/ConcertsController">
此外,在将请求转发给cencerts.jsp时,请使用ServletContext.getRequestDispatcher(....)
ServletRequest.getRequestDispatcher()方法将评估相对于请求路径的路径。但是对于ServletContext的方法,path参数不能是相对的,必须以/(/表示Web应用程序的根目录而非当前相对路径)开头。
答案 2 :(得分:-1)
尝试使用以下内容:
request.getRequestDispatcher("/pages/concerts.jsp").forward(request, response);
而不是:
request.getRequestDispatcher("/WEB-INF/pages/concerts.jsp").forward(request, response);