【问题标题】:JSP link to another JSPJSP 链接到另一个 JSP
【发布时间】:2013-01-12 19:31:18
【问题描述】:

在我的 JSP 页面中,我希望将链接转发到另一个 JSP 页面。当用户在 home.jsp 上时,我希望他们去 login.jsp 等。我遇到的问题是找不到 JSP,除非我将页面放在项目文件夹中(在 WEB-INF 上方文件夹)。

我尝试了这些代码行,但没有一个成功:

<a href="/enq/WEB-INF/pages/login.jsp">
<a href="/WEB-INF/pages/login.jsp">
<a href="/pages/login.jsp">

它只适用于项目文件夹中的 JSP 页面,然后我使用下一行:

<a href="login.jsp">

但我希望 JSP 页面位于:WEB-INF/pages/

【问题讨论】:

  • WEB-INF目录是Web应用程序的私有区域,WEB-INF目录下的任何文件都不能通过http://somesite/WEB-INF/someresource.html等URL直接访问。 Web 容器不会提供此目录的内容。但是,应用程序中的类可以访问 WEB-INF 目录的内容。

标签: jsp servlets


【解决方案1】:

我已经解决了,我为每个 JSP 页面创建了 4 个 Servlet。每个 servlet 都将消息转发到相应的 JSP,如下所示:

request.getRequestDispatcher("/WEB-INF/pages/enquette.jsp").forward(request, response);

在JSP页面之间的a href:

<a href="/enq/enquette">

网络 XML:

<servlet-mapping>
<servlet-name>Enquette</servlet-name>
<url-pattern>/enquette</url-pattern>

【讨论】:

    【解决方案2】:
    <a href="/pages/login.jsp">
    

    它必须正常工作。在这种情况下,您会获得什么 HTTP 状态?

    【讨论】:

    • 我明白了:HTTP 状态 404 - /pages/home.jsp。说明 请求的资源不可用。
    • 你想如何发送这个请求?来自您的home.jsp?阐明您的页面的位置结构和它们的路径。
    • 我有一个名为 enq(项目名称)的文件夹。在 enq 我有 WEB-INF,在那里我有类、库、页面和 web.xml。在 web.xml 我已经声明了我的 Servlet。在 servlet 中,我只执行下一行代码: request.getRequestDispatcher("/WEB-INF/pages/home.jsp").forward(request, response);这将使我进入 home.jsp。
    • 使用request.getRequestDispatcher("pages/home.jsp").forward(request, response);
    • 那不行,我必须指定 WEB-INF 否则我会收到相同的 HTTP 错误,但感谢您的建议。
    【解决方案3】:

    如果您希望用户可以访问以下文件: /WEB-INF/pages/login.jsp

    您应该创建一个 servlet,并且应该更改 html 或 jsp 文件中的链接:

    <a href="/pages/login.jsp"> login page </a>
    

    创建一个小服务程序: 将此行添加到您的 web.xml 文件中:

    <servlet-mapping>
    <servlet-name>accessFiles</servlet-name>
    <url-pattern>/pages/*</url-pattern>  
    </servlet-mapping>
    
    
    <servlet>
    <servlet-name>accessFiles</servlet-name>
    <servlet-class>yourclass</servlet-class>
    </servlet>
    

    然后创建扩展 servlet 的 yourclass.java:

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    public class yourclass extends javax.servlet.http.HttpServlet {
    
     private String message;
    
      public void init() throws ServletException
      {
    
      }
    
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
                throws ServletException, IOException
      {
          String pathInfo = request.getPathInfo();
          request.getRequestDispatcher("/WEB-INF/pages/" + pathInfo).forward(request, response);
    
      }
    
      public void destroy()
      {
          // do nothing.
      }
    

    }

    getPathInfo() 将返回 servlet 模式 (/pages/) 之后的 URL 部分 那应该行得通。

    你也可以在/WEB-INF/pages/目录下添加更多的jsp文件,通过这个servlet将用户转发到想要的页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多