Does PHP Have an Equivalent of Java's RequestDispatcher.forward?

后端 未结 7 2219
南笙
南笙 2021-02-06 03:32

In Java I can write a really basic JSP index.jsp like so:

<% request.getRequestDispatcher(\"/home.action\").forward(request, response); %>

7条回答
  •  不要未来只要你来
    2021-02-06 04:05

    The trick about Request.Forward is that it gives you a clean, new request to the action you want. Therefore you have no residu from the current request, and for example, no problems with scripts that rely on the java eq of $_SERVER['REQUEST_URI'] being something.

    You could just drop in a CURL class and write a simple function to do this:

    'belfabriek'));
         * If you want to send a File via post (to e.g. PHP's $_FILES), prefix the value of an item with an @ ! 
         * @param string $url url to post data to
         * @param Array $vars Array with key=>value pairs to post.
         * @return string HTML output
         */
        public static function Post($url, $vars, $auth = false) 
        {
           return self::doRequest('POST', $url, $vars, $auth);
        }
    
        /**
         * CURLHandler::doRequest()
         * This is what actually does the request
         * 
         * - Create Curl handle with curl_init
         * - Set options like CURLOPT_URL, CURLOPT_RETURNTRANSFER and CURLOPT_HEADER
         * - Set eventual optional options (like CURLOPT_POST and CURLOPT_POSTFIELDS)
         * - Call curl_exec on the interface
         * - Close the connection
         * - Return the result or throw an exception.
         * 
    * @param mixed $method Request Method (Get/ Post) * @param mixed $url URI to get or post to * @param mixed $vars Array of variables (only mandatory in POST requests) * @return string HTML output */ public static function doRequest($method, $url, $vars=array(), $auth = false) { $curlInterface = curl_init(); curl_setopt_array ($curlInterface, array( CURLOPT_URL => $url, CURLOPT_CONNECTTIMEOUT => 2, CURLOPT_RETURNTRANSFER => 1, CURLOPT_FOLLOWLOCATION =>1, CURLOPT_HEADER => 0)); if (strtoupper($method) == 'POST') { curl_setopt_array($curlInterface, array( CURLOPT_POST => 1, CURLOPT_POSTFIELDS => http_build_query($vars)) ); } if($auth !== false) { curl_setopt($curlInterface, CURLOPT_USERPWD, $auth['username'] . ":" . $auth['password']); } $result = curl_exec ($curlInterface); curl_close ($curlInterface); if($result === NULL) { throw new Exception('Curl Request Error: '.curl_errno($curlInterface) . " - " . curl_error($curlInterface)); } else { return($result); } } }

    Just dump this in class.CURLHandler.php and you can do this:

    ofcourse, using $_REQUEST is not really safe (you should check $_SERVER['REQUEST_METHOD']) but you get the point.

    
    

    Ofcourse, CURL's not installed everywhere but we've got native PHP curl emulators for that.

    Also, this gives you even more flexibility than Request.Forward as you could also catch and post-process the output.

提交回复
热议问题