在drp中終于接觸到了mvc,感觸是確實(shí)這樣的架構(gòu)系統(tǒng)靈活性不少,現(xiàn)在感觸最深的就是使用tomcat作為服務(wù)器發(fā)布比iis好多了,起碼發(fā)布很簡單,使用起來方便。
首先來簡單的學(xué)習(xí)一下mvc的基礎(chǔ)知識,mvc全名是model view controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯和數(shù)據(jù)顯式分離的方法組織代碼,將業(yè)務(wù)邏輯被聚集到一個部件里面,在界面和用戶圍繞數(shù)據(jù)的交互能被改進(jìn)和個性化定制的同時而不需要重新編寫業(yè)務(wù)邏輯。
概覽
mvc被獨(dú)特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中,mvc是分層的思想的體現(xiàn),但是區(qū)別于三層設(shè)計模式(區(qū)別以后再和大家分享)。
mvc是一個框架模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開。使用mvc應(yīng)用程序被分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)。最典型的mvc就是jsp + servlet + javabean的模式。
實(shí)例解析
uml圖:大家熟悉mvc的調(diào)用流程邏輯
第一:jsp:由頁面指令和html組成的查詢界面query_condention.jsp,也就是咱們現(xiàn)在的html頁和asp頁面類似。
1
2
3
4
5
6
7
8
9
10
11
|
<html> <head> <title>學(xué)生信息</title> </head> <body> <form action= "searchstudentservlet" method= "post" > 出生日期:<input type= "text" name= "begindate" >至<input type= "text" name= "enddate" > <input type= "submit" value= "查詢學(xué)生" > </form> </body> </html> |
第二:控制層 searchstudentservlet用來接受客戶的請求,來處理流程,調(diào)用model(studentmanager.java),轉(zhuǎn)發(fā)到要請求的后臺服務(wù)器的student_list.jsp頁面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; import javax.servlet.*; import com.bjpowernode.exam.model.*; import com.bjpowernode.exam.manager.*; public class searchstudentservlet extends httpservlet { public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { dopost(request, response); } public void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { string sbegindate = request.getparameter( "begindate" ); string senddate = request.getparameter( "enddate" ); date begindate = new date(); date enddate = new date(); try { begindate = new simpledateformat( "yyyy-mm-dd" ).parse(sbegindate); enddate = new simpledateformat( "yyyy-mm-dd" ).parse(senddate); } catch (exception e) { e.printstacktrace(); } studentmanager studentmanager = new studentmanagerimpl(); list<student> studentlist = studentmanager.findstudentlist(begindate, enddate); //將學(xué)生列表設(shè)置到requet范圍中 //request.setattribute("student_list", studentlist); //轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)是在服務(wù)器端轉(zhuǎn)發(fā)的,客戶端是不知道的 //request.getrequestdispatcher("/student_list.jsp").forward(request, response); //將studentlist放到session中 httpsession session = request.getsession(); session.setattribute( "student_list" , studentlist); //重定向,不會共享request //以下寫法錯誤,該 "/"代表了8080端口 //response.sendredirect("/student_list.jsp"); response.sendredirect(request.getcontextpath() + "/student_list.jsp" ); } } |
第三:student_list.jsp頁面接收數(shù)據(jù)形成html,返回到瀏覽器,渲染在界面上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
<%@ page language= "java" contenttype= "text/html;charset=gbk" %> <%@ page import = "java.util.*" %> <%@ page import = "java.text.*" %> <%@ page import = "com.bjpowernode.exam.model.*" %> <%@ page import = "com.bjpowernode.exam.manager.*" %> <html> <head> <title>學(xué)生信息</title> <style type= "text/css" > /*表格寬度為1px,實(shí)線,黑色*/ table{ border:1px solid black; border-collapse:collapse; } td { border:1px solid black; border-collapse:collapse; } </style> </head> <body> <table border= "1" > <tr> <td>學(xué)生代碼</td> <td>姓名</td> <td>性別</td> <td>出生日期</td> <td>聯(lián)系電話</td> <td>家庭住址</td> <td>班級名稱</td> <td>年齡</td> </tr> <% //list<student> studentlist = (list)request.getattribute("student_list"); list<student> studentlist = (list)session.getattribute( "student_list" ); for (iterator<student> iter=studentlist.iterator(); iter.hasnext();) { student student = iter.next(); %> <tr> <td><%=student.getstudentid()%></td> <td><%=student.getstudentname()%></td> <td><%=student.getsex()%></td> <td><%= new simpledateformat( "yyyy-mm-dd" ).format(student.getbirthday())%></td> <td><%=student.getcontacttel()%></td> <td><%=student.getaddress()%></td> <td><%=student.getclasses().getclassesname()%></td> <% long b = 1000l*60l*60l*24l*365l; long a = system.currenttimemillis() - student.getbirthday().gettime(); %> <td><%=a/b%></td> </tr> <% } %> </table> </body> </html> |
在view的student_list.jsp頁面中是大量的html和java代碼的混合,在查詢條件界面query_condention.jsp主要是html,因?yàn)椴簧婕昂笈_數(shù)據(jù)的交互.
第四:xml配置servlet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?xml version= "1.0" encoding= "iso-8859-1" ?> <web-app xmlns= "http://java.sun.com/xml/ns/j2ee" xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation= "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version= "2.4" > <servlet> <servlet-name>searchstudentservlet</servlet-name> <servlet- class >searchstudentservlet</servlet- class > </servlet> <servlet-mapping> <servlet-name>searchstudentservlet</servlet-name> <url-pattern>/searchstudentservlet</url-pattern> </servlet-mapping> </web-app> |
第五:顯示查詢結(jié)果
總結(jié)
以上query_condention.jsp(輸入查詢條件)、searchstudentservlet.java(請求控制control分)+student_list.jsp(界面顯示)的組合相當(dāng)于三層中的u層,都與界面的顯示相關(guān),而studentmanager.java才是進(jìn)入業(yè)務(wù)處理相當(dāng)于三層的b層。故,我們可以簡單理解成,mvc就是java基于u層的又一個細(xì)化,將界面顯示和請求處理做了進(jìn)一步細(xì)化分工。
mvc被獨(dú)特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中,mvc是分層的思想的體現(xiàn),但是區(qū)別于三層設(shè)計模式(區(qū)別以后再和大家分享)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。