【问题标题】:How to know from which jsp page is calling the servlet如何知道从哪个jsp页面调用servlet
【发布时间】:2016-09-27 07:46:18
【问题描述】:

我正在做一个使用 jsp 页面和 servlet 的项目。

在我的 servlet 中,我需要确定哪个 jsp 页面正在执行请求。

我该怎么做?

【问题讨论】:

  • 什么样的要求?来自浏览器的外部请求或一些内部包含/调度?
  • 在 jsp 页面中,我有一个表单正在网页中发布帖子@Thilo
  • 您可以读取请求上的referer属性,但它不安全。阅读有关此问题的第一个解决方案以获取更多选项:stackoverflow.com/questions/10791109/…
  • 可能正在使用 sendRequest
  • xyproblem.info(换句话说,告诉您您实际上要解决哪个问题,您很可能错误地认为这是正确的解决方案)

标签: java jsp servlets


【解决方案1】:

识别请求来自哪个表单的最简单方法是添加一个包含表单标识符的隐藏字段。但这是一个非常罕见的要求:如果您发布到相同的 URL,通常意味着帖子的来源无关紧要。如果它很重要(为什么?),区别应该在于发布的数据(因此建议使用隐藏字段),或者您应该发布到不同的 URL。 Servlet 并不昂贵,以至于您需要限制它们的数量。

【讨论】:

  • 这很重要,因为我有不同的 jsp 页面,每个人都有一个自定义表单,我只需要使用一个 servlet 来管理它们(不是我的决定,如果是我的话,我会为每个页面创建一个 servlet但练习说只使用一个)。因此,当出现请求时,我需要知道是哪个 jsp 页面或表单生成的!顺便说一句,我找到了解决方案 :) 谢谢大家!
  • @untruste 好吧,您应该知道根据用户向您发送数据的预期形式,对吗?
【解决方案2】:

我找到了解决办法。

我为提交按钮设置了一个名称。

<input type="submit" name="button" value="button1">

然后在我检查的 servlet 中

String r = request.getParameter("button");

这样做我知道请求来自哪里

【讨论】:

    【解决方案3】:

    对于您的 servlet,我想您正在使用 doGet/doPost 来处理请求和返回响应,然后在来自 jsp 的请求中,您始终可以添加一个隐藏的输入字段,让您的 servlet 知道您来自哪个 jsp,如下所示:

    在你的jsp中:

    添加一个新的隐藏输入文本字段:

      <input type="hidden" name="jspname" value="jspname" />
    

    在您的 Servlet 中:

    doPost 使用 getparameter 方法,doGet 使用 getQueryString():

    在doPost中:

    String jspname = request.getParameter("jspname");
    

    通过使用 jspname 字符串,您可以轻松找出它正在使用的 jsp。

    【讨论】:

      【解决方案4】:

      使用hidden input 是其他答案的解决方案。但是你可以在没有hidden input 的情况下做到这一点。

          String referer = new URI(request.getHeader("referer")).getPath();
      

      referer 字符串为您提供完整的URI。此外,要获取jsp 页面名称,您可以使用java code

          String[] uriNames = referer.split("/");
          String jspPageName = uriNames[uriNames.length-1];
      

      还可以使用regex 获取jsp 页面名称。

          Pattern pattern = Pattern.compile("(\\w+)(\\.)(jsp)");
          Matcher matcher = pattern.matcher(mydata);
          String jspPageName = "";
          while(matcher.find()) {
               jspPageName = matcher.group();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        • 1970-01-01
        • 1970-01-01
        • 2011-05-01
        相关资源
        最近更新 更多