Java与PHPweb开发比较
发表时间:2018-11-1
发布人:葵宇科技
浏览次数:34
一直很想写一篇这样的文章。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参数处理
JAVAPHPGET均是通过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");请求来源IPHttpServletRequest.getRemoteAddr方法$_SERVER["REMOTE_ADDR"]
3.响应请求
JAVAPHP自定义状态码HttpServletResponse.setStatus(404);header("HTTP/1.1 404 Not Found"); 重定向response.sendRedirect("/hello");header("location: [url]");4.Cookies & Session
JAVAPHPSession存储默认存储在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