Java与PHPweb开发比较

一直很想写一篇这样的文章。Java和PHP作为web开发的2个主流语言,他们之间有什么不同呢?在项目开发时,我们应该怎么去做选择。

1.运行方式

1.1 PHP的运行方式

客户端发送http请求到nginx,nginx通过fastcgi与php-fpm进程通信。php-fpm执行完成后把结果返回给nginx,最终输出到客户端浏览器。

参考fastcgi:https://baike.baidu.com/item/fastcgi/10880685?fr=aladdin

1.2 Java的运行方式

Servlet容器,比如Tomcat和Jetty等。一个Servlet容器可以运行多个Servlet实例。

当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类,此时它贮存于内存中。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。每一个请求都是一个线程,而不是进程,因此,Servlet对请求的处理的性能非常高。

参考:https://www.ibm.com/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

你可能感兴趣的:(PHP,Java)