【问题标题】:How to manipulate jsp hyperlinks in doGet method inside a Servlet?如何在 Servlet 内的 doGet 方法中操作 jsp 超链接?
【发布时间】:2013-08-18 03:18:36
【问题描述】:

我是 Java 世界的新手。我正在尝试使用一个简单的 CSV 文件作为数据库来开发一个 ACME Demo 来验证用户名和密码。我想知道是否可以在index.jsp页面上做一些超链接,如果你点击它们会带你到同一个网站的其他jsp页面。据我所知,超链接将调用 servle 中的 doGet 方法,在我的情况下,如果您的凭据当然有效,您将被重定向到那些安全的 jsp。所以它只适用于一个超链接,无论有多少链接,我都想让事情变得更加动态??!!

jsp

 <a href ="<%=request.getContextPath()%>/LoginNow.do"> Content1</a>
  <!-- Here I would like to add more links -->

小服务程序

    @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
  {
    processRequest(request, response);

    //response.sendRedirect("login.jsp");

     HttpSession session= request.getSession(true);

    if ((session.getAttribute("userSession") != null) && (session.getAttribute("userSession").equals(session.getId())))
    {
      response.sendRedirect("content1.jsp");
      // How can my doGet method manage multiple links here?

    }
    else
    {
      response.sendRedirect("login.jsp");
    }
  }

【问题讨论】:

  • 您的 LoginNow.do servlet 不应该实际登录用户而不是检查他们是否已经登录吗?然后您可以检查会话以查看用户是否在每个 JSP 的顶部登录,而不是不断地将他们重定向到一个 servlet,只是为了检查两个会话变量并重定向回一个 JSP。
  • 感谢您的提问。好吧 ..!用户只要登录就可以浏览网站中的所有安全链接,但是如果他们单击注销,除非他们再次登录并且将在 doPost 方法中创建一个新会话,否则他们将无法再执行此操作。这不是关于会话管理,而是关于如何在 servlet 中的 doGet 方法中操作 jsp 中的多个链接?正如我所说,这是一个 ACME 演示。

标签: java jsp servlets


【解决方案1】:

您应该使用 servlet 过滤器

过滤器是一个组件,它将针对给定 url-mapping 的所有请求和/或给定 servlet 的所有请求调用。

过滤器然后可以检查用户是否已登录。如果他已登录,它会要求容器继续,即调用目标 servlet,就好像没有过滤器一样。如果他没有登录,过滤器可以返回错误,或者重定向到登录页面,或者做任何它想做的事情。

有关 servlet 过滤器的介绍和示例,请参阅 http://www.oracle.com/technetwork/java/filters-137243.html

【讨论】:

  • 非常感谢您的建议,我已经开发了一个过滤器,它将首先检查会话是否存在。如果会话存在,它将直接呈现请求的页面,如果不存在,过滤器会将用户重定向到将显示登录页面的 servlet。
猜你喜欢
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多