大致总结一下两种开发模式的流程,然后以 MVC模式的一个简单工程为例,详细总结一下具体的代码
(这篇博客是跟随课堂笔记的最开始一篇,之后的每节课内容会顺序更新)
一、Java Web的两种模式 :
1. Model1 : 模式1
先上总体的结构图
具体来说:
(1)首先使用 HTML或者 JSP编写一个页面(使用JSP便于让数据回流,以便于某些功能的实现,JSP中通过Java代码段从发来的Request 中根据属性值获得数据并插入显示在网页中),在这个页面的表单中输入数据,然后点击提交按钮,信息便从用户端发给了服务器端
(2)服务器端 JSP (thanks.jsp) 既要接收并处理数据,还要显示一定的内容,同时还要对用户发来的数据进行更进一步的处理(往下与 user.class userDB.java进行互动),可以说鸭梨山大。
(3)user.class userDB.java负责为thanks.jsp提供服务,例如 thanks.jsp可以封装一个User对象然后通过 userDB.java将新用户的数据写入数据库中
总结 :Model1模式下,thanks.jsp的负担太重,对于非常简单的业务处理的话还好说,复杂一些的业务的话就不太合适了
2.Model2 : 也称 MVC模式
贴图:
在这个例子中,MVC模式的运作:
M: Model 主要就是 User.class UserDB.class 功能和之前说的差不多
V: View 这一部分主要是 : Controller接收并处理完数据之后给View一个指令,然后View就根据这个指令为用户展示出相应的页面,
C: Controller 这一部分主要负责数据的进一步处理(例如用户数据的封装并序列化存储到数据库中)
我理解的大致流程:
用户发送数据到服务器端,首先发送给了 Controller(即 EmailListServlet.java), 在这里我们只需要接收数据,处理数据,然后与Model模块(M模块)进行交互,最后指示View模块应该显示怎样的页面反馈给用户
在代码中看一下:
完整的EmailListServlet.java 代码:
第一部分就是接收了从客户端发来的数据(这里因为客户端也是自己,所以客户端就是 index.jsp)
通过 request.getParameter("name") 来接收数据
第二部分就是和 Model模块进行交互了 (虽然并没有完全实现 : - ) )
第三部分,将我们要发送给 View 模块的数据打包( setAttribute方法 ), 这里的 View 模块就是 thanks.jsp了
二、MVC模式下的一个实例工程 :
以上课时讲的工程为例子 :
1. 工程结构 :
对应上面的图来说明一下
红色的部分代表我工程中对应的文件
User.java 虽然写好了但是,因为没有弄序列化所以还没法传给 thanks.jsp
图中没有写 最关键的一个文件 :
负责 index.jsp -> emailListServlet 映射配置的 web.xml,这个会在后面提到
2.具体代码 :
(1)thanks.jsp
它属于 View层次,所以就有两个职责,接收来自Controller的指令(实际上就是一个包含一些数据的请求), 然后将这些数据展示给用户看 ,具体代码如下 :
显然第一个圈里面就是从 request 中接收了数据 (数据来自 Controller),第二个圈就是把这些数据展示出来,View页面负责的就是显示,所以涉及数据处理的部分不会很复杂
(2) emailListServlet.java 上面大致说过了,这里说一下一些细节:
黄色的圈里的 url指定了要把打包好的数据发送到哪里(发送到 View 模块去), 这里需要注意的就是 url 的写法,之前没有加 /thanks.jsp 中的 / , 导致找不到文件(404 not found),至于最后这个长长的语句,功能上就是把上面打包好的数据发送到url指定的页面中。
(3) index.jsp
因为这个里面很大一部分是修使用的 HTML 和 CSS 代码,所以有些长,这里只把关键的 表单部分代码贴出来
其实这里面关键的部分只有几个:
①第一个圈里画的 action 和 method :
action 指的是要把数据发送到哪里,method是指怎么发送数据,如果method 不是 post ,而是 get 的话,获取数据的方式就是通过拼接字符串了,而action属性在这个工程中其实指向的是 emailListServlet.java ,正因为如此,才需要在 web.xml中配置从 index.jsp 到 emailListServlet.java 的映射,这样 Controller才能收到数据
②也要注意用户输入数据的 name 属性:
因为对方接收数据的时候是要通过这个 name 属性来决定接收哪个数据的,如果属性名匹配就无法接收到数据
3. web.xml
这也是很关键的一个环节,如果 index.jsp -> emailListServlet.java 的映射没有配好,数据就传不到Controller中,也就没有什么意义了
三、运行:
(1) index.jsp 输入数据 :
(2) 经过 emailListServlet.java 处理后直接由 View 模块返回给用户结果 (thanks.java)
完整的工程压缩文件地址 :
https://github.com/ALK416/Java_Web/blob/master/Task_9_21.zip