介绍MVC的设计模式,一定要了解为什么要使用它?如果不知道他给我们解决了哪些便利,人云亦云的使用它,就不能体会这种设计模式带来的便利。
不妨剪去所有的枝桠,看清web应用的本质到底是什么东西.
不使用Servlet等服务器应用,我们应该如何构建一个web项目呢?即使是一个静态的WEB应用。
这是一个最简单的WEB请求、响应模型,我们使用浏览器(Client)访问网站(Web Server),以程序员的角度你应该如何实现这样一套系统呢?
1、在Client编写代码,与服务器端建立TCP/IP连接(网络通信)。
2、将我们的请求信息编码成二进制流,然后通过管道传输到web Server(IO流)。
3、服务器端处理客户端发来的请求,然后根据请求返回一个响应(也以字节流的形式传输)
4、客户端接受信息
5、关闭连接
如果是多个用户进行访问,那么服务器端需要我们编写更多的代码,如开辟多线程。
这是一个没有Servlet的web应用,如果我们要实现这些功能,我们只能手动的编写大量的代码(这很考验我们JAVA SE的水平....),虽然Java在网络通信、线程处理方面有很大的优势,
但是编写如此复杂的代码,对于程序员来说还是一个不小的挑战。
我们老师说:“第一个穿鞋的人,是觉得咯脚的人”
的确,有没有一个简单的方法,是我们更能专注于web应用的逻辑实现,而不是底层通信、管理这些功能呢?于是Servlet就出现了。
Servlet的功能:(可以参考我的JSP学习笔记,里面对Servlet有详细的介绍)
1、通信支持,怒用自己建立ServerSocket,创建流等
2、多线程支持,容器会自动的为它接受的每个Servlet请求创建一个新的Java线程
有了Servlet容器,我们就不需要为网络通信、多线程、安全性编写代码。
可是,web服务器如果只能返回给客户端静态页面,那么我们的服务器真的是大材小用了,web应用通常需要处理复杂的业务逻辑(包括与DB打交道),这些工作都将在servlet的doXxx这些方法中实现。
下面是一个简单的Servlet
Public class ControlServlet extends HttpServlet{
Public void doPost(request,response){
//业务逻辑
out.println(“<html>”);
....
}
}
可以看到业务逻辑以及输出响应都集中在一个方法中,可以想象,一旦业务逻辑变得复杂,那么我们的编码工作同样很多,于是,我们想出一个办法,将Servlet中的业务逻辑抽取到一个Java类中,这个类就是我们长提的JavaBean。
第一种架构设计:JavaBean+Servlet
这样来看,似乎减少了不少工作,但是,自己看刚才的那个Servlet,输出到客户端的HTML代码,为什么都要加上一个out.println()这样一个壳子,如果能去掉,那该多好啊?!
别低估了out.println(),一旦我们的html代码非常多,而且属性值也非常多的时候,你就会感觉到out.println是有多么麻烦了。这个时候JSP就横空出世了。
在HTML页面中嵌入JAVA代码,既可以帮助我们调用Javabean,还省去了打印HTML语句的烦恼。JSP的本质还是Servlet
第二种架构模式:JavaBean+Jsp
这种架构模式在小型系统中很实用。
不过写过这种系统的人都知道,我们的很多逻辑都写在HTML页面中,两种语言混杂在一起,一是不好日后维护,二是需要创建非常多的JSP页面,三是代码的重复性很大。
我们可以让JSP专注于显示,Servelet专注于页面跳转,JavaBean专注于业务逻辑。这样三者各司其责不是更好吗?