web发展过程
-
了解web服务器与应用服务器区别
Web服务器只负责处理HTTP协议,只能发送静态页面的内容。而JSP,ASP,PHP等动态内容需要通过CGI、FastCGI、ISAPI等接口交给其他程序去处理。这个其他程序就是应用服务器。
- 作为一个java程序员,在web编程中,明白servlet容器+web服务器组合而成的用服务器,常用的tomcat、jetty,这里盗用一张图
- 在学习中我们不需要了解最底层的实现原理,只是做一个了解,当我们到达一定的能力后再去窥探其中的原理,我们需要明白的就是我们编写的java程序能够被服务器解析并返回即可(每个人见解不一样)
- 作为一个java程序员,在web编程中,明白servlet容器+web服务器组合而成的用服务器,常用的tomcat、jetty,这里盗用一张图
-
了解早期实现动态交互功能技术—–CGI通用网关接口
最开始Web浏览器中展现的完全是静态页面,与用户的交互几乎没有,随着互联网发展,迫切需要与应用程序进行交互,这时候CGI就出现了。它不是一种具体的技术,而是一种规范。(本人也处于了解阶段,知道而已)
- CGI工作原理:每当客户请求CGI的时候,WEB服务器就请求操作系统生成一个新的CGI解释器进程,该进程处理完一个请求后退出,下一个请求来时再创建新进程。并发量小没有问题,但是并发量大了就不行了,下面盗用一张图来理解
- CGI工作原理:每当客户请求CGI的时候,WEB服务器就请求操作系统生成一个新的CGI解释器进程,该进程处理完一个请求后退出,下一个请求来时再创建新进程。并发量小没有问题,但是并发量大了就不行了,下面盗用一张图来理解
-
了解CGI与servlet区别
处理请求方式:
- Servlet运行在一个进程中,
对于每个请求则会生成一个单独的线程,由这些独立的线程处理对应的http请求,Servlet执行完毕后不会销毁,而是驻留在内存中直到Servlet Container关闭,以便能随时处理http请求; - CGI则是Web Server针对每个Http请求生成一个CGI请求,然后将针对CGI请求生成一个单独的进程;由于CGI的这种机制,我们都知道一个普通的PC机有65536个端口,每个进程运行需要一个端口,那就是说CGI程序同时最多(当然是不可能的,因为还有其他程序)可以处理65536个请求,对于高并发的环境,这样的程序根本满足不了。
数据共享: - Servlet是由多个线程处理请求,所以各个请求之间可以进行很容易的进行数据共享;
- 而由于CGI涉及多个进程,进程之间的通信。
移殖性: - 针对Servlet,如果将编译生成的字节码文件移动到另外的主机或者另外的操作系统中,只要是存在JVM就仍然可以运行;
- 但是对于CGI程序,因为是直接面向OS,而不是像Java程序一样面向虚拟机,所以当该程序移动到另外的OS时可能需要更改代码或者重新编译
- Servlet运行在一个进程中,
web应用服务器tomcat目录结构学习
需要明白的是Webapps下是项目放置的目录,其项目需要遵循一定的目录结构规则才能够有效,否则部署失败。
-
conf文件夹中配置文件学习
server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机,get请求乱码处理等;
- 修改端口:windows 查看端口情况netstat -ano 查看是否8080端口被占用了,linux(centos 7) 通过netstat -tlnp 查看 如果被占用看情况修改tomcat端口或杀死对应进程id—–修改端口在标签Connector port=”8080”修改重启即可
- 添加虚拟主机:这个网上也有教程,这里不累赘,主要是在后面学习了ngnix后通常都是使用nginx完成虚拟主机功能的,这里给出一篇文章参考参考文献,最常用的是方式三,后面学习了maven之后通过pom配置将tomcat嵌入进去更加的方便管理,
- 处理get乱码:在servlet.xml中的标签Connector port=”8008”….中添加属性 URIEncoding=”UTF-8”,这种方式并不推荐,好的方式是通过包装类HttpServletRequestWrapper对HttpServletRequest进行一次包装,然后在给后面程序的使用,参考方案。
-
webapps目录下项目结构学习
项目名称(如果是ROOT,则访问时,路径可以不需要写项目名称)
—–WEB-INF:这个目录下的文件,是不能被客户端直接访问的。
———-classes:存放Java字节码文件的目录。
———-lib:用于存放该工程用到的库。
———-web.xml:web工程的配置文件,完成用户请求的逻辑名称到真正的servlet类的映射。
在我的学习过程中,使用过eclipse、和 idea两款IDE工具,它们运行和部署的方式有些不同,这个可以在网上搜索到相关信息
eclipse方式:eclipse内使用tomcat项目究竟被部署到哪里
idea方式: intellij idea在运行web项目时部署的位置
参考文献:
从nginx的运行联想到的Servlet和 CGI
Tomcat7目录结构详解
初学JavaWeb需要知道的目录结构与配置