2016-09-27 123 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(); 
    }