Original post:
Http://blog.caucho.com/2009/04/14/using-php-as-a-spring-mvc-view-via-quercus/
This week, I 've been prepping for a talk on Quercus in which I promised to show a demo of Spring MVC using a PHP view. so that means that I actually had to do it. turns out it was quite easy and PHP makes for a very nice, compact view technology for Spring MVC. this is a bit of tease since the code for this won't go out until at least next week, but since a number of people have been asking for thi S a while, I thought I 'd give a preview...
First, let me show how it looks by using the sample "ImageDB" application that ships with Spring. Here's a screenshot of the app in action:
Basically, you upload an image to the page and it keeps track of what you 've got uploaded in a database. Here are the JSP and PHP views side-by-side:
<% @ Page session = "false" %> <% @ page import = "java. util. list, java. util. iterator, org. springframework. samples. imagedb. imageDescriptor "%> <! -ImageList. jsp-> <Html> <body> <% List images = (List) request. getAttribute ("images"); for (Iterator it = images. iterator (); it. hasNext ();) {ImageDescriptor image = (ImageDescriptor) it. next (); %> <table border = "1" cellspacing = "0" cellpadding = "5"> <tr> <td width = "10%"> Name </td> <% = image. getName () %> & nbsp; </td> </tr> <td colspan = "2"> "height =" 100 "> </td> </tr> <td> Description (<% = image. getDescriptionLength () %>) </td> <% = image. getaskdescription () %> & nbsp; </td> </tr> </table> <p> <%} %> <P> <table border = "1" cellspacing = "0" cellpadding = "5"> <form action = "imageUpload" method = "post" encType = "multipart/form- data "> <tr> <td width =" 10% "> Name </td> <input type =" text "name =" name "> <br> </ td> </tr> <td> Content </td> <input type = "file" name = "image"> <br> </td> </tr> <td> Description </td> <textarea name = "description" cols = "80" rows = "5"> </textarea> </td> </tr> <td colspan = "2"> <input type = "submit" value = "Upload image"> </td> </tr> </form> </table> <P> <a href = "clearDatabase"> Clear database </a> </Body> |
<? Php foreach ($ images as $ image) {?> <Table border = "1" cellspacing = "0" cellpadding = "5"> <tr> <td width = "10%"> Name </td> <? = $ Image-> getName ()?> & Nbsp; </td> </tr> <td colspan = "2"> getName ()?> "Height =" 100 "> </td> </tr> <td> Description (<? = $ Image-> getDescriptionLength ()?>) </Td> <? = $ Image-> getmediadescription ()?> & Nbsp; </td> </tr> </table> <p> <? Php }?> <P> <table border = "1" cellspacing = "0" cellpadding = "5"> <form action = "imageUpload" method = "post" encType = "multipart/form- data "> <tr> <td width =" 10% "> Name </td> <input type =" text "name =" name "> <br> </ td> </tr> <td> Content </td> <input type = "file" name = "image"> <br> </td> </tr> <td> Description </td> <textarea name = "description" cols = "80" rows = "5"> </textarea> </td> </tr> <td colspan = "2"> <input type = "submit" value = "Upload image"> </td> </tr> </form> </table> <P> <a href = "clearDatabase"> Clear database </a> </Body> |
JSP:
<%@ page session="false" %> <%@ page ="java.util.List," %><!– imageList.jsp –>
What I think is interesting between these two is that the PHP, even though it's callingJava objects, Has a simpler syntax. It's not a major issue, but you can see that PHP is as reasonable as any other view for Java.
Now how do you configure it? Just add the QuercusView class to a UrlBasedViewResolver and give a php suffix and you're done:
If you're interested in the implementation... The view was pretty easy to connect up once I learned Spring's view API. it's essentially a Servlet. service () call with a map of model values. so the QuercusView class above is just a modified QuercusServlet that injects the model values as PHP globals. i'm not sure that's right just yet, but it's a start. the other option wocould be to put the values as PHP superglobals or in a specialized Spring array.