Java servlet - 导航到页面

时间:2017-12-05 23:47:56

标签: java jsp servlets

我有以下项目结构:

enter image description here

我正在尝试从 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 的网址时,它可以正常工作。

3 个答案:

答案 0 :(得分:1)

URL localhost:8080/ConcertsController表示应用程序名称为ConcertsController,端口号为8080,应用程序在本地运行。但是你没有ConcertsController申请。 所以你得到错误

  

请求的资源不可用

有两种解决方案

  1. 如果您不使用JSTL。
  2. <a href="/ConcertsController">更改为<a href="<%${pageContext.request.contextPath}%>/ConcertsController">

    1. 如果使用JSTL,那么<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);