2017-02-07 25 views
0

我想安裝PHP Java Bridge,我可以從PHP調用Java方法,但是我無法在我的java類中獲取請求對象(HttpServletRequest)。我怎麼弄到的?如何在PHP Java Bridge中獲取HttpServletRequest對象?

我的PHP源代碼是這樣的。

<?php require_once("http://localhost:8080/PJBridge/java/Java.inc"); 
echo "PHP JAVA Bridge -- Calculator Test Application <br>" 

$Calc= new java("test.math.Calc"); 
$val1 = 20; 
$val2 = 10; 
echo "<br> Addition of $val1 and $val2 is"; 
echo $Calc->add($val1,$val2); 


$hello = new java("test.Hello"); 
echo "<br>"; 
echo $hello->sayHello("PHP from Java"); 
echo "<br>"; 
?> 

的Java類來源是象下面這樣: -

public class Hello implements ServletRequestAware{ 


HttpServletRequest request; 
public Hello(){ 

} 

@Override 
public void setServletRequest(HttpServletRequest request) { 
    this.request = request; 

} 



public String sayHello(String name){ 
    return "Hello " + name ; 
} 
} 

我得到預期的結果,但我需要的客戶端IP,所以我需要訪問請求對象,但無法獲取。

+0

Eh? 'HttpServletRequest'直接提供給你的Servlet。 – EJP

+0

這可能是一個很難回答的問題,但我每次都會收到空請求對象。如果我將應用程序作爲Web應用程序運行,那麼我將獲取請求對象,但是當PHP使用PHP Java橋啓動請求時,該時間將爲空。 – dpilwal

+0

查看客戶端和服務器的代碼源,我無法確定client_ip在servlet中註冊和可用的位置。 (通過客戶端IP,我的意思是可用的:$ _SERVER ['REMOTE_ADDR']) 我想你是在方法'sayHello(client_ip)'中發送了值還是使用了java_session()。如果你很好奇,看看[這次嘗試](https://github.com/belgattitude/soluble-japha/blob/master/test/src/SolubleTest/Japha/Bridge/Driver/DriverContextTest.php#L105)我已經嘗試過。 –

回答

0

不能回答HttpServletRequest的,

,但如果你的想法是傳輸客戶端遠程IP到Java側......你可能不得不採取另一條路徑。 AFAIK PHPJavaBridge將只知道客戶端的IP地址(php腳本調用Java.inc - 通常是本地主機),而不是遠程用戶IP。所以即使你修復了HttpServletRequest,你也不會真正擁有你所期望的。我可能是錯的,當然...

如果我不得不這樣做,我會用兩種:

發送遠程客戶端IP的方法

<?php 
$javaObject = new java('...'); 
$javaObject->log('username', $_SERVER['REMOTE_ADDR']); 

或將其設置在java會議

<?php 
java_session('remote_ip', $_SERVER['REMOTE_ADDR']); 

我不使用的Java.inc了,所以我不完全確定的語法的會話,但如果你正在尋找的相關信息,看看到soluble-japha session usagecontext。它可能會幫助你,語法不同,但幾乎兼容。

相關問題