2016-09-27 128 views
0

我在做一个使用jsp页面和servlet的项目。如何知道从哪个jsp页面调用servlet

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

我该怎么做?

+0

什么样的要求?来自浏览器或某些内部包含/派发的外部请求? – Thilo

+0

在jsp页面中,我有一个表单在网页中进行发布@Thilo – untruste

+2

您可以读取请求中的referer属性,但它不可能是安全的。请阅读有关此问题的第一个解决方案以获取更多选项:http:// stackoverflow。com/questions/10791109/request-getheaderreferer -back-back-button-reload-the-page –

回答

1

我找到了解决方案。

我给提交按钮设置了一个名字。

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

,然后在servlet我

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

这样做,我从请求从

2

最简单的方法来的地方,以确定发出请求来自会的形式了解检查是添加一个包含表单标识符的隐藏字段。但这是一个非常罕见的要求:如果您发布到相同的URL,通常意味着该帖子的起源并不重要。如果它很重要(为什么?),差异应该在发布的数据中(因此隐藏字段的提议),或者您应该发布到不同的URL。 Servlet并不昂贵,您需要限制它们的数量。

+0

它很重要,因为我有不同的jsp页面,每个人都有一个自定义的表单,我只需要用一个servlet来管理它们(不是我的决定,如果是我的话我会为每个页面创建一个servlet,但练习说只使用一)。所以当发出请求时,我需要知道哪些jsp页面或表单生成了!顺便说一句我已经找到了我的解决方案:)谢谢大家! – untruste

+0

@untruste那么,你应该知道哪种形式的预期取决于用户发送给你的数据,是否正确? – AxelH

1

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

在你的JSP:

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

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

在servlet:

使用的getParameter米ethod对的doPost或getQueryString()进行的doGet:

中的doPost

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

通过利用jspname字符串的,你可以很容易地找到它正在使用哪个JSP。

0

使用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(); 
    }