文章目录
二.web应用体系结构
2.1 web容器
Servlet没有main()方法,它受控于另一个Java应用,这个Java应用被称为Web容器,Tomcat就是这样一个容器。
对于每个请求,Web容器可以实例化servlet(或至少建一个新线程),可以调用servlet的doPost()或doGet()方法,把方法的重要参数(http请求和http响应对象)交给servlet,可以管理servlet的生死以及servlet的资源
2.1.1 指向某servlet请求的流程
Web服务器应用得到指向某servlet请求后,此时服务器将请求交给部署该servlet的容器,由容器向servlet提供http请求和响应,并且由容器调用servlet的方法(如doPost()、doGet())
最后线程结束,容器把响应对象转换为一个http响应,并把它返回浏览器,然后删除请求和响应对象
2.1.2 容器的作用
1.通信支持:利用容器提供的方法,可以让servlet和Web服务器对话,无需自己建立ServerSocket、监听端口、创建流等
2.生命周期管理:它能负责加载类、实例化和初始化Servlet、调用servlet方法以及垃圾回收。有了容器的控制,就不用太多考虑资源管理
3.多线程支持:容器会自动为它接受的每个servlet请求创建一个新的线程。servlet已经运行完相应的http方法,线程就会自动结束
4.声明方式实现安全:利用容器,可以使用xml部署描述文件来配置安全性,而不必将其硬编码写到servlet类代码中
5.JSP支持:容器可以将JSP代码翻译成真正的Java
因此说,有了容器我们可以更专注自己的业务逻辑,而不用过多考虑线程管理、安全性和网络通信等底层服务
2.2 关于Servlet名称
2.2.1 Servlet的三个名字
1.客户知道的URL名(虚拟的名字,完全为客户提供)
2.部署servlet人员定义的部署名(虚拟的内部名,只用于部署Servlet)
3.实际的文件名(开发人员的Servlet类拥有一个完全限定名,包括类名和包名)
2.2.2 Servlet多个名字的好处
1.灵活性高,移动文件而不必担心后期维护
2.安全性高,对客户隐藏了服务器的目录结构
2.3 关于部署文件
部署文件会告诉容器如何运行servlet和jsp:
1.可以使用两个xml元素把url映射到servlet
<?xml version="1.0" encoding="utf-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.4">
<!--一个部署描述文件可以声明多个servlet-->
<!--servlet-name把servlet和servlet-mapping元素绑定在一起-->
<!--servlet元素告诉容器哪个类文件属于一个特定Web应用-->
<1--servlet-name是部署名-->
<servlet>
<servlet-name>test Servlet</servlet-name>
<!--servlet-class是java类,也就是类的完全限定名-->
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test Servlet</servlet-name>
<!--url-pattern是客户所用的请求名,也就是用户知道的url名-->
<url-pattern>/Serv1</url-pattern>
</servlet-mapping>
</web-app>
2.对Web应用的安全角色、错误页面、标记库、初始配置信息等方面进行定制
也就是说,利用部署描述文件,可以利用一种声明方式修改应用,而无需修改源代码
2.4 MVC设计模式
若不使用mvc设计模式,那么流程图servlet请求的流程图如下:
我们发现业务逻辑与表示之间有很强的联系,因为我们需要在两者之间放别的东西,使得业务逻辑本身就能作为一个可重用的Java类。
因此,我们引入模型-视图-控制器(MVC)设计模式,它的核心就是把业务逻辑从servlet中抽出来,放到一个模型中(模型就是可重用的普通java类,它是业务数据和处理该数据的方法组合)
2.5 J2EE
J2EE是一种超级规范,它结合了sevlets、jsp、ejb规范。一个完全兼容j2EE应用服务器必须有一个web容器和一个ejb容器。
tomcat是一个web容器,而不是一个完整的j2EE应用服务器
如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢