web开发java VS python

一、基本概念和知识点

1、web server:实现了http协议的tcp服务器

2、application server:实现程序逻辑的服务器

3、web container:提供基础支持的容器

4、proxy:代理,client与目标之间的中介

5、https:安全传输层协议(TLS)之上的http

6、servlet处理资源请求的程序逻辑,程序员自己处理多用户导致多线程问题

7、ServletContext:多个servlet共享的环境

8、servlet容器: 支持servlet执行的runtime

9、forward:server内部流程跳转到别的页面

10、redirect:强制client二次请求,可以体现在client的地址栏

11、session:从客户打开浏览器连接到服务器,到客户关闭浏览器离开这个服务器,称做一个会话。当客户访问服务器时,可能会反复连接这个服务器上的几个页面、反复刷新一个页面或不断地向一个页面提交信息等,服务器应当通过某种方法知道这是同一个客户,这时就需要session对象。  

12、cookie:每次http交互时client都会带上的数据,可以用于标记uid,数据存在client。

13、tomcat的server service connector engine servlet

server:对外暴露service,理论上可以不仅仅是http服务

service:connector+container,http服务

connector:处理外部的请求连接,如socket和传输相关

container:具体的处理逻辑的环境,其分为engine、host、context

engine:servlet的容器(支持多个虚拟主机)

host:虚拟主机(区别于硬件上的主机),对应一个网站(公网ip)

context:一个app的上下文环境(一个host可以有多个app)

14、filter 对每个请求都进行的逻辑

15、listener 事件发生时自动执行的代码,分为ServletContext,HttpSession和ServletRequest

16、csrf:(Cross-site request forgery)跨站请求伪造,利用登陆后的session信息,伪装浏览器发http请求。防御措施:api尽量不用get,因为get是单个的url,很容易被嵌入;每个post添加token域,保证是从固定的页面发起请求;或者直接添加一个账号验证或验证码;判断referer;在 HTTP 头中自定义属性并验证

17、XSS:跨站脚本(Cross-site scripting),在用户的输入中加入自动执行的js代码(可以是<script>也可以是隐藏html的事件触发),防范主要是对用户输入的转义

18、DDoS:Distributed Denial of Service 破坏信息安全“保密性”、“完整性”和“可用性”中的可用性,利用大量肉鸡模仿真实的请求,导致server资源耗尽。包括ARP、ICMP、IP、UDP、TCP和应用层的攻击等几个层次。

19、变量的范围包括 page、request、session、application等

二、java和python(以django为例)对web开发的支持

1、基础设施的层次

python:wsgi服务器、wsgi标准、web框架、app

java:app server、servlet容器、servlet、request+request、session

2、标准 wsgi  vs javaee

3、signal VS listener 

4、middleware  VS Filter

5、django middleware tips:

process_request:收到请求后,解析url,确定view之前

process_view:进入view回调之前

view_callback:具体回调

process_template_response:view执行后,模板渲染之前(可以改模板)

process_response:生成response之后

三、实际开发流程

1、springmvc + mybatis

目录结构

pojo/entry/model

dao

service

controller

filter

依次实现数据库模式、model、dao、service、controller

打包成war

deploy到tomcat等服务器

2、django

写model、配url、写view、设置template、写配置文件

打包上线

不需要pojo、dao、service等部分

四、总结

1、java是静态类型语言,但是web开发要的是灵活性,所以java做了很多规范来提供web开发的支持,比如 javaee体系、servlet、request、header、cookie、session、filter、listener等的封装,jdbc、orm映射等

2、python是动态类型语言,支持闭包、装饰器,语言的表达能力是远大于java的,所以python没有为web开发设计很细的规范,只是定义了wsgi,使app服务器和web 框架解耦。在web框架内部,因为是脚本语言,不需要抽象request、header、cookie等数据结构(直接用dict就行),orm的映射也是很轻的。

3、python不需要依赖注入和反射(内置直接支持字符串的import)、aop(语言支持高阶函数)、webmvc(支持url直接映射回调)、不需要设计可插拔的架构(直接可以用配置文件来搞定)、不需要处理所有和类型相关的问题

相关推荐