一直很想写一篇这样的文章。Java和PHP作为web开发的2个主流语言,他们之间有什么不同呢?在项目开发时,我们应该怎么去做选择。
1.运行方式
1.1 PHP的运行方式
客户端发送http请求到nginx,nginx通过fastcgi与php-fpm进程通信。php-fpm执行完成后把结果返回给nginx,最终输出到客户端浏览器。
参考fastcgi:https://baike.baidu/item/fastcgi/10880685?fr=aladdin
1.2 Java的运行方式
Servlet容器,比如Tomcat和Jetty等。一个Servlet容器可以运行多个Servlet实例。
当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类,此时它贮存于内存中。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。每一个请求都是一个线程,而不是进程,因此,Servlet对请求的处理的性能非常高。
参考:https://www.ibm/developerworks/cn/java/j-lo-servlet/
总结:PHP是以多进程的方式运行,并且使用fastcgi与web通讯;Java需要依赖Tomcat等Servlet容器,以多线程的方式运行。
2.接受请求,GET/POST参数处理
JAVA | PHP | |
GET | 均是通过HttpServletRequest.getParameter方法获取 GET/POST根据方法名定义doGet/doPost,如果是spring,使用RequestMapping定义 | 使用$_GET全局变量获取 |
POST | 使用$_POST全局变量获取 | |
原始请求体 | BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); String body = reader.readLine(); | file_get_contents("php://input"); |
请求来源IP | HttpServletRequest.getRemoteAddr方法 | $_SERVER["REMOTE_ADDR"] |
3.响应请求
JAVA | PHP | |
自定义状态码 | HttpServletResponse.setStatus(404); | header("HTTP/1.1 404 Not Found"); |
重定向 | response.sendRedirect("/hello"); | header("location: [url]"); |
4.Cookies & Session
JAVA | PHP | |
Session存储 | 默认存储在heap中,创建的cookies默认名称是JSESSIOINID。servlet.destory()方法会导致session丢失。 | 默认使用文件方式,存储在/tmp目录下,创建的cookies默认名称是PHPSESSID。 重启php-fpm并不会丢失数据。 |
调用方式 | 读取:HttpServletRequest.getSession().getValue(name); 写入: HttpServletRequest.getSession().setAttribute(name, value); | 读取:$_SESSION['key'] 写入:$_SESSION['key'] = mixed |
更多推荐
Java与PHPweb开发比较
发布评论